Birden Fazla Tablo Sorgulama
NOT: Eğer bir önceki bölümdeki dersler yararlı geldiyse ve sorun yaşamadan komut kullanımını öğrendiyseniz bu konular MySQL'de çok daha geniş bilgiler edinmenizi sağlayacaktır.
Tablolarımız birbiriyle ortaklaşa sonuç üretmek zorunda kalabilir. Örneğin bir forumda üyeler ve mesajlar adlı iki tablomuz olsaydı mesaj hangi üye tarafından atılmış bilgisini direkt mysql'den almamız gerekebilirdi. Eğer bu iki tablo arasında bir bağlantıdan yararlanabiliyorsak (benzerlik içeren bir sütun) bunu yapmamız mümkün.
İşte böyle durumlar için sütunları adlandırdığımız gibi tabloları adlandırıp birden fazla tablo üzerinde işlem yapabilme şansına sahibiz. Bunu ayrıca bir sonraki derste göreceğiniz INNER/LEFT/RIGHT JOIN komutu ile de yapabilirsiniz.
Şimdi tabloları adlandırarak aşağıdaki iki tabloyu tek bir sorguda kullanalım:
SQL Kodu
SELECT * FROM uyeler;
+----+-------+
| id | isim |
+----+-------+
| 1 | Seda |
| 2 | Merve |
| 3 | Cemil |
+----+-------+
SELECT * FROM mesajlar;
+----+--------+---------------+
| id | uye_id | mesaj |
+----+--------+---------------+
| 1 | 1 | Selamlar |
| 2 | 3 | Nabersiniz? |
| 3 | 3 | Kimse var mı? |
| 4 | 2 | Merhaba |
+----+--------+---------------+
Görüldüğü üzere "mesajlar" tablosunda mesajın hangi üye tarafından gönderildiği "uye_id" sütununda sayısal olarak belirtilmiş. Şimdi sorguların üye adı - mesaj eşleştirmesiyle gelmesini sağlayalım:
SQL Kodu
SELECT t1.isim, t2.mesaj
FROM uyeler t1, mesajlar t2
WHERE t1.id = t2.uye_id;
+-------+---------------+
| isim | mesaj |
+-------+---------------+
| Seda | Selamlar |
| Cemil | Nabersiniz? |
| Cemil | Kimse var mı? |
| Merve | Merhaba |
+-------+---------------+
Sonucun yukarıdaki şekilde geldiğini göreceğiz. Burada
FROM tablolar kısmında uyeler adlı tabloyu t1 adıyla, mesajlar adlı tabloyu t2 adıyla nitelendirdiğimizi sunucuya bildirmiş olduk. Böylelikle ilgili tablonun sütunlarını sanki tek tabloymuş gibi işleme aldık. FROM tablolar kısmında kullanacağımız tabloların yanına onu temsilen bir kelime yazarız ve aralara virgül koyarak bunlara yer veririz.
WHERE koşul kısmında benzerliğe yer verdik. Çünkü bu iki tablo temelde birbirinden ilgisiz tablolar olabilir. Bu durumda bir özelliğe göre eşleştirme yapmamız gerekli. İşte mesajlar kısmında uye_id'e yer vermemizin sebebi de bu.
Bu tarz sorgularda sütun adlarından önce mutlaka tablonun adını getirin, çünkü bir benzerlik durumunda istenilen sonucu alamayabilirsiniz. Örneğin: t1.isim (uyeler tablosunun isim sütunu).
NOT: Adlandırma yaparken
FROM uyeler as t1, mesajlar as t2 yapısını da kullanabilirsiniz.