Diğer dersleri https://selimkaratas.com.tr/oracle-11g-r2-egitimi-ders-notlari adresinden bulabilirsiniz.
Restricting and Sorting Data
2.Veri Kısıtlama ve Sıralama
WHERE Clause
SELECT *|{[DISTINCT] column|expression [alias],...} FROM table [WHERE condition(s)];
Burada dikkat edilmesi gereken WHERE clause FROM clause’dan sonra gelmektedir. Koşullar kısmı ile ilgili detayları bu konu altında inceleyeceğiz.
SELECT employee_id, last_name, job_id, department_id FROM employees WHERE job_id= 'IT_PROG' ;
SELECT last_name, job_id, department_id FROM employees WHERE department_id = 60 ;
SELECT last_name FROM employees WHERE hire_date = '15-NOV-91' ;
Tarih ve karakter aramalarında tek tırnak kullanmak gereklidir. Numara için girmemize gerek yoktur.
Karşılaştırma Operatörleri
SELECT last_name, salary FROM employees WHERE salary >= 15000 ; -- salary 15000 eşit ve büyük ise göster.
SELECT last_name FROM employees WHERE last_name BETWEEN 'Seo' AND 'Zlotkey'; --İsimler için de BETWEEN kullanılabilir. 'S' harfi ile 'Z' --harfi arasında olan isimleri bulmaktadır. Büyük küçük --karaktere dikkat edilmelidir.
SELECT employee_id, last_name, salary, manager_id FROM employees WHERE salary IN (1500, 2500, 3500, 4500) ; -- salary değeri 1500, 2500, 3500, 4500 olanları verir.
SELECT first_name FROM employees WHERE first_name LIKE 'K%' ; --K Harfi ile başlayan ve devamı olan isim sonuçlarını verir.
SELECT last_name, hire_date FROM employees WHERE hire_date LIKE '%97'; -- yılı 1997 olanları gösterir.
SELECT last_name FROM employees WHERE last_name LIKE '_a%' ; -- ikinci karakteri a olanları gösterir. underscore _ o harften -- önce bir karakter olduğunu belirtir.
SELECT employee_id, last_name, job_id FROM employees WHERE job_id LIKE '%SA\_%' ESCAPE '\'; -- job_id'si 'SA ile başlayanları gösterir. Escape kaçış --karakterini tanımlar \ kaçış karakteridir ve bu sayede özel --karakter olmasına rağmen sonuç tablosunda istediğimiz --job_id'ler yer alır.
SELECT last_name, job_id, commission_pct FROM employees WHERE commission_pct IS NULL; --null ifadeleri listeler.
Mantıksal Operatörler
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >= 9500 AND job_id LIKE '%REP%'; -- maaşı 9500'den büyük ve eşit ve job_id'si içerisinde REP --yazanları listeledik
OR Operatörü
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >= 20000 OR job_id LIKE '%MAN%' ; --Maaşı 20000'den büyük ve eşit ya da job_id'si içerisinde -- MAN geçenleri listeledik
NOT Operatörü
SELECT last_name, job_id FROM employees WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP') ; -- not in ifadesi içindekiler hariç diğerlerini listeler
Öncelik Kuralları
SELECT last_name, job_id, salary FROM employees WHERE job_id = 'IT_PROG' OR job_id = 'AD_PRES' AND salary > 20000; -- aşağıdaki örnekten tek farkı parantez kullanımıdır -- maaş şartına bakmadan IT_PROG yazar ve maaş > 20000 -- ise AD_PRES Job_id'lerini listeler.
SELECT last_name, job_id, salary FROM employees WHERE (job_id = 'IT_PROG' OR job_id = 'AD_PRES') AND salary > 20000; -- burada ise parantezler sayesinde maaşı 20000 den büyük --sorgusunu yaptıktan sonra job_id'leri yazar. o yüzden 1 adet --sonuç verir.
ORDER BY Clause
- ASC: Default gelir ve küçükten büyüğe sıralar.
- DESC:Büyükten küçüğe sıralar.
SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date ; -- tarihler küçükten büyüğe sıralanmıştır.
SELECT employee_id, last_name, salary*12 "Yıllık Maaş" FROM employees ORDER BY "Yıllık Maaş"; --Order By Clause'unda alias kullanılabilir.
SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY 3; -- Kolon numarası kullanılarak sıralama yapılır. -- Hire_date'e göre sıralanmıştır.
SELECT last_name, department_id, salary FROM employees ORDER BY department_id, salary DESC; -- Department_id'leri sıralandıktan sonra salary'ler kendi -- içinde sıralanır. ( DESC dediği için büyükten küçüğe)
Single-Ampersand (&) Kullanımı
Bizden değer almak için prompt açar.
SELECT employee_id, last_name, salary, department_id FROM employees WHERE employee_id = &employee_num -- tanımlı employee_id değerlerinden birini girdiğimizde -- sonuç alabiliriz. bunu kolon adı, karakter, numara, tarih -- gibi her şey üzerinde deneyebiliriz.
SELECT last_name, department_id, salary*12, job_id FROM employees WHERE job_id = '&job_title' ; -- job_id için geçerli isimlerden birini girersek sonuç alırız
SELECT employee_id, last_name, job_id,&column_name FROM employees WHERE &condition ORDER BY &order_column ; -- her biri için bize soracaktır. -- mevcut kolon adı, şart ve order by koşulu girmemız gerekmektedir.
Double Ampersand Kullanımı (&&)
Aynı tek & gibi kullanılır tek farkı tekrar kullandığımızda eski sonucu aklında tutmasıdır.
SELECT employee_id, last_name, job_id, &&column_name FROM employees ORDER BY &column_name ; -- ilk defa yaptığımızda prompt açılır ve department_id gireriz -- aşağıdaki listeyi verir. -- daha sonra tekrar sorgu yaptığımızda tekrar sormadan akılda tuttuğu -- işlemi tekrar yapar.
DEFINE komutu
DEFINE employee_num = 200 SELECT employee_id, last_name, salary, department_id FROM employees WHERE employee_id = &employee_num ;
şeklinde bir kullanımı vardır. bu şekilde çalıştırdığımız zaman prompt açılmadan direkt olarak aşağıdaki sonuç ile karşılaşırız. bunu UNDEFINE olarak tanımlama ile ortadan kaldırabiliriz. Aksi takdirde DEFINE kısmını silsek bile hafıza da o değer kalacak ve aynı sonucu verecektir.
UNDEFINE employee_num; SELECT employee_id, last_name, salary, department_id FROM employees WHERE employee_id = &employee_num
şeklinde bir düzenleme yaparsak artık bize kolon adı soracaktır. 150 değerini girersek aşağıdaki sonucu verecektir.
Oracle dokümanlarında yer alan örnek uygulamaları ve çözümlerini yakın zamanda hazırlamayı düşünüyorum. Devamı gelecektir. Takipte kalın.