Özet: Bu derste, birden fazla tablodaki verileri sorgulamak için çeşitli MySQL birleştirme ifadeleri öğreneceksiniz.
MySQL JOIN’e Giriş
İlişkisel veritabanı, yabancı anahtarlı sütunlar olarak bilinen ortak sütunları kullanarak birbirine bağlanan birden çok ilişkili tablodan oluşur. Veritabanı yönetimi bakımından verilerin tutarlı ve hızlı bir şekilde ulaşılması için bu bir zorunluktur.
Örneğin yazıda kullanacağımız kutuphane veritabanında kitap tablosunda yazar bilgileri için yazarno olmasına karşın yazar tablosunda bu yazarno’ya ait detaylı yazar bilgileri mevcuttur.
KITAP tablosu ile YAZAR tablosu arasında ilişkiyi yazarno sütunu sağlamaktadır. İlgili kitabın yazarna ulaşmak için YAZAR tablosundaki yazar numaralarına bakılabilir.
Tek sorguda kitabın detaylaarı ve yazarı ile ilgili bilgi almak istiyorsak burada tabloları yabancı anahtarlarına göre birleştirme(JOIN) yapmamız gerkiyor.
İşte bu yüzden MySQL JOIN oyuna giriyor.
Bir MySQL JOIN, tablolar arasındaki ortak sütunun değerlerine dayanarak bir (kendinden katılma) veya daha fazla tablo arasında veri bağlama yöntemidir.
MySQL aşağıdaki katılım türlerini destekler:
- Cross join
- Inner join
- Left join
- Right join
Tabloları birleştirmek için karşılık gelen birleştirme türü için CROSS JOIN, INNER JOIN, LEFT JOIN veya RIGHT JOIN yan tümcesini kullanılır.
JOIN, SELECT ifadesini takip eden FROM ifadesinden sonra kullanılır.
MySQL’in FULL OUTER JOIN desteklemediğine dikkat edin.
Her bir birleştirme türünü anlamanızı kolaylaştırmak için, aşağıdaki veritabanını kullanacağız.
Örnek Veritabanı
MySQL CROSS JOIN Kullanımı
CROSS JOIN, çoklu tablolardan elde edilen kartezyen bir üründür. Diyelim ki, CROSS JOIN’i kullanarak yazar ve tur tablolarını birleştireceksiniz, sonuç kümesi, yazar tablosundaki satırların tur tablosundaki satırlarla kombinasyonlarını içerecektir.
Örnek Sorgu :Çapraz birleştirme gerçekleştirmek için, aşağıdaki ifadedeki gibi CROSS JOIN yan tümcesini kullanın:
1 2 3 4 5 | SELECT yazar.yazarad,tur.turad FROM yazar CROSS JOIN tur |
Aşağıda, sorgunun sonuç kümesi gösterilmektedir:
Gördüğünüz gibi, yazar tablosundaki her satır, Kartezyen çarpımı oluşturmak için tur tablosundaki satırlarla birleşir.
MySQL INNER JOIN Kullanımı
BİR INNER JOIN oluşturmak için, birleşim yüklemi olarak bilinen bir duruma ihtiyacınız vardır. Bir INNER JOIN, birleştirilen iki tablodaki satırların eşleşen sütun değerlerine sahip olmasını gerektirir. INNER JOIN, birleştirme öngörüsünü temel alarak birleştirilen iki tablonun sütun değerlerini birleştirerek sonuç kümesi oluşturur.
İki tabloyu birleştirmek için, INNER JOIN, ilk tablodaki her satırı, ikinci satırdaki her bir satırla karşılaştırarak birleştirme öngörüsünü karşılayan satır çiftlerini bulur. Join-yordamı NULL olmayan değerlerin eşleştirilmesiyle karşılandığında, iki tablonun eşleşen her bir sıra çifti için sütun değerleri sonuç kümesine dahil edilir.
Örnek Sorgu: Aşağıdaki ifade, tur ve kitap tablolarını birleştirmek için INNER JOIN deyimini kullanır:
1 2 3 4 5 | SELECT kitap.kitapad,tur.turad FROM kitap INNER JOIN tur on kitap.turno=tur.turno |
Bu ifadede, aşağıdaki ifade join – yordamıdır. ON ifadesinden sonra iki tablonun ortak alanları arasında birleştirme işlemi için kullanılır:
1 2 3 | ON kitap.turno=tur.turno |
Yukarıda dediğim gibi iki tabloda da ortak alan olması gerekir. bu alanlar ON ifadesinden sonra bir birlerine eşitlenir.
Sorgunun çıktısı aşağıdaki gibi olacaktır.
Bu şekilde, her iki tablodaki satırlar da sonuç kümesine dahil edilecek aynı desene sahip olmalıdır.
Örnek Sorgu :JOIN ifadeleri ile birden fazla tabloyu birleştirme yapabiliriz. Aşağıdaki örnekte 3 tablo birleştirilmiştir. Kitap, Tur ve Yazar tabloları birleştirilmiştir.
1 2 3 4 5 6 | SELECT kitap.kitapad,tur.turad,yazar.yazarad,yazar.yazarsoyad FROM kitap INNER JOIN tur ON kitap.turno=tur.turno INNER JOIN yazar ON kitap.yazarno= yazar.yazarno |
Sorgunun çıktısı aşağıdaki gibi olacaktır.
Örnek Sorgu : Örneği biraz daha genişletelim. Her öğrencinin okuduğu kitapların sayısını listeleyen sorguyu yapalım. (Not:Ogrenci tablosunda 100 tane öğrenci var. Burada, hiç kitap okumayan öğrenci varsa sorguda eşleşmediği için gösterilmeyecektir.)
1 2 3 4 5 6 7 | SELECT ogrenci.ogrno,ogrenci.ograd,ogrenci.ogrsoyad,COUNT(islem.islemno) AS 'KITAPSAYISI' FROM ogrenci INNER JOIN islem on ogrenci.ogrno=islem.ogrno GROUP BY ogrenci.ogrno ORDER BY KITAPSAYISI |
MySQL LEFT JOIN Kullanımı
INNER JOIN’e benzer şekilde, LEFT JOIN de bir join yüklemi gerektirir. Bir LEFT JOIN kullanarak iki tablo birleştirilirken, sol tablo ve sağ tablo kavramları tanıtılır.
Bir INNER JOIN’den farklı olarak, LEFT JOIN, birleşim belirleyicisi yerine getiren satırlar ve olmayan satırlar dahil olmak üzere soldaki tablodaki tüm satırları döndürür. Join-yüklemiyle uyuşmayan satırlar için, sonuç kümesindeki sağ tablonun sütunlarında NULL görünür.
Örnek Sorgu: INNER JOIN’deki son örnek üzeriden yorumlayalım. 1 tane öğrenci hiç kitap almamış. INNER JOIN yaptığımızda ogrno iki tabloda geçmediği için eşleşmeye dahil edilmemiştir. LEFT JOIN’de ise ogrenci tablosunu ilk(sol), islem tablosunu ikinci tablo olarak dahil edeceğiz.
Her öğrencinin okuduğu kitapların sayısını listeleyen sorguyu yapalım. Fakat hiç kitap okumayan öğrencilerin de yanında 0 yazsın.
1 2 3 4 5 6 7 | SELECT ogrenci.ogrno,ogrenci.ograd,ogrenci.ogrsoyad,COUNT(islem.islemno) AS 'KITAPSAYISI' FROM ogrenci LEFT JOIN islem on ogrenci.ogrno=islem.ogrno GROUP BY ogrenci.ogrno ORDER BY KITAPSAYISI |
Dikkat ederseniz JALE SEKMEN isimli öğrenci hiç kitap almadığı için islem tablosundaki karşılığı NULL çıkmıtşır. COUNT ile sayarken NULL alan 0 sayılacaktır.
MySQL RIGHT JOIN Kullanımı
Bir RIGHT JOIN, tabloların işlenmesinin tersine çevrilmesi haricinde, LEFT JOIN’e benzer. RIGHT JOIN ile, sağ tablodaki her satır (tur) sonuç kümesinde görünecektir. Soldaki tabloda eşleşen satırlara sahip olmayan sağ tablodaki satırlarda (kitap), sol tablodaki sütunlarda (kitap) NULL görünür.
Aşağıdaki ifade, RIGHT JOIN kullanarak kitap ve tur tablolarını birleştirir:
1 2 3 4 5 6 | SELECT kitap.kitapad,tur.turad FROM kitap RIGHT JOIN tur ON kitap.turno=tur.turno ORDER BY kitapad |
Bu örnekte tur tablosuna deneme adında bir tür olmasına rağmen kitap tablosunda bu türe ait her hangi bir kitap mevcut değildir.
Sonuç tablosunda sağ tablodaki tüm satırlar (tur) belirir. Soldaki tabloda (kitap) eşleşen satır bulunmayan sağ tablodaki satırlarda (tur), sol tablonun sütunlarında (kitap) NULL görünür.
Bu eğitimde, iki veya daha fazla tablodaki verileri sorgulamak için CROSS JOIN, INNER JOIN, LEFT JOIN ve RIGHT JOIN gibi çeşitli MySQL birleştirme ifadeleri öğrendiniz. Daha fazla MySQL Dersi ve konusu için veritabanı sekmesini kullanabilirsiniz.
1 Yorum