Sonuca Başka Bir Tabloyu Katmak
Birden fazla tablo ile sorgulama yapmanın diğer bir yolu JOIN kullanmaktır. Bu komutla birlikte ayrıca INNER JOIN, OUTER JOIN, LEFT JOIN ve RIGHT JOIN komutları da bu derste anlatılacaktır.
Bu sayfadaki tüm örneklerde aşağıdaki tablo dikkate alınacaktır:
SQL Kodu
SELECT * FROM demo_people;
+------------+--------------+------+
| name | phone | pid |
+------------+--------------+------+
| Mr Brown | 01225 708225 | 1 |
| Miss Smith | 01225 899360 | 2 |
| Mr Pullen | 01380 724040 | 3 |
+------------+--------------+------+
SELECT * FROM demo_property;
+------+------+----------------------+
| pid | spid | selling |
+------+------+----------------------+
| 1 | 1 | Old House Farm |
| 3 | 2 | The Willows |
| 3 | 3 | Tall Trees |
| 3 | 4 | The Melksham Florist |
| 4 | 5 | Dun Roamin |
+------+------+----------------------+
Yukarıda yer alan ilk tablo "demo_people" adındadır ve müşterileri içerir. Alttaki tablo ise "demo_property" adında olup satış ilanlarını içerir.
İlk olarak sadece JOIN kullanarak müşteri - telefon numarası - sattığı emlak sütunlarını bir araya getirelim:
SQL Kodu
select name, phone, selling
from demo_people join demo_property
on demo_people.pid = demo_property.pid;
+-----------+--------------+----------------------+
| name | phone | selling |
+-----------+--------------+----------------------+
| Mr Brown | 01225 708225 | Old House Farm |
| Mr Pullen | 01380 724040 | The Willows |
| Mr Pullen | 01380 724040 | Tall Trees |
| Mr Pullen | 01380 724040 | The Melksham Florist |
+-----------+--------------+----------------------+
JOIN tablo_adı ON koşul şeklinde bir kullanım dikkatinizi çekmiştir. Burada bir önceki derste olduğu gibi müşteri numarası (pid) benzerliğinden yola çıkarak iki tabloyu birleştirdik.
LEFT JOIN kullanarak bu örneği yapsaydık fazladan 1 sonuç çıktığını görecektik:
SQL Kodu
select name, phone, selling
from demo_people left join demo_property
on demo_people.pid = demo_property.pid;
+------------+--------------+----------------------+
| name | phone | selling |
+------------+--------------+----------------------+
| Mr Brown | 01225 708225 | Old House Farm |
| Miss Smith | 01225 899360 | NULL |
| Mr Pullen | 01380 724040 | The Willows |
| Mr Pullen | 01380 724040 | Tall Trees |
| Mr Pullen | 01380 724040 | The Melksham Florist |
+------------+--------------+----------------------+
Bu örnekte eşleşmeyen kayıtlarda en soldaki tabloda görülmektedir (Miss Smith).
RIGHT JOIN kullandığımızda bu kez sağ taraftaki tabloda eşleşmeyen kayıtları göreceğiz:
SQL Kodu
select name, phone, selling
from demo_people right join demo_property
on demo_people.pid = demo_property.pid;
+-----------+--------------+----------------------+
| name | phone | selling |
+-----------+--------------+----------------------+
| Mr Brown | 01225 708225 | Old House Farm |
| Mr Pullen | 01380 724040 | The Willows |
| Mr Pullen | 01380 724040 | Tall Trees |
| Mr Pullen | 01380 724040 | The Melksham Florist |
| NULL | NULL | Dun Roamin |
+-----------+--------------+----------------------+
INNER JOIN, LEFT JOIN örneğinde yaptığımız gibi bir sonuç verecekti.
OUTER JOIN ise LEFT ve RIGHT kullanarak oluşturduğumuz sorgudan sonra istemediğimiz verileri ayıklamak için kullandığımız komuttur.