PostgreSQL JOIN ya da INNER JOIN

INNER JOIN en çok kullanılan  join türüdür ve iki tablonun kesişen verilerini göstermek için kullanılır. JOIN ve INNER JOIN plpgsql cümleleri aynı anlamı ifade etmektedir iki şekilde de yazarak aynı sonucu elde edebiliriz. INNER JOIN kullanmadan önce tabloları birbiri ile birleştirmek için  ortak kolonlarını bulmamız gerekiyor . Aşağıda ki resimde görüldüğü gibi ortak kesişim tabloları id ve ŞehirId kolonlarıdır bunları birbiri ile eşitleyerek

Tablolarımızı birleştirebiliriz.

Genel kullanımı aşağıdaki gibidir.

SELECT*FROM  tablo_1 as takma_isim INNER JOIN  tablo_2 as takma_isim
  ON takma_isim.tablo_1=takma_isim.tablo_2

aşağıdaki  inner join için database oluşturarak içerisine veri insert edelim.

 

CREATE DATABASE joın_ornek;
CREATE TABLE Sehirler(id int,SehirIsmi text);
CREATE TABLE MeshurYiyecekler(id integer,Sehirid integer,YiyecekIsmi text);
INSERT INTO Sehirler(id,SehirIsmi)VALUES(1,'Adana');
INSERT INTO Sehirler(id,SehirIsmi)VALUES(42,'Konya');
INSERT INTO Sehirler(id,SehirIsmi)VALUES(3,'Afyon');
INSERT INTO MeshurYiyecekler(id,Sehirid,YiyecekIsmi)VALUES(1,1,'Kebap');
INSERT INTO MeshurYiyecekler(id,Sehirid,YiyecekIsmi)VALUES(2,42,'Etli Ekmek');
INSERT INTO MeshurYiyecekler(id,Sehirid,YiyecekIsmi)VALUES(3,3,'Kaymak');

Şehirler ve MeshurYiyecekler tablolarımızı oluşturduk şimdi hangi şehirlerde hangi yemeklerin iyi yapıldığını gösterecek plgpsql cümlesini yazalım.

 SELECT s.sehirismi,my.yiyecekismi FROM sehirler as s INNER JOIN meshuryiyecekler as my ON s.id=my.sehirid;

Yukarıdaki örnek de iki tabloyu birleştirdik ve bu tabloların görülmesini istediğimiz kolonlarını SELECT ile FROM kelimelerinin arasına tablolara verdiğimiz takma isimleri ile ilgili kolonuyla arasına nokta koyarak yazdık ve hangi ürünün hangi yemeklerinin meşhur olduğunu görmüş olduk.

Eğer Sehirler tablosuna bir kayıt eklesek ve bu sehre ait meşhur yiyeceği MeshurYiyecekler tablosuna eklemesek join işlemi sırasında bu kayıt gelmez.

Test yapmak için Sehirler tablosuna bir kayıt ekleyelim ama MeshurYiyecekler tablosuna ilgili şehrin meşhur yiyeceğini eklemeyelim.

SELECT s.sehirismi,my.yiyecekismi FROM sehirler as s INNER JOIN meshuryiyecekler as my ON s.id=my.sehirid;

 

Yukarıda görüldüğü gibi gaziantep ilini eklememize rağmen gözükmemektedir. Bunun sebebi Meshuryiyecekler tablosunda karşılığı olmadığı içindir.

Biraz önce çalıştırdığımız INNER JOIN script’ini tekrar çalıştırdığımızda gördüğünüz gibi Gaziantep ile ilgili bir kayıt gelmedi.

Sehirler tablosunun sonundaki “s” ve MeshurYiyecekler tablosunun sonundaki “my” ifadelerine alias denir. Bu şekilde script’lerinizi daha anlaşılır bir şekilde yazabilirsiniz. Aşağıdaki script’te de gördüğünüz gibi alias tanımlamışsak select kısmında da alias’ları kullanarak ihtiyacımız olan kolonları çekmemiz gerekir. Alias’ın diğer bir amacı da iki tabloda da aynı isme ait bir kolon varsa ve alias tanımlamadan select kısmında direk kolonun ismini yazarsanız aşağıdaki gibi bir hata alırsınız.

select ID,SehirIsmi,YiyecekIsmi from Sehirler as  s INNER JOIN MeshurYiyecekler my ON s.ID=my.SehirID

Yukarıdaki sorgu gibi Alias kullanmadan sorgu çektiğimizde  aynı isme sahip ID kolonunu çekmeye çalıştığımızda hata alırız.

Msg 209, Level 16, State 1, Line 2

Ambiguous column name ‘ID’.

 

Loading