İnsanın gerçek değerini söylesem, ben de yanarım, Dünya da!
Fakat ne yazık ki, insan değerini bilemedi, kendini ucuza sattı.
İnsan aslında çok değerli bir atlas kumaş iken, kendini hırkaya yama yaptı –Mevlana
Merhaba
SQL Kullanıcıları tarafından çok fazla kullanılmayan(nvl hariç); ama güzel işler yapan bu arkadaşlara bir göz atalım. Hepsini tek tek inceleyelim.
Örneklerle açıklayabilmek için; Öncelikle bir tablo oluşturup, içine kayıtlar atıyorum.
create table NullOrnekTable (
id number,
deger1 varchar2(100),
deger2 varchar2(100),
deger3 varchar2(100),
deger4 varchar2(100),
deger5 varchar2(100),
deger6 varchar2(100)
);
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (1, 'Ocak', 'Ocak', 'Pazartesi', null, 'Kış', 'Soğuk');
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (2, 'Şubat', 'Şuba', 'Salı', null, 'Kış', 'Soğuk');
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (3, 'Mart', 'Mart', 'Çarşamba', null, 'İlkbahar', null);
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (4, 'Nisan', 'Nisa', 'Perşembe', null, 'İlkbahar', null);
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (5, 'Mayıs', 'Mayı', 'Cuma', null, 'İlkbahar', null);
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (6, 'Haziran', 'Hazi', 'Cumartesi', 'Tatil', 'Yaz', 'Sıcak');
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (7, 'Temmuz', 'Temm', 'Pazar', 'Tatil', 'Yaz', 'Sıcak');
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (8, 'Ağustos', 'Ağus', 'Pazartesi', null, 'Yaz', 'Sıcak');
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (9, 'Eylül', 'Eylü', 'Salı', null, 'Sonbahar', null);
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (10, 'Ekim', 'Ekim', 'Çarşamba', null, 'Sonbahar', null);
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (11, 'Kasım', 'Kası', 'Perşembe', null, 'Sonbahar', null);
insert into NULLORNEKTABLE (id, deger1, deger2, deger3, deger4, deger5, deger6)
values (12, 'Aralık', 'Aral', 'Cuma', null, 'Kış', 'Soğuk');
commit;
select t.*,t.rowid from NullOrnekTable t ;
kayıtlarımız bu hale geldi şimdi bu güzel arkadaşları; en bilindik olan ağabeylerinden (NVL)’den başlayarak kısa kısa örneklerle tanıyalım.
-- Nvl(deger, 'yeni ifade')*****
-- deger null ise "yeni ifade"; degilse kendini yazacaktır
select deger3, Deger4, nvl(deger4, 'İş Günü') NvlDegeri from NullOrnekTable;
|
DEGER3 |
DEGER4 |
NVLDEGERI |
| 1 |
Pazartesi |
|
İş Günü |
| 2 |
Salı |
|
İş Günü |
| 3 |
Çarşamba |
|
İş Günü |
| 4 |
Perşembe |
|
İş Günü |
| 5 |
Cuma |
|
İş Günü |
| 6 |
Cumartesi |
Tatil |
Tatil |
| 7 |
Pazar |
Tatil |
Tatil |
| 8 |
Pazartesi |
|
İş Günü |
| 9 |
Salı |
|
İş Günü |
| 10 |
Çarşamba |
|
İş Günü |
| 11 |
Perşembe |
|
İş Günü |
| 12 |
Cuma |
|
İş Günü |
--***************************************************************************
-- lnnvl( deger= 1 ) ***
-- degeri 1 olmayanları döndürür. "deger!= 1" den farkı Null olanlarda gelir.
ÖNEMLİ!!!
select * from NullOrnekTable t where lnnvl(deger6 = 'Soğuk') ;
|
ID |
|
|
|
|
|
DEGER6 |
|
3 |
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
6 |
|
|
|
|
|
Sıcak |
|
7 |
|
|
|
|
|
Sıcak |
|
8 |
|
|
|
|
|
Sıcak |
|
9 |
|
|
|
|
|
|
|
10 |
|
|
|
|
|
|
|
11 |
|
|
|
|
|
|
--***************************************************************************
--nvl2(ilkdeger, 'Null Degilse', 'Null ise') **
-- verilen ilk deger null ise ikinci deger donecektir.
select Deger3,Deger4, nvl2(deger4, 'Tatil Günlerimiz','İşgünlerimiz') Nvl2Degeri from NullOrnekTable t ;
|
DEGER3 |
DEGER4 |
NVL2DEGERI |
| 1 |
Pazartesi |
|
İşgünlerimiz |
| 2 |
Salı |
|
İşgünlerimiz |
| 3 |
Çarşamba |
|
İşgünlerimiz |
| 4 |
Perşembe |
|
İşgünlerimiz |
| 5 |
Cuma |
|
İşgünlerimiz |
| 6 |
Cumartesi |
Tatil |
Tatil Günlerimiz |
| 7 |
Pazar |
Tatil |
Tatil Günlerimiz |
| 8 |
Pazartesi |
|
İşgünlerimiz |
| 9 |
Salı |
|
İşgünlerimiz |
| 10 |
Çarşamba |
|
İşgünlerimiz |
| 11 |
Perşembe |
|
İşgünlerimiz |
| 12 |
Cuma |
|
İşgünlerimiz |
--***************************************************************************
-- NullIf(ilkdeger, ikincideger) ***
-- iki deger esitse null; degilse ilk deger doner
select deger1, deger2, nullif(deger1, deger2) NullIfDegeri from NullOrnekTable t;
|
DEGER1 |
DEGER2 |
NULLIFDEGERI |
| 1 |
Ocak |
Ocak |
|
| 2 |
Şubat |
Şuba |
Şubat |
| 3 |
Mart |
Mart |
|
| 4 |
Nisan |
Nisa |
Nisan |
| 5 |
Mayıs |
Mayı |
Mayıs |
| 6 |
Haziran |
Hazi |
Haziran |
| 7 |
Temmuz |
Temm |
Temmuz |
| 8 |
Ağustos |
Ağus |
Ağustos |
| 9 |
Eylül |
Eylü |
Eylül |
| 10 |
Ekim |
Ekim |
|
| 11 |
Kasım |
Kası |
Kasım |
| 12 |
Aralık |
Aral |
Aralık |
--***************************************************************************
-- coalesce(ilkdeger, 'Null ise', 'Null ise', 'Null ise', 'Null ise' ...)
-- n paremetre alır ve ilk deger null ise, ikincisini; o da null ise , hep bir sonraki şeklinde gider....
-- bu örnekte en son deger3'te kesilmiştir. çünkü o kolonun tum alanları doludur.
select t.*, coalesce(deger6,deger4,deger3,deger2,deger1) Degeri from NullOrnekTable t;
|
ID |
|
|
DEGER3 |
DEGER4 |
DEGER5 |
DEGER6 |
DEGERI |
|
1 |
|
|
Pazartesi |
|
Kış |
Soğuk |
Soğuk |
|
2 |
|
|
Salı |
|
Kış |
Soğuk |
Soğuk |
|
3 |
|
|
Çarşamba |
|
İlkbahar |
|
Çarşamba |
|
4 |
|
|
Perşembe |
|
İlkbahar |
|
Perşembe |
|
5 |
|
|
Cuma |
|
İlkbahar |
|
Cuma |
|
6 |
|
|
Cumartesi |
Tatil |
Yaz |
Sıcak |
Sıcak |
|
7 |
|
|
Pazar |
Tatil |
Yaz |
Sıcak |
Sıcak |
|
8 |
|
|
Pazartesi |
|
Yaz |
Sıcak |
Sıcak |
|
9 |
|
|
Salı |
|
Sonbahar |
|
Salı |
|
10 |
|
|
Çarşamba |
|
Sonbahar |
|
Çarşamba |
|
11 |
|
|
Perşembe |
|
Sonbahar |
|
Perşembe |
|
12 |
|
|
Cuma |
|
Kış |
Soğuk |
Soğuk |
Bu şekilde nvl ve nvl’e benzer diğer özellikleri incelemiş olduk.
sql scriptini sayfanın başına ekledim. bu sayede ister bu örneklerle; isterseniz de kendi oluşturduğunuz tablolarda bunları deneyebilir; projelerinizde kullanabilirsiniz.