Set Operatörleri – Minus-Intersect-Union-Union All

ORACLE SET OPERATÖRLERİ

Set operatörleri ile iki select seti üzerinde birleştirme, fark alma, kesişim bulma gibi işlemler yapabiliriz.

MINUS

İki SELECT seti arasındaki farkı verir, ilk SELECT setinde olup ikinci SELECT setinde olmayanları listeler.
İki sorgu arasında MINUS yazabilmemiz için her iki SELECT de aynı sayıda ve aynı tipde sütun döndürmelidir.

* Departman tanımı olup hiç çalışanı olmayan departmanlar..

SELECT d.DEPARTMENT_ID FROM HR.DEPARTMENTS d
MINUS
SELECT DISTINCT a.DEPARTMENT_ID FROM HR.EMPLOYEES a;

UNION

İki SELECT setini birleştirir tek SELECT seti olarak döndürür.UNION ALL dan farkı iki SELECT sonucunu karşılaştırır,ve varsa aynı satırı tek satır olarak yazar, UNIQUE lik sağlar.Dolayısıyla UNION ALL dan biraz daha yavaş çalışır..İki sorgu arasında UNION yazabilmemiz için her iki SELECT de aynı sayıda ve aynı tipde sütun döndürmelidir.

SELECT a.* FROM HR.EMPLOYEES a WHERE d.DEPARTMENT_ID='A'
UNION
SELECT a.* FROM HR.EMPLOYEES a WHERE d.DEPARTMENT_ID='B';

UNION ALL

İki SELECT setini birleştirir tek SELECT seti olarak döndürür.UNION dan farkı iki SELECT sonucunu karşılaştırmaz,aynı satır her iki selectden de gelmiş olsa hepsini yazar.Dolayısıyla UNION dan daha hızlıdır.

*A ve B departmanlarında çalışan personeli listeler.

SELECT a.* FROM HR.EMPLOYEES a WHERE d.DEPARTMENT_ID='A'
UNION ALL
SELECT a.* FROM HR.EMPLOYEES a WHERE d.DEPARTMENT_ID='B'

INTERSECT

İki SELECT seti arasındaki kesişimi verir, her iki SELECT setinde de olan kayıtları listeler.Matematikde kümelerin kesişim işlemine karşılık gelir.İki sorgu arasında INTERSECT yazabilmemiz için her iki SELECT de aynı sayıda ve aynı tipde sütun döndürmelidir.

SELECT d.DEPARTMENT_ID FROM HR.DEPARTMENTS d
INTERSECT
SELECT a.DEPARTMENT_ID FROM HR.EMPLOYEES a;

NOTLAR:
*Union karşılaştırma yaptığı için Union all’a göre daha yavaştır.
*Kayıt setlerindeki sütun tipi,sırası ve sayısı uyuşmalıdır.Aksi durumda ORA-01790: expression must have same datatype as corresponding expression hatası alınır.
*Order by kullanmak isterseniz her iki select setinin sonuna değil ikincinin sonuna yazabilirsiniz.
* Aynı sutun için her iki select setinde farklı alias kullanırsanız select sonucunda ilkinde yazdığınız alias görünecektir.

Tagged: , , , , , , , ,

Bir cevap yazın

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