POSTGRESQL ONE TO MANY


Postgresql'de One to Many İlişkisi Nasıl Oluşturulur?

   Postgresql'de one to many ilişkisi (1 den n'e ya da birden çoğa) içeren tabloları oluşturmak için aralarında bu ilişkiyi mantıksal olarak barındıracak iki tablo seçmemiz gerekiyor.

Örneğin bir sınıfta birden fazla öğrenci bulunabilir ancak bir öğrenci yalnız bir sınıfa bağlıdır. Bu durumda ortaya one to many dediğimiz ilişki çıkar.


Postgresql'de One to Many İlişkili Tabloların Oluşturulması


    Verdiğimiz örneğe devam edecek olursak öğrenci tablosunun nitelikleri adı, soyadı, okul_no, yaş olsun. Sınıf tablosunun nitelikler ise sınıf_no, şube, sınıf_mevcudu olsun. Öncelikle sınıf tablosunu oluşturacak olan sql sorgusunu yazalım.

 

 create table sinif(

 id serial primary key,

 sinif_no int,

 sube char(1),

 sinif_mevcudu int

)

 


 ve öğrenci tablosuna ait sorguyu yazıp çalıştıralım.

 

create table ogrenci(

 id serial primary key,

 ad varchar(20),

 soyad varchar(20),

 okul_no int,

 yas int,

 sinif int references sinif(id)

)

Öncelikle sınıf tablosunu oluşturduk ve öğrenci tablosunu oluştururken sınıf tablosundaki id sütununu, öğrenci tablosuna sınıf niteliği adı altında yabancı anahtar (foreign key) olarak atadık.

 Böylece her öğrencinin bir sınıfı oldu ancak sınıf için böyle bir kısıtlama koymadık. Yani 1'e N dediğimiz ilişkiyi oluşturduk. Şimdi tablolara veri ekleyip sorgularla ilişkiyi gösterelim. 

 Sınıf tablosu için veri

insert into sinif values (default, 1, 'A', 20),(default, 1, 'B', 19),(default, 2, 'A', 21)


            Öğrenci tablosu için veri


insert into ogrenci values 

(default, 'Ali', 'Turan', 10, 7, 1),

(default, 'Zeynep', 'Kara', 11, 7, 1),

(default, 'Ahmet', 'Çoban', 20, 7, 1),

(default, 'Elif', 'Elmas', 35, 7, 2)


        Şimdi 1-A sınıfındaki öğrencileri getirecek olan sorguyu yazıp çalıştıralım.


        select * from ogrenci where sinif in (select  id from sinif where sinif_no=1 and  sube='A')

        çalıştırdıktan sonra çıktımız şu şekilde olacaktır:




 






 

Mert Cenk

Hiç yorum yok:

Yorum Gönder