Kategoriler
ORACLE

Oracle Database 11g – SQL Temelleri I ||Using the Set Operators

Diğer dersleri https://selimkaratas.com.tr/oracle-11g-r2-egitimi-ders-notlari adresinden bulabilirsiniz.

8. Using the Set Operators (Set Operatorlerini Kullanma )

-- 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 alias

 

–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ı

UNION ALL ORDER BY

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

job_history

Ö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;

101 numaralı çalışan şuan

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

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

union all

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.

INTERSECT

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.

MINUS

 

 — İ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;

to char 0

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.

to_char

 

 

Bir cevap yazın

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