MySQL Birleştirme: İç, Dış, Sol, Sağ, Çapraz

⚡ Akıllı Özet

MySQL JOIN işlemleri, iki veya daha fazla ilişkili tablodan gelen satırları tek bir sonuç kümesinde birleştirir. Bu kaynak, pratik veritabanı çalışmaları için çalıştırılabilir sorgular, örnek veriler ve açık çıktı tablolarıyla CROSS, INNER, LEFT, RIGHT ve OUTER JOIN işlemlerini açıklamaktadır.

  • 🔗 Temel İlke: JOIN işlemi, birincil anahtar ve yabancı anahtar ilişkilerini kullanarak tablolar arasında satırları eşleştirir.
  • Neden Önemlidir: Tek bir JOIN sorgusu, indekslemeyi kullanır ve birden fazla ayrı sorguya kıyasla sunucuya gidiş geliş sayısını azaltır.
  • ✖️ Çapraz Birleştirme Davranışı: Birinci tablonun her satırı, ikinci tablonun her satırıyla eşleşerek Kartezyen çarpımı oluşturur.
  • 🎯 İçsel JOIN Davranışı: Yalnızca her iki tabloda da eşleşme koşulunu sağlayan satırlar döndürülür.
  • ↔️ Dış JOIN Davranışı: LEFT ve RIGHT JOIN işlemleri eşleşmeyen satırları da döndürür ve eksik sütunları NULL ile doldurur.
  • 🧩 AÇIK ve KULLANMAK arasındaki fark: USING ifadesi, sütun adlarının özdeş olmasını gerektirirken, ON ifadesi herhangi bir eşleşen ifadeyi destekler.

MySQL KATILIYOR

JOINS nedir?

Birleştirmeler, iki veya daha fazla veritabanı tablosundan veri alınmasına yardımcı olur.

Tablolar, birincil ve yabancı anahtarlar kullanılarak karşılıklı olarak ilişkilendirilir.

Not: JOIN işlemi, SQL öğrenenler arasında en çok yanlış anlaşılan konulardan biridir. Basitlik ve kolay anlaşılabilirlik adına, örnek uygulama için yeni bir veritabanı kullanacağız. Aşağıda gösterildiği gibi.

Aşağıdaki örneklerin her birinde bu iki tablo kullanılmıştır. film_id sütun üyeler işaret ediyor id sütun filmler — her bir JOIN işleminin eşleştiği ilişki.

üyeler

id İsim soyadı film_id
1 Adem Demirci 1
2 Ravi Kumar 2
3 Susan Davidson 5
4 Jenny Adrianna 8
5 Rüzgâraltı Gürültü 10

filmler

id başlık kategori
1 ASSASSIN'S CREED: KÖRLER animasyonlar
2 Gerçek Çelik(2012) animasyonlar
3 Alvin ve Sincaplar animasyonlar
4 Tintin'in Maceraları animasyonlar
5 Güvenli (2012) Action
6 Güvenli Ev(2012) Action
7 GIA 18+
8 Son tarih 2009 18+
9 Kirli Resim 18+
10 marley ve ben Romantizm

JOIN işlemlerini neden kullanmalıyız?

Her bir JOIN türüne bakmadan önce, neden birden fazla sorgu çalıştırmak yerine JOIN işleminin tercih edildiğini bilmekte fayda var.

Şimdi aynı görevi sorgu çalıştırarak yapabiliyorken neden JOIN'leri kullandığımızı düşünebilirsiniz. Özellikle veritabanı programlama konusunda biraz deneyiminiz varsa, sorguları tek tek çalıştırabileceğimizi biliyorsanız, her birinin çıktısını ardışık sorgularda kullanın. Elbette bu mümkün. Ancak JOIN'leri kullanarak herhangi bir arama parametresiyle yalnızca tek bir sorgu kullanarak işi halledebilirsiniz. Diğer taraftan MySQL daha iyi performans elde edebilir İndekslemeyi kullanabildiği için JOIN'lerle. Birden fazla sorgu çalıştırmak yerine tek bir JOIN sorgusunun kullanılması sunucu yükünü azaltır. Bunun yerine birden fazla sorgu kullanmak, bu durum arasında daha fazla veri aktarımına yol açar MySQL ve uygulamalar (yazılım). Ayrıca uygulama sonunda daha fazla veri manipülasyonu gerektirir.

Daha iyiye ulaşabileceğimiz açık MySQL ve JOIN'lerin kullanımıyla uygulama performansları.

Birleştirme Türleri

MySQL Bu, aynı iki tablo hakkında farklı soruları yanıtlayan çeşitli JOIN türlerini destekler. Aşağıdaki tabloda bunlar karşılaştırılmıştır; her tür daha sonra bir sorgu ve çıktısıyla gösterilmiştir.

BİRLEŞTİRME türü Satırlar döndürüldü Sonuçta NULL değerler mi var? Tipik kullanım
ÇAPRAZ KATIL A tablosunun her satırı, B tablosunun her satırıyla eşleştirildi. Yok hayır Tüm olası kombinasyonları oluşturma
INNER JOIN Yalnızca her iki tabloda da koşulu sağlayan satırlar Yok hayır Film kiralayan üyeler
SOL KATILIN Soldaki tablodaki tüm satırlar, artı sağdaki tablodaki eşleşmeler. Evet, sağ tarafta Tüm filmler, hatta hiç kiralanmamış olanlar bile.
DOĞRU BİRLEŞTİR Sağdaki tablodaki tüm satırlar, artı soldaki tablodaki eşleşmeler. Evet, sol tarafta Üye olmasa bile tüm filmler

ÇAPRAZ KATIL

Çapraz JOIN, bir veritabanı tablosundaki her satırı diğerinin tüm satırlarıyla eşleştiren en basit JOIN biçimidir.

Başka bir deyişle, bize ilk tablonun her satırının ikinci tablodaki tüm kayıtlarla kombinasyonlarını verir.

Diyelim ki tüm üye kayıtlarını tüm film kayıtlarına karşı elde etmek istiyoruz, istediğimiz sonuçları elde etmek için aşağıda gösterilen komut dosyasını kullanabiliriz.

Birleştirme türleri

SELECT * FROM `movies` CROSS JOIN `members`

Yukarıdaki betiğin çalıştırılması MySQL tezgâh bize şu sonuçları verir.

id title id first_name last_name movie_id
1 ASSASSIN'S CREED: EMBERS Animations 1 Adam Smith 1
1 ASSASSIN'S CREED: EMBERS Animations 2 Ravi Kumar 2
1 ASSASSIN'S CREED: EMBERS Animations 3 Susan Davidson 5
1 ASSASSIN'S CREED: EMBERS Animations 4 Jenny Adrianna 8
1 ASSASSIN'S CREED: EMBERS Animations 6 Lee Pong 10
2 Real Steel(2012) Animations 1 Adam Smith 1
2 Real Steel(2012) Animations 2 Ravi Kumar 2
2 Real Steel(2012) Animations 3 Susan Davidson 5
2 Real Steel(2012) Animations 4 Jenny Adrianna 8
2 Real Steel(2012) Animations 6 Lee Pong 10
3 Alvin and the Chipmunks Animations 1 Adam Smith 1
3 Alvin and the Chipmunks Animations 2 Ravi Kumar 2
3 Alvin and the Chipmunks Animations 3 Susan Davidson 5
3 Alvin and the Chipmunks Animations 4 Jenny Adrianna 8
3 Alvin and the Chipmunks Animations 6 Lee Pong 10
4 The Adventures of Tin Tin Animations 1 Adam Smith 1
4 The Adventures of Tin Tin Animations 2 Ravi Kumar 2
4 The Adventures of Tin Tin Animations 3 Susan Davidson 5
4 The Adventures of Tin Tin Animations 4 Jenny Adrianna 8
4 The Adventures of Tin Tin Animations 6 Lee Pong 10
5 Safe (2012) Action 1 Adam Smith 1
5 Safe (2012) Action 2 Ravi Kumar 2
5 Safe (2012) Action 3 Susan Davidson 5
5 Safe (2012) Action 4 Jenny Adrianna 8
5 Safe (2012) Action 6 Lee Pong 10
6 Safe House(2012) Action 1 Adam Smith 1
6 Safe House(2012) Action 2 Ravi Kumar 2
6 Safe House(2012) Action 3 Susan Davidson 5
6 Safe House(2012) Action 4 Jenny Adrianna 8
6 Safe House(2012) Action 6 Lee Pong 10
7 GIA 18+ 1 Adam Smith 1
7 GIA 18+ 2 Ravi Kumar 2
7 GIA 18+ 3 Susan Davidson 5
7 GIA 18+ 4 Jenny Adrianna 8
7 GIA 18+ 6 Lee Pong 10
8 Deadline(2009) 18+ 1 Adam Smith 1
8 Deadline(2009) 18+ 2 Ravi Kumar 2
8 Deadline(2009) 18+ 3 Susan Davidson 5
8 Deadline(2009) 18+ 4 Jenny Adrianna 8
8 Deadline(2009) 18+ 6 Lee Pong 10
9 The Dirty Picture 18+ 1 Adam Smith 1
9 The Dirty Picture 18+ 2 Ravi Kumar 2
9 The Dirty Picture 18+ 3 Susan Davidson 5
9 The Dirty Picture 18+ 4 Jenny Adrianna 8
9 The Dirty Picture 18+ 6 Lee Pong 10
10 Marley and me Romance 1 Adam Smith 1
10 Marley and me Romance 2 Ravi Kumar 2
10 Marley and me Romance 3 Susan Davidson 5
10 Marley and me Romance 4 Jenny Adrianna 8
10 Marley and me Romance 6 Lee Pong 10

INNER JOIN

Çapraz birleştirme (CROSS JOIN) her olası eşleşmeyi döndürür ki bu nadiren istediğiniz şeydir. İç birleştirme (INNER JOIN) ise sonucu gerçekten ilişkili olan eşleşmelere indirger.

İç JOIN, her iki tablodan da verilen koşulu karşılayan satırları döndürmek için kullanılır.

Diyelim ki, film kiralayan üyelerin listesini ve kiraladıkları filmlerin başlıklarını almak istiyorsunuz. Bunun için, verilen koşulları sağlayan her iki tablodan da satırları döndüren bir INNER JOIN kullanabilirsiniz.

INNER JOIN

SELECT members.`first_name` , members.`last_name` , movies.`title`
FROM members ,movies
WHERE movies.`id` = members.`movie_id`

Yukarıdaki betiği çalıştırmak, ver

first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me

Aynı sonuçları elde etmek için yukarıdaki sonuç komut dosyasının aşağıdaki şekilde de yazılabileceğini unutmayın.

SELECT A.`first_name` , A.`last_name` , B.`title`
FROM `members` AS A
INNER JOIN `movies` AS B
ON B.`id` = A.`movie_id`

Dış JOIN'ler

INNER JOIN, eşleşmesi olmayan satırları sessizce atar. Eşleşmeyen satırlar önemliyse, OUTER JOIN doğru seçimdir.

MySQL Dış birleştirmeler (outer JOIN), her iki tablodan da eşleşen tüm kayıtları döndürür.

Birleştirilmiş tabloda eşleşmeyen kayıtları tespit edebilir. Geri dönüyor NULL Eşleşme bulunmazsa birleştirilmiş tablonun kayıtlarına ilişkin değerler.

Kafa karıştırıcı mı geliyor? Bir örneğe bakalım –

SOL KATILIN

Şimdi tüm filmlerin adlarını, onları kiralayan üyelerin adlarıyla birlikte almak istediğinizi varsayalım. Bazı filmlerin hiç kimse tarafından kiralanmadığı açıktır. Basitçe kullanabiliriz SOL KATILIN amacıyla.

Dış JOIN'ler

LEFT JOIN, sağdaki tabloda eşleşen satır bulunmasa bile soldaki tablodaki tüm satırları döndürür. Sağdaki tabloda hiçbir eşleşme bulunmadığında NULL döndürülür.

SELECT A.`title` , B.`first_name` , B.`last_name`
FROM `movies` AS A
LEFT JOIN `members` AS B
ON B.`movie_id` = A.`id`

Yukarıdaki betiğin çalıştırılması MySQL Çalışma tezgahı bunu sağlıyor. Aşağıda listelenen sonuçta, kiralanmamış filmler için üye adı alanlarının NULL değerlere sahip olduğunu görebilirsiniz. Bu, söz konusu film için üye tablosunda eşleşen bir üye bulunamadığı anlamına gelir.

title first_name last_name
ASSASSIN'S CREED: EMBERS Adam Smith
Real Steel(2012) Ravi Kumar
Safe (2012) Susan Davidson
Deadline(2009) Jenny Adrianna
Marley and me Lee Pong
Alvin and the Chipmunks NULL NULL
The Adventures of Tin Tin NULL NULL
Safe House(2012) NULL NULL
GIA NULL NULL
The Dirty Picture NULL NULL
Note: Null is returned for non-matching rows on right

DOĞRU BİRLEŞTİR

RIGHT JOIN açıkça LEFT JOIN'in tam tersidir. RIGHT JOIN, soldaki tabloda eşleşen satır bulunmasa bile sağdaki tablonun tüm sütunlarını döndürür. Soldaki tabloda hiçbir eşleşme bulunmadığında NULL döndürülür.

Örneğimizde üyelerin isimlerini ve onlar tarafından kiralanan filmleri almanız gerektiğini varsayalım. Artık henüz film kiralamamış yeni bir üyemiz var

DOĞRU BİRLEŞTİR

SELECT A.`first_name` , A.`last_name`, B.`title`
FROM `members` AS A
RIGHT JOIN `movies` AS B
ON B.`id` = A.`movie_id`

Yukarıdaki betiğin çalıştırılması MySQL workbench aşağıdaki sonuçları veriyor.

first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me
NULL NULL Alvin and the Chipmunks
NULL NULL The Adventures of Tin Tin
NULL NULL Safe House(2012)
NULL NULL GIA
NULL NULL The Dirty Picture
Note: Null is returned for non-matching rows on left

“ON” ve “USING” cümleleri

Şu ana kadar yapılan tüm sorgular, ON koşulu içeren satırlarla eşleşti. MySQL Eşleşen sütunlar aynı adı paylaştığında daha kısa bir alternatif sunar.

Yukarıdaki JOIN sorgu örneklerinde, tablo arasındaki kayıtları eşleştirmek için ON cümlesini kullandık.

USING cümlesi de aynı amaç için kullanılabilir. Farkı KULLANMA öyle her iki tablodaki eşleşen sütunlar için aynı adlara sahip olması gerekir.

Şu ana kadar “movies” tablosunda birincil anahtarını “id” adıyla kullandık. Aynısını “üyeler” tablosunda “movie_id” adıyla anmıştık.

“movies” tablolarının “id” alanını “movie_id” ismine sahip olacak şekilde yeniden adlandıralım. Bunu aynı eşleşen alan adlarına sahip olmak için yapıyoruz.

ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;

Daha sonra yukarıdaki LEFT JOIN örneğiyle USING'i kullanalım.

SELECT A.`title` , B.`first_name` , B.`last_name`
FROM `movies` AS A
LEFT JOIN `members` AS B
USING ( `movie_id` )

Kullanmanın dışında ON hem de JOIN'lerle KULLANIM diğer birçok şeyi kullanabilirsiniz MySQL gibi hükümler GROUP BY, NEREDE ve hatta gibi işlevler SUM, AVG, vb.

SSS

JOIN işlemi, iki tablodaki sütunları yan yana birleştirir ve satırları bir anahtar üzerinden eşleştirir. UNION işlemi ise iki sorgunun sonuçlarını dikey olarak üst üste yığar ve sütun sayılarının ve türlerinin eşleşmesini gerektirir.

Evet. Her birinin kendi ON koşulu olan ek JOIN maddelerini zincirleyin. MySQL İlk iki tabloyu birleştirir, ardından bu ara sonucu bir sonraki tabloya birleştirir ve bu şekilde devam eder.

SELF JOIN, iki takma ad kullanarak bir tabloyu kendi kendine birleştirir. Bir tablonun içindeki satırları karşılaştırır; örneğin, bir çalışanın satırını o çalışanın yöneticisinin satırıyla eşleştirir.

Evet. Düzenleme programlarına entegre edilmiş yapay zeka asistanları, örneğin... MySQL Tezgâh Basit bir komut isteminden JOIN sorguları oluşturabilirsiniz. Yanlış bir anahtar, sessizce yanlış sonuçlar doğuracağından, oluşturulan ON koşullarını her zaman gözden geçirin.

Kısmen doğru. Yapay zeka danışmanları, genellikle yürütme süresini kısaltan indeksler ve daha iyi birleştirme sıraları önerir. Optimizasyon algoritması yine de nihai planı seçer, bu nedenle birleştirme anahtarlarında doğru indeksleme en büyük faktör olmaya devam eder.

Bu yazıyı şu şekilde özetleyin: