SQL JOINS Konusunun Görsel Anlatımı

SQL Joins konusu SQL içerisinde en çok karıştırılan ve en çabuk unutulan konulardan birisidir. Right Join Left join arasında sıkışanlar için aşağıdaki görsel herşeyi anlatmaya yetiyor.Visual_SQL_JOINS_orig

 

Örneklerle Anlatalım birde…

Elimizde İki tane tablomuz var :

<strong>TABLE_A</strong>
  PK Value
---- ----------
   1 FOX
   2 COP
   3 TAXI
   6 WASHINGTON
   7 DELL
   5 ARIZONA
   4 LINCOLN
  10 LUCENT

<strong>TABLE_B</strong>
  PK Value
---- ----------
   1 TROT
   2 CAR
   3 CAB
   6 MONUMENT
   7 PC
   8 MICROSOFT
   9 APPLE
  11 SCOTCH
<strong>-- INNER JOIN</strong>
SELECT A.PK AS A_PK, A.Value AS A_Value,
       B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
INNER JOIN Table_B B
ON A.PK = B.PK

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   1 FOX        TROT          1
   2 COP        CAR           2
   3 TAXI       CAB           3
   6 WASHINGTON MONUMENT      6
   7 DELL       PC            7

(5 satır etkileniyor. Sadece pk sutünlarındaki değerler aynı olan satırları birleştiriyor. Kesişimlerini alıyor. )
<strong>-- LEFT JOIN</strong>
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
LEFT JOIN Table_B B
ON A.PK = B.PK

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   1 FOX        TROT          1
   2 COP        CAR           2
   3 TAXI       CAB           3
   4 LINCOLN    NULL       NULL
   5 ARIZONA    NULL       NULL
   6 WASHINGTON MONUMENT      6
   7 DELL       PC            7
  10 LUCENT     NULL       NULL

(8 Satır Etkilendi. Soldaki tablonun tamamını alırken sağdakinin sadece soldakiyle kesişenlerini aldı. )
<strong>-- RIGHT JOIN</strong>
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
RIGHT JOIN Table_B B
ON A.PK = B.PK

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   1 FOX        TROT          1
   2 COP        CAR           2
   3 TAXI       CAB           3
   6 WASHINGTON MONUMENT      6
   7 DELL       PC            7
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11

(8 Satır Etkilendi. Yukarıdakinin benzeri. Sağdaki tablonun tamamını alırken soldakinin sadece soldakiyle kesişenlerini aldı.)
<strong>-- OUTER JOIN</strong>
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.PK = B.PK

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   1 FOX        TROT          1
   2 COP        CAR           2
   3 TAXI       CAB           3
   6 WASHINGTON MONUMENT      6
   7 DELL       PC            7
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11
   5 ARIZONA    NULL       NULL
   4 LINCOLN    NULL       NULL
  10 LUCENT     NULL       NULL

(İki tablodaki tüm satırları aldı. Eydı pk değerine sahip satırları birleştirdi.)
<strong>
-- LEFT EXCLUDING JOIN</strong>
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
LEFT JOIN Table_B B
ON A.PK = B.PK
WHERE B.PK IS NULL

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
   4 LINCOLN    NULL       NULL
   5 ARIZONA    NULL       NULL
  10 LUCENT     NULL       NULL
(Soldaki tablonun sağdakiyle eşit olmayan satırlarını alıyor.)
<strong>-- RIGHT EXCLUDING JOIN</strong>
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
RIGHT JOIN Table_B B
ON A.PK = B.PK
WHERE A.PK IS NULL

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11

(Yine üstteki gibi bu sefer sağdaki tablonun soldakine göre farkını alıyor.)
<strong>-- OUTER EXCLUDING JOIN</strong>
SELECT A.PK AS A_PK, A.Value AS A_Value,
B.Value AS B_Value, B.PK AS B_PK
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.PK = B.PK
WHERE A.PK IS NULL
OR B.PK IS NULL

A_PK A_Value    B_Value    B_PK
---- ---------- ---------- ----
NULL NULL       MICROSOFT     8
NULL NULL       APPLE         9
NULL NULL       SCOTCH       11
   5 ARIZONA    NULL       NULL
   4 LINCOLN    NULL       NULL
  10 LUCENT     NULL       NULL

(her iki tablodan birbirine eşit olmayan satırları alıp birleştiriyor.)

Not : SQLite ne yazık ki Full Outher Join ve Right Join olaylarını desteklemiyor. Sadece Left Join yapabiliyorsunuz. 2 tabloyu tam birleştirme yapmak için aşağıdaki komutu kullanabilirsin.

<code>SELECT employee.*, department.*
FROM   employee 
       LEFT JOIN department 
          ON employee.DepartmentID = department.DepartmentID
UNION ALL
SELECT employee.*, department.*
FROM   department
       LEFT JOIN employee
          ON employee.DepartmentID = department.DepartmentID
WHERE  employee.DepartmentID IS NULL</code>
.

Bir önceki yazımız olan 2013 Yılına Ait 100 Ücretsiz Şahane Font başlıklı makalemizde font, font indir ve ücretsiz font hakkında bilgiler verilmektedir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir