Oracle Ders 17 – Restricting Rows & Sorting Data

Merhaba Arkadaslar,

Bu yazimda WHERE , Order By , matematiksel karsilastirma operatorleri ( = , < , > , <=, >= , <> , != , ^=)  , Between … And , in , like , is null gibi diger karsilastirma operatorleri ve and, or, not gibi mantiksal operatorleri inceleyecegiz.

Oncelikle veritabanimizi ayarlayalim ve su kodlari SQL Developerda f5 ile calistiralim. Bizim icin tablolari olusturup gerekli kayitlari ekleyecektir. oracle ders 17 sql

Not: Bastan beri calistigimiz kullanici hesabiyla devam edebiliriz, system kullanicisi olarak calismamiza gerek yok.

Where cumlecigi
Bir Select ifadesinin genel kullanimi su sekildedir ;

Select [Distinct| Unique] (*,columname [As alias] ,...)
From tablename
[Where condition]
[Group by group_by_expression]
[Having group_condition]
[Order by columname];

Burada where ile baslayacagiz , distinct, unique , as gibi anahtar kelimeleri daha once islemistik.

Temel where condition ifadeleri ile baslayacak olursak ,

select firstname from customers where state= 'FL';

Burada basitce customers tablomuzdan ,firstname bilgilerini aliyoruz sart olarak da state alaninin FL olmasidir, burada dikkat edersek string degerler icin (varchar2) tek tirnak arasinda yazdigimizdir.

Ikinci olarak SQL case-sensitive olmasa da yani select ile SELECT ayni olsa da ‘FL’ ile ‘fl’ ayni anlama gelmez. Deneyip sonucu gorebilirsiniz.

select * from customers where customer#=1001;

custiomer# degeri 1001 olan kaydin bilgilerini gormek istiyoruz burada customer# alani integer bir alan oldugu icin tek tirnak kullanma zorunlulugumuz yok, kullanirsak problem olmaz.

Tarih karsilastirmasina bakacak olursak, Oracle 11 G de varsayilan tarih formati DD-MON-YY dir. MON , ayin 3 harfinin kisaltmasidir.

select * from books where pubdate='01-MAY-05';

pubdate alani Date olarak tanimlanmistir , sorgumuzda 1 Mayis 2005 tarihini formata uygun sekilde verdik. Burada da tek tirnak kullanmamiz gerekmektedir.

Tablomuzla ilgili bilgiyi Describe table name ile gorebiliriz.

Karsilastirma Operatorleri
Where sartlarimizda esitlik durumu her zaman yeterli olmayacaktir,  diger matematiksel operatorler burada devreye girer.

select title,retailfrom books where retail>50;

Yukarida basitce retail (fiyati) 50 den buyuk kitaplari getirdik. Burada kucuk bir ayrinti olarak bu karsilastirma islemlerini string alanlar icinde kullanabiliriz.

select title from books where title > 'LE';

Burada karsilastirma islemi sozluk mantigina gore olmaktadir.

<> , != ve ^= esit degil anlaminda kullanilir.

select firstname, lastname,state from customers
where state <> 'GA';

select firstname, lastname,state from customers
where state != 'GA';

select firstname, lastname,state from customers
where state ^='GA';

Between … And Operatoru
Belirli bir aralikta bir deger aradigimizda bu operatoru kullanabiliriz.

select title, pubid from books where pubid between 1 and 4;

Burada pubid degeri 1 ve 4 arasinda olan kayitlari getir diyoruz. ( 1 ve 4 dahildir)

Sadece integer degerler icin degi string degerler icin de kullanabiliriz.

select title from books where title between 'A' and 'E';

In operatoru
Listelenen degerlerden eslesen bir deger oldugunda sart saglanir.

select title, pubid from books where pubid in (1,5,2);

pubid degeri 1,2,5 olan kayitlar gelecektir.Bu operatoru de string degerler icin kullanabiliriz. Burada ek olarak NOT operatorunu de kullanalim.

select firstname , lastname,state
from customers where state not in ('CA', 'TX');

state degeri CA veya TX olmayan kayitlari getirecektir. not operatorunu in operatorunden once kullaniyoruz.

Like Operatoru
Like operatorunu kullanarak daha ozel sorgulamalar yapabiliriz. Bunu wildcard operatorlerini kullanarak yapariz. % (yuzde)  karakteri ilgili yere ve sonrasina hangi karakter gelirse gelsin anlamina gelmektedir.  _ (alt cizgi/underscore) karakterleri ise sadece tek bir karakteri simgeler, ilgili alana tek bir karakter gelebilir.

select lastname from customers where lastname like 'P_R%';

Yukaridaki sorguya bakacak olursak ilk harf P olsun ve sonrasinda herhangi bir karakter gelebilir sonrasinda R olmali diyoruz. % karakteri ile sonrasinda ne gelirse gelsin diyoruz.

Burada aklimiza su soru gelebilir peki aradigimiz karakter icerisinde % _ gibi karakterler varsa ne yapacagiz , baska dillerde ne yapiyorsak onu yapariz kacis karakteri kullaniriz .

select * from testing
where tvalue like '#%__A%T' Escape '#';

Burada Escape kelimesinden sonra bir kacis karakteri tanimladik. Istedigimiz karakteri kacis karakteri olarak tanimlayabiliriz.

Mantiksal(Logical) Operatorler
Mantiksal operatorler and , or ve not dir.

select title, pubid
from books where pubid =3 and category ='COMPUTER';

pubid degeri 3 VE(AND) category ‘COMPUTER’ olan kitaplari getir dedik.

select title, pubid
from books where pubid =3 or category ='COMPUTER';

pubid degeri 3 VEYA(OR) category ‘COMPUTER’ olan kitaplari getir dedik.

and ve or operatorlerini birlikte kullanirken istenilen sarta uygun olacak sekilde parantezlerden yararlanip yazmak islemimizin dogru olmasini saglayacaktir.

select * from books 
where category = 'FAMILY LIFE' 
or pubid=4
and cost>15;

select * from books 
where (category = 'FAMILY LIFE' 
or pubid=4 )
and cost>15;

Yukaridaki sorgular farkli sonuclar dondurecektir.

IS NULL
Null ile bosluk karakterini karistirmamak gerekir. Veritabaninda ilgili alanda veri olmamasi durumu null olmasi anlamina gelmektedir.Bos karakter olmasi bos karakter verisinin olmasi anlamina gelir.

Null olan degerleri sorgulamak icin esittir (=) kullanmamaliyiz. Bu durumda IS NULL operatorunu kullaniriz.

select shipdate from orders where shipdate is null;

Null olmayan ( yani ilgili alanda veri olan) icin ;

select shipdate from orders where shipdate is not null;

=NULL ifadesi hataya neden olmaz , hic deger donmemesine neden olur. Su sorgu gecerlidir ve bos doner.

select shipdate from orders where shipdate = NULL;

Order By
Order By ifadesi sorgu sonucu gelen veriyi siralamak icin kullanilir.

select * from testing order by tvalue;

Siralama islemi su oncelige gore olur,

  1. Blank(bosluk) ve ozel karakterler
  2. Rakam
  3. Karakter ( Buyuk harf once)
  4. NULL degerler

Sorgunun sonucuna dikkat edersek, yukarida sirada gerceklestigini gorebiliriz.

Order by , varsayilan olarak ascending (artan sirada) olarak tanimlidir. Descending (azalan sirada) olarak tanimlayabiliriz.

select * from publisher order by name asc;

select * from publisher order by name desc;

Ek olarak NULLS FIRST veya NULLS LAST anahtar kelimelerini kullanabiliriz.

select * from testing order by tvalue NULLS FIRST;

Order by ifadesinde birden fazla alan kullanilabilir (255 e kadar).

select lastname, firstname,state,city
from customers
where state in('FL','CA')
order by state desc , city asc;

Oracle 11 g, Order By ifadesinde kolon adini yazmak yerine kolonlari rakamla temsil etmeyi destekler.

select lastname, firstname,state,city
from customers
where state in('FL','CA')
order by 3 desc , 4 asc;

Select te siralanan alanlara gore 3 –>state  4—>city alanini temsil etmektedir.

Bu yazimi da burada noktaliyorum 🙂

Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *