SQL WHERE İfadesi

Çoğu zaman bir tablodan veri çekerken belirli koşulları sağlayan satırları çekmesi için koşul giririlir. Bu koşullar WHERE ile birlikte kullanılır.
SELECT * FROM EMPLOYEES; --Tüm satırları getirir.
SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 90; --departmen_id değeri 90 olan rowlar getirilir.
Burada karşılaştırma operatörleri kullanılır. Bunlar aşağıda belirtilmiştir.
tr

Where ifadesinde karekter değerler (char,varchar2) ve tarih(date) değeri tek tırnak içinde yazılır diğerleri tırnaksız yazılır. Karakter değerleri case sensitive iken tarih değeri format sensitivedir.

Default tarih formatı DD-MON-YY dir.
select * from employees
where hire_date = '17-OCT-03';

https://docs.oracle.com/database/121/SQLRF/sql_elements002.htm#SQLRF51056

Where içinde between ile değer aralığı kullanılabilir.
select * from employees where salary between 10000 and 20000;--değer aralıkları dahildir
between 20000 and 10000 gibi bir ifade hata vermez ancak sonuç döndürmez. mantıksal yanlış kullanım olur.

select * from employees where first_name between 'A' and 'C'; --adı A ve C aralığındaki değerlerle başlayan çalışanlar sorgulanıyor.

Birden fazla değer kullanmak için IN operatörü kullanılır.
select * from employees where salary in (10000, 20000, 25000); --maaşı 10000, 20000 veya 25000 olan çalışanlar sorgulanıyor

Karakter setleri için özel ifade kullanmak için LIKE kullanılır. LIKE içinde % hiç veya daha fazla karakter, _ ise bir karakter anlamına gelir.
where first_name like 'A%' -- adı A ile başlayanlar
where first_name like '%A' -- adı A ile bitenler
where first_name like '%BA%' -- adı içinde BA geçenler
where first_name like '_d%' -- ikinci karakteri d olanlar
where first_name like '__s%' --üçüncü karatkteri s olanlar

LIKE içindeki özel karakter olan % ve _ kullanmak istersek önüne escape karakteri kullanırız.
where job_id like 'SA/_%' escape '/' --SA_ ile başlayan job_id getirilir
where job_id like 'SA[_%' escape '[' --SA_ ile başlayan job_id getirilir
Kaçış karakteri için / veya [ her ikisi de escape ile tanıtılıp kullanılır sonuç aynıdır.

Null ifadesi için "=" kullanılmaz "is null" kullanılır.
where commission_pct = null hatalı olurç where commission_pct is null olmalıdır.

like, in, is null, between tersi için not like, not in, is not null, not between kullanılır.
where employee_id not in (100, 101); --100 ve 101 olmayan çalışanları getirir.
where commission_pct is not null; --komisyonu null olmayanlar
where first_name not like 'S%'; --adı S ile başlamayanları getirir.
Eşit değil için <> veya != operatörü kullanılır.

Where içinde AND, OR ve NOT kullanılabilir. Öncelik sırasına göre operatörler kullanılır. 10+5*5= 35 teki öncelik sırası gibi. Öncelik tablosu aşağıdaki gibidir. Ancak parantez kullanarak öncelik sırası değiştirilebilir.
select last_name, job_id, salary
from employees
where job_id = 'SA_REP'
or job_id = 'AD_REP' and salary > 15000;
Yukarıki sorgu incelendiğinde öncelik sırasına göre job_id = 'SA_REP' veya job_id = 'AD_REP' and salary > 15000 koşulu sağlanan kayıtlar getirilir. Aşağıdaki sorgu yukarıdaki ile aynıdır sadece okunaklı yazılmıştır.
select last_name, job_id, salary
from employees
where job_id = 'SA_REP'
or (job_id = 'AD_REP' and salary > 15000);
Aşağıdaki sorguda ise aynı sogru parantezler ile önceliklendirilmiştir.
select last_name, job_id, salary
from employees
where (job_id = 'SA_REP' or job_id = 'AD_REP') and salary > 15000;








Share:
spacer

Hiç yorum yok:

Yorum Gönder