Diğer dersleri https://selimkaratas.com.tr/oracle-11g-r2-egitimi-ders-notlari adresinden bulabilirsiniz.
8. Using the Set Operators (Set Operatorlerini Kullanma )
UNION:
A+B’deki kayıtların ekrana getirilmesi demektir. Tekrar edenler varsa sadece bir kere yazar
UNION ALL:
A+B’deki kayıtların ekrana getirilmesi demektir. Tekrar ettiği kadar ekrana yazar.
INTERSECT:
A kesişim B’deki elemanların ekrana getirilmesi demektir.
MINUS:
A’daki benzersiz kayıtların ekrana getirilmesi demektir. A ile B arasında kesişim elemanları raporda yer almayacak.
- — MUTLAKA SELECT YAZILMALI.
- — KOLONLARIN SAYISI ESIT OLMALI
- — DATA TIPLERI AYNI OLMALI.
- — PARANTEZ ÖNCELIGI ALINABILIR
(SELECT
union
select )
union
(select
minus
select)
gibi bir işlemde parantez ile öncelikler belirlenebilir.
- — ORDER BY her zaman en sonda yer alır.
- –UNION ALL haricindeki hiç biri tekrar eden kayıtları yazmaz.
UNION OPERATOR
select employee_id, job_id from employees UNION select employee_id e_id, job_id j_id from employees -- alias isimlendirmeler yukardaki select sorgusuna göre yazılır. -- aşağıda olanların hiç bir önem yoktur. -- tekrar eden kayıtları yazmadı ve alias'ları yukarıdan aldı.
–UNION ALL hariç diğer operatorlerde ORDER BY yazılmasa bile ilk kolona göre kendisi
–siralar.
Yukarıda ki örnekte sıralı olduğunu görüyorsunuz. Aynı örneği UNION ALL için yaparsak farkı göreceksiniz.
select employee_id, job_id from employees UNION ALL select employee_id e_id, job_id j_id from employees -- Hem tekrar eden kayıtları yazdı hem de bir sıralama yapmadı
Job_History tablosunda kişinin ya departmanı değişmiş ya da job_id’si değişmiş.
select * from job_history order by 1; -- uniq kayit yok. tekrarlar var
Örneğin 101 numaralı çalışan 1989-1993 yılları arasında AC_ACCOUNT olarak çalışırken 93-97 yılları arasında o departmanın müdürü (AC_MGR) olarak çalışmaya başlamıştır.
97 Yılından sonra yani şuan ne yaptığına bakmak için:
select job_id, department_id from employees where employee_id = 101;
AD_VP ( Genel müdür yardımcısı) olmuştur.
UNION OPERATOR için örnek
select employee_id emp_id from employees union select employee_id from job_history; --107 kayıt gösterir. tekrarları almaz
UNION ALL OPERATOR için örnek
select employee_id emp_id from employees union all select employee_id from job_history; -- 107 + 10 employee_id + job_history. Tekrar edenleri alır
INTERSECT OPERATOR için örnek
select employee_id emp_id from employees INTERSECT select employee_id from job_history; -- kesişim elemanlarını verir. 7 tane tekrar eden vardır.
MINUS OPERATOR için örnek
select employee_id emp_id from employees minus select employee_id from job_history; -- UNION - INTERSECT = MİNUS VERİR. 100 kayıt verir.
— İki tabloda da istenilen kolonlar eşit olmalı. Job_Histoy tablosunda salary olmadığı için onu 0 olarak yazmasını istedik
select employee_id, salary from employees union select employee_id, 0 from job_history order by 2;
select department_id, department_name from departments union select department_id, to_char ( 'Departmen Bilgisi Yok' ) FROM job_history -- data tipleri önem taşımaktadır.