12 Şubat 2017

PL/SQL Tablo Birleştirme, JOIN Komutları ve Alias Kullanımı

PL/SQL Tablo Birleştirme, JOIN Komutları ve Alias Kullanımı

Oracle'da TOAD editörü üzerinden HR Schema üzerinden tablo birleştirme için kullanılan JOIN komutlarını ve Alias kullanımından bahsedeceğim.

Tablo birleştirme yaparken Gereksiz sütunların gelmesi engellenmeli, gerekmediği sürece SELECT ifadesinde * (Tüm kolonların gelmesi) kullanılmamalıdır.

PL/SQL Tablo Birleştirme, JOIN Komutları ve Alias Kullanımı

1) INNER JOIN ve JOIN
İki tablonun kesişimlerini getiren komuttur. INNER JOIN ve JOIN aynı işlevi yaparlar. Yukarıdaki resimdeki gibi table1 ve table2 için kesişen kolonları ve dataları getirir. Boş ve kesişmeyen data varsa bunu getirmez. Aşağıdaki iki kullanımda (INNER JOIN ve JOIN) aynı sonucu verir.

SELECT
EMP.EMPLOYEE_ID, EMP.FIRST_NAME, EMP.LAST_NAME, DP.DEPARTMENT_NAME
FROM HR.DEPARTMENTS DP INNER JOIN HR.EMPLOYEES EMP
ON DP.DEPARTMENT_ID = EMP.DEPARTMENT_ID

SELECT
EMP.EMPLOYEE_ID, EMP.FIRST_NAME, EMP.LAST_NAME, DP.DEPARTMENT_NAME
FROM HR.DEPARTMENTS DP JOIN HR.EMPLOYEES EMP
ON DP.DEPARTMENT_ID = EMP.DEPARTMENT_ID

PL/SQL Tablo Birleştirme, JOIN Komutları ve Alias Kullanımı

2) FULL JOIN (FULL OUTER JOIN)
Her iki tablonun hem kesişimlerini hemde kendilerine ait tüm datayı getiren komuttur.

SELECT
EMP.EMPLOYEE_ID, EMP.FIRST_NAME, EMP.LAST_NAME, DP.DEPARTMENT_NAME
FROM HR.DEPARTMENTS DP FULL JOIN HR.EMPLOYEES EMP
ON DP.DEPARTMENT_ID = EMP.DEPARTMENT_ID

PL/SQL Tablo Birleştirme, JOIN Komutları ve Alias Kullanımı

3) LEFT JOIN
Genelde en çok kullanılan tablo birleştirme yöntemidir. İlk yazdığın tablo ismine göre soldaki tabloyu Full getirir, ikinci tabloyu ise ortak veri varsa kullanırsın. Yazılım Testi yaparken boş ve datası olmayan kolonların testlerini yapmak için LEFT JOIN kullanmak mantıklı bu sayede boş olmaması gereken alanları listeler sin.

PL/SQL Tablo Birleştirme, JOIN Komutları ve Alias Kullanımı

Örnekle daha iyi anlatacak olursak, önce INNER JOIN ile yukarıdaki gibi datamızı çekelim. Resimde gördüğünüz gibi boş alan gelmedi ve toplamda 106 kayıt döndü. Şimdi aynı komutu LEFT JOIN kullanarak aşağıdaki sorguyu çalıştıralım.

SELECT
EMP.EMPLOYEE_ID, EMP.FIRST_NAME, EMP.LAST_NAME, DP.DEPARTMENT_NAME
FROM HR.EMPLOYEES EMP LEFT JOIN HR.DEPARTMENTS DP
ON DP.DEPARTMENT_ID = EMP.DEPARTMENT_ID

PL/SQL Tablo Birleştirme, JOIN Komutları ve Alias Kullanımı

Gördüğünüz gibi 107 kayıt döndü ve boş olan kolonu gösterdi. Eğer o kolona data gelmesi gerekirse bunu Data testlerinde LEFT JOIN komutu ile rahatlıkla görebiliriz.

4) RIGHT JOIN
İkinci yazdığın tablo ismine göre sağdaki tabloyu Full getirir, ilk tabloda ise ortak veri varsa onları getirir. Kısacası LEFT JOIN komutunun tersidir.

5) PL/SQL AS Alias Kullanımı
AS ifadesi ile uzun ve kullanımı zor olan tablo veya alan adlarına geçici olarak kısa isimler vererek kullanmamızı sağlar. Örnek kullanım;

SELECT column_name AS alias_name, column_name2 AS alias_name2 FROM table

Birden fazla tablo birleştirilirken ALIAS kullanılmasına dikkat edilmelidir. Eğer ALIAS kullanılmaz ise yanlış sonuçlar üretilebilir. Sütun belirsizlikleri yine ALIAS kullanımı ile giderilmelidir.

İki kolonu birleştirelim ve Alias kullanımını örneklendirelim;

SELECT EMP.FIRST_NAME ||' '|| EMP.LAST_NAME,
EMP.FIRST_NAME, EMP.LAST_NAME
FROM HR.EMPLOYEES EMP LEFT JOIN HR.DEPARTMENTS DP
ON DP.DEPARTMENT_ID = EMP.DEPARTMENT_ID

PL/SQL Tablo Birleştirme, JOIN Komutları ve Alias Kullanımı

Gördüğünüz gibi FIRST_NAME ve LAST_NAME kolonlarını tek bir kolonda birleştirdim fakat kolon adı anlamsız oldu. Bu durumlarda Alias kullanımı oldukça işimize yarıyor.

SELECT EMP.FIRST_NAME ||' '|| EMP.LAST_NAME AS AD_SOYAD,
EMP.FIRST_NAME, EMP.LAST_NAME
FROM HR.EMPLOYEES EMP LEFT JOIN HR.DEPARTMENTS DP
ON DP.DEPARTMENT_ID = EMP.DEPARTMENT_ID

Yeni kolon adını AD_SOYAD olarak adlandırıp kolon ismini daha anlamlı yaptık.

PL/SQL Tablo Birleştirme, JOIN Komutları ve Alias Kullanımı

6) WHERE ve AND ile Tablo Birleştirmek
Tablolara kısaltma vererek bir veya birden fazla eş kolonu kullanarak tablo birleştirebiliriz. İlk bağlamayı WHERE koşulu ile yapıyoruz. İkinci bağlamayı ise AND ile ekliyoruz.

SELECT V.FIRST_NAME, V.LAST_NAME, P.DEPARTMENT_NAME
FROM HR.EMPLOYEES V, HR.DEPARTMENTS P
WHERE V.DEPARTMENT_ID = P.DEPARTMENT_ID
AND V.MANAGER_ID = P.MANAGER_ID

Kaynaklar
en.wikipedia.org/wiki/Alias_(SQL) (Alias SQL)
www.w3schools.com/sql (SQL Tutorial)
en.wikipedia.org/wiki/Join_(SQL) (Join SQL)

Görsel Kaynaklar (SQL Screen)
SQL Joins Types
T-SQL Joins Types
Joins Table SQL Alteryx