07 September 2006

Oracle Set Operators

Oracle küme operatörleri 4 tanedir. union, union all, minus ve intersect. Oracle küme işlemleri yapılırken select cümlelerinin aynı tip ve sayıda kolon içermelerine dikkat edilmelidir. Eğer bir kümede bulunan kolon diğer kümede yok ise, o kolon NULL ile gösterilmelidir. Sütün isimlerini aynı olmasına gerek yoktur. Set operatörleri ile işlem yaparken ORDER BY varsayılan olarak olarak ORDER BY 1 ASC'dir. Yani ilk kolon artan olarak sıralanacaktır.

Bunları bir örnek ile anlatmaya çalışalım. Öncelikle iki küme oluşturup işlemlerimizi onlar üzerinde yapalım.

create table a( x number);
create table b( x number);

BEGIN
INSERT INTO a VALUES (1);
INSERT INTO a VALUES (2);
INSERT INTO a VALUES (3);
INSERT INTO a VALUES (4);
INSERT INTO b VALUES (3);
INSERT INTO b VALUES (4);
INSERT INTO b VALUES (5);
INSERT INTO b VALUES (6);
INSERT INTO b VALUES (7);
COMMIT;
END;

SELECT * FROM a
--1,2,3,4

SELECT * FROM b
--3,4,5,6,7

union : İki kümede tekrar etmeyen verileri getirir. Matematiksel karşılığı (a+b)'dir

-- (a + b)
--No duplicates
SELECT x
FROM a
UNION
SELECT x FROM b
--1,2,3,4,5,6,7

union all : İki kümede verilerin tamamını getirir. Matematiksel karşılığı (a)+(b)'dir

-- (a) + (b)
--Duplicates
SELECT x
FROM a
UNION ALL
SELECT x FROM b
--1,2,3,4,3,4,5,6,7

minus : Sadece ilk kümede olan elemanları getirir. Matematiksel karşılığı (a) - (b)'dir

-- (a) - (b)
--Difference
SELECT x
FROM a
MINUS
SELECT x FROM b
--1,2

intersect : İki kümede kesişen elemanları getirir. Matematiksel karşılığı (a) + (b) - ( a + b)'dir

-- ( ( (a) + (b) ) - ( a + b) )
--intersect
SELECT x
FROM a
INTERSECT
SELECT x FROM b
--3,4

No comments: