PostgreSQL Joins
PostgreSQL Join, ilgili tablolar arasındaki ortak sütunların değerlerine dayalı olarak bir ( self-join ) veya daha fazla tablodaki sütunları birleştirmek için kullanılır. Ortak sütunlar tipik olarak birinci tablonun birincil anahtar sütunları ve ikinci tablonun yabancı anahtar sütunlarıdır.
PostgreSQL, iç birleştirmeyi , sol birleştirmeyi , sağ birleştirmeyi , tam dış birleştirmeyi , çapraz birleştirmeyi , doğal birleştirmeyi ve self-join adı verilen özel bir birleştirme türünü destekler .
Örnek tabloların ayarlanması
Diyelim ki adı verilen basket_a
ve basket_b
meyveleri depolayan iki tablonuz var :
CREATE TABLE basket_a ( a INT PRIMARY KEY, fruit_a VARCHAR (100) NOT NULL ); CREATE TABLE basket_b ( b INT PRIMARY KEY, fruit_b VARCHAR (100) NOT NULL ); INSERT INTO basket_a (a, fruit_a) VALUES (1, 'Apple'), (2, 'Orange'), (3, 'Banana'), (4, 'Cucumber'); INSERT INTO basket_b (b, fruit_b) VALUES (1, 'Orange'), (2, 'Apple'), (3, 'Watermelon'), (4, 'Pear');
Kod dili: SQL (Yapılandırılmış Sorgu Dili) ( sql )
Tablolarda apple
ve gibi bazı yaygın meyveler vardır orange
.
Aşağıdaki ifade basket_a
tablodan veri döndürür :

Ve aşağıdaki ifade basket_b
tablodan veri döndürür :

PostgreSQL iç birleştirme
Aşağıdaki ifade , ve sütunlarındaki değerleri eşleştirerek ilk tabloyu ( basket_a
) ikinci tabloyla ( basket_b
) birleştirir :fruit_a
fruit_b
SELECT a, fruit_a, b, fruit_b FROM basket_a INNER JOIN basket_b ON fruit_a = fruit_b;
Kod dili: SQL (Yapılandırılmış Sorgu Dili) ( sql )

İç birleştirme, ilk tablodaki ( basket_a
) her satırı inceler . fruit_a
Sütundaki değeri fruit_b
, ikinci tablodaki ( basket_b
) her satırın sütunundaki değerle karşılaştırır . Bu değerler eşitse, iç birleştirme her iki tablodan da sütunlar içeren yeni bir satır oluşturur ve bu yeni satırı sonuç kümesine ekler.
Aşağıdaki Venn şeması iç birleştirmeyi göstermektedir:

PostgreSQL sol birleştirme
Aşağıdaki ifade, basket_a
tabloyu tabloyla birleştirmek için left join yan tümcesini kullanır basket_b
. Sol birleştirme bağlamında, ilk tabloya sol tablo ve ikinci tabloya sağ tablo denir.
SELECT a, fruit_a, b, fruit_b FROM basket_a LEFT JOIN basket_b ON fruit_a = fruit_b;
Kod dili: SQL (Yapılandırılmış Sorgu Dili) ( sql )

Sol birleştirme, sol tablodan veri seçmeye başlar. Fruit_a sütunundaki değerleri sepet_b tablosundaki meyve_b sütunundaki değerlerle karşılaştırır.
Bu değerler eşitse, sol birleştirme, her iki tablonun sütunlarını içeren yeni bir satır oluşturur ve bu yeni satırı sonuç kümesine ekler. (sonuç kümesindeki satır #1 ve #2'ye bakın).
Değerlerin eşit olmaması durumunda, sol birleştirme ayrıca her iki tablodan da sütunlar içeren yeni bir satır oluşturur ve bunu sonuç kümesine ekler. Ancak, sağdaki tablonun ( basket_b
) sütunlarını null ile doldurur . (sonuç kümesindeki satır #3 ve #4'e bakın).
Aşağıdaki Venn şeması sol birleştirmeyi göstermektedir:

Soldaki tablodan, sağdaki tabloda eşleşen satırları olmayan satırları seçmek için, bir WHERE
yan tümce ile sol birleştirmeyi kullanırsınız . Örneğin:
SELECT a, fruit_a, b, fruit_b FROM basket_a LEFT JOIN basket_b ON fruit_a = fruit_b WHERE b IS NULL;
Kod dili: SQL (Yapılandırılmış Sorgu Dili) ( sql )
Çıktı:

LEFT JOIN
öğesinin ile aynı olduğunu unutmayın , LEFT OUTER JOIN
böylece bunları birbirinin yerine kullanabilirsiniz.
Aşağıdaki Venn şeması, sol tablodan, sağ tablodan eşleşen satırları olmayan satırları döndüren sol birleştirmeyi göstermektedir:

PostgreSQL sağ birleştirme
Sağ katılmak solun ters versiyonu katılmak olduğunu. Doğru birleştirme, doğru tablodan veri seçmeye başlar. Sağdaki tablodaki her satırın meyve_b sütunundaki her değeri, meyve_a tablosundaki her satırın meyve_a sütunundaki her bir değerle karşılaştırır.
Bu değerler eşitse, sağ birleştirme, her iki tablodan da sütunlar içeren yeni bir satır oluşturur.
Bu değerlerin eşit olmaması durumunda, sağ birleştirme her iki tablodan da sütunlar içeren yeni bir satır oluşturur. Ancak sol tablodaki sütunları NULL ile doldurur.
Aşağıdaki ifade, basket_a
tabloyu tabloyla birleştirmek için doğru birleştirmeyi kullanır basket_b
:
SELECT a, fruit_a, b, fruit_b FROM basket_a RIGHT JOIN basket_b ON fruit_a = fruit_b;
Kod dili: SQL (Yapılandırılmış Sorgu Dili) ( sql )
İşte çıktı:

Aşağıdaki Venn şeması doğru birleştirmeyi göstermektedir:

Benzer şekilde, WHERE
aşağıdaki gibi bir yan tümce ekleyerek, sağdaki tablodan eşleşen satırları olmayan satırları soldaki tablodan alabilirsiniz :
SELECT a, fruit_a, b, fruit_b FROM basket_a RIGHT JOIN basket_b ON fruit_a = fruit_b WHERE a IS NULL;
Kod dili: SQL (Yapılandırılmış Sorgu Dili) ( sql )

RIGHT JOIN
Ve RIGHT OUTER JOIN
bu nedenle birbirinin kullanabilirsiniz aynıdır.
Aşağıdaki Venn şeması, sağdaki tablodan, soldaki tabloda eşleşen satırları olmayan satırları döndüren sağ birleştirmeyi göstermektedir:

PostgreSQL tam dış birleştirme
Tam dış birleşim veya tam döndürür varsa her iki taraftan eşleştirme satırlarla, hem sağ hem sol tablolardan tüm satırları içeren bir sonuç kümesi katılmak. Eşleşme olmaması durumunda tablonun sütunları NULL ile doldurulacaktır.
SELECT a, fruit_a, b, fruit_b FROM basket_a FULL OUTER JOIN basket_b ON fruit_a = fruit_b;
Kod dili: SQL (Yapılandırılmış Sorgu Dili) ( sql )
Çıktı:

Aşağıdaki Venn şeması, tam dış birleştirmeyi göstermektedir:

Diğerinde eşleşen satırları olmayan bir tablodaki satırları döndürmek için, aşağıdaki WHERE
gibi bir yan tümce ile tam birleştirmeyi kullanırsınız :
SELECT a, fruit_a, b, fruit_b FROM basket_a FULL JOIN basket_b ON fruit_a = fruit_b WHERE a IS NULL OR b IS NULL;
Kod dili: SQL (Yapılandırılmış Sorgu Dili) ( sql )
İşte sonuç:

Aşağıdaki Venn şeması, diğer tabloda karşılık gelen satırlara sahip olmayan bir tablodan satırları döndüren tam dış birleştirmeyi göstermektedir:

Aşağıdaki resim, ayrıntılı sözdizimi ile şimdiye kadar tartıştığımız tüm PostgreSQL birleşimlerini göstermektedir:

Kaynak