Transact SQL’de All, Any(Some) Kullanımı

Standart

All ve any bir değeri bir subquery yada bir liste ile karşılaştırmak için kullanılır. All koşulun bütün değerler için sağlanması gerektiği durumlarda any ve some (any = some) ise koşulun herhangi bir değer için sağlanmasının yeterli olduğu durumlarda kullanılır. Örnek üzerinde inceleyelim.

Öncelikle örnek verilerimizi tablo değişkenlerinde tutacağız(veri tabanına eklemek ve silmekle uğraşmıyoruz)

DECLARE @futbolcu TABLE
(
ID int,
name nvarchar (10),
salary int
)
DECLARE @pos TABLE
(
ID int,
title nvarchar (10),
averageSalary int
)

Tabloları dolduruyoruz.
Futbolcu tablosunda id name ve ücret değerleri olacak.
Pos tablosunda id title ve pozisyonun ortalama maaş bilgisi olacak.

--futbolcu tablosu dolduruluyor
INSERT @futbolcu (ID, name, salary) VALUES (1, 'Gomez', 1234);
INSERT @futbolcu (ID, name, salary) VALUES (2, 'Ulvi', 4321);
INSERT @futbolcu (ID, name, salary) VALUES (3, 'Rıza', 5432);
INSERT @futbolcu (ID, name, salary) VALUES (4, 'Metin', 3456);
INSERT @futbolcu (ID, name, salary) VALUES (5, 'Ali', 7654);
INSERT @futbolcu (ID, name, salary) VALUES (6, 'Feyyaz', 4567);
INSERT @futbolcu (ID, name, salary) VALUES (7, 'Rahmi', 8744);
INSERT @futbolcu (ID, name, salary) VALUES (8, 'Tolgay', 9875);
INSERT @futbolcu (ID, name, salary) VALUES (9, 'Recep', 2345);
INSERT @futbolcu (ID, name, salary) VALUES (10, 'Ilhan', 2345);
INSERT @futbolcu (ID, name, salary) VALUES (11, 'Pascal', 2345);

--pos tablosu dolduruluyor
INSERT @pos(ID, title, averageSalary) VALUES(1,'Forvet',3000);
INSERT @pos(ID, title, averageSalary) VALUES(2,'Kanat', 4000);
INSERT @pos(ID, title, averageSalary) VALUES(3,'OrtaSaha', 5000);
INSERT @pos(ID, title, averageSalary) VALUES(4,'Defans', 6000);

Bu verileri kullanarak tüm pozisyonlar arasında en büyük ortalama maaş değerinden fazla maaş alan kişileri(pos tablosundaki tüm avarageSalary’lerden fazla maaş alan kişileri) bulacağız.

SELECT f.ID,f.name,f.salary
FROM @futbolcu f
WHERE f.salary > ALL (SELECT averageSalary FROM @pos);

İç sorguda tüm avarageSalary satırları çekiliyor ve futbolcu salary’lerinden iç sorguda çekilen tüm avarageSalary değerlerinden fazla maaş alanları seçiliyor.En büyük avarageSalary değerinden fazla maaşı olan futbolcular seçilir diyebiliriz.Sonuç aşagıdaki gibi olacaktır.

5-Ali-7654
7-Mario-8744
8-Tolgay-9875

Şimdide tüm pozisyonlar arasında en küçük ortalama maaş değerinden fazla maaş alan kişileri(pos tablosundaki herhangi bir avarageSalary’den fazla maaş alan kişileri) bulacağız.(En az forvet ortalama maaş değeri 3000 ve bundan fazla olan değerler kabul edilecek)

SELECT e.ID,e.name,e.salary
FROM @employee e
WHERE e.salary > ANY (SELECT averageSalary FROM @job);

SELECT e.ID,e.name,e.salary
FROM @employee e
WHERE e.salary > SOME (SELECT averageSalary FROM @job);

2-Bobo-4321
3-Cenk-5432
4-Metin-3456
5-Ali-7654
6-Feyyaz-4567
7-Mario-8744
8-Tolgay-9875

2-Bobo-4321
3-Cenk-5432
4-Metin-3456
5-Ali-7654
6-Feyyaz-4567
7-Mario-8744
8-Tolgay-9875

sonuçlara bakarsak some ve any aynı işlevi görüyor diyebiliyoruz.

Umarım faydalı olur.

Yorum bırakın