Oracle Database — SQL Temelleri 8 — Alt Sorgular
Arkadaşlar Merhaba,
Alt Sorgu (subquery) sorgu içinde sorgu demektir. Konuyu örneklerle pekiştirelim.
Alt Sorgu Syntax:
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
Örnek:
SELECT last_name, salary
FROM employees
WHERE salary >
(SELECT salary
FROM employees
WHERE last_name = 'Lee');
İsmi Lee olan kişinin maaşından daha yüksek maaş alanları alt sorgu kullanarak listeledik.
Alt Sorgu Çeşitleri
Alt sorgular tek ve çoğul kayıt döndürmek üzere 2 gruba ayrılır.
Tek kayıt döndüren alt sorgular: Alt sorgudan ana sorguya tek kayıt döner. Tek kayıt döndüren alt sorgular da alt sorgu ile ana sorgu birleştirilirken eşittir (=,; vb.) operatörler kullanılır. Yazının başında verdiğim örnek tek kayıt dönen alt sorgudur.
Çok kayıt döndüren alt sorgular: Alt sorgudan ana sorguya birden fazla kayıt döner. Çoklu kayıt sorgularını ana sorgu ile birleştirirken IN,ANY,EXISTS,ALL vb. operatörler kullanılır.
IN: Kelime anlamı içinde olan in operatörü ile birden fazla değer aramak için kullanılır.
SELECT * FROM employees
WHERE department_id IN
(SELECT department_id FROM employees WHERE first_name='Alexander');
Yukarıda ki örnekte alt sorgu ile employees tablosunda first_name sütunun da Alexander olan kayıtların department_id’leri ana sorguya dönülür. Ana sorguda ise alt sorguda ile dönen kayıtlardan listede olanlar dönerler.
ANY: İngilizce’de de herhangi biri anlamına gelen any komutu sql komutumuzda da herhangi biri anlamını taşır.
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ANY
(SELECT salary
FROM employees
WHERE job_id = 'IT_PROG')
AND job_id <> 'IT_PROG';
Bu sorguda IT bölümündeki çalışanların maaşlarından küçük olması ve IT bölümünde çalışmayanların bilgisini verir.
ALL: İngilizce’de de hepsi anlamına gelen ALL komutu sql komutumuzda da hepsi anlamını taşır.
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ALL
(SELECT salary
FROM employees
WHERE job_id = 'IT_PROG')
AND job_id <> 'IT_PROG';
Burada ALL dediğimiz için IT bölümündeki en küçük maaşıda içereceğinden hepsi için sorgulama yapıp sonuçu verir.
SUBQUERY ile HAVING Kullanımı
Having: Gruplanmış verileri filtremek için kullanırız.
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) >
(SELECT MIN(salary)
FROM employees
WHERE department_id = 70);
Sırasıyla resimleri inceleyin ve mantığını anlayın ;)
Alt sorgular konumuzunda sonuna geldik. Bir sonraki derste görüşmek üzere :)