Soru: Boş kaydedilen karakter değeri ile null değeri arasında ne fark vardır? Bir alan üzerinden ='' şeklinde boş bir string sorguladığımda ve null değerleri sorguladığımda farklı değerler elde ediyorum.
Cevap: Boş bir string Oracle'da null bir değeri temsil eder.
Aşağıda oluşturulan kullanici tablosu üzerinden örnek vermek gerekirse.
create table kullanici(kullanici_id number, kullanici_adi varchar2(100));
Şimdi oluşturduğumuz tabloya sırasıyla boş bir değer içeren ve null değeri içeren iki kayıt ekleyelim.
insert into test (kullanici_id, kullanici_adi) values (100, null);
insert into test (kullanici_id, kullanici_adi) values (101, '');
İlk insert cümlesi tabloya kullanici_adi null olan bir değer eklemektedir.
İkinci insert cümlesi ise tabloya boş bir karakter değeri eklemektedir. (iki tek tırnak birleşik şekilde)
Şimdi eklediğimiz değerler üzerinden tablodan sorgu alalım.
Select * from kullanici where kullanici adi = '';
Sorgu sonucu olarak yukarıda boş olarak eklediğimiz değerin dönmesini bekliyoruz fakat sorgu sonucu hiç bir satır getirmeyecektir.
Birde aynı tablodan kullanici adi null olan bilgileri sorgulayalım.
Select * from kullanici where kullanici_adi is null;
Sorgu sonucu olarak eklediğimiz null değeri içeren 1 satır dönmesini bekliyoruz fakat 2 satır döndüğünü görüyoruz.
Bunun sonucu olarak Oracle da boş karakter olarak eklenen değerlerin tablo içerisinde null değerlere eşit olduğunu görüyoruz.
Sırası gelmişken bahsetmekte fayda var, null değerler içeren tablolarda kullanmaya alışkın olduğumuz (=,<,>,v.s.) gibi eşitlik ifadelerini kullanamayız. Bunların yerine null işlemleri için is null veya is not null ifadelerini kullanabiliriz.
Daha karmaşık sorgular için ise Oracle'daki null kontrolü yapan çeşitli fonksiyonları (NULLIF, NVL, NVL2) kullanabiliriz. Bu fonksiyonlar hakkında daha detaylı bilgi için "Oracle NULL Kontrol Fonksiyonları" başlıklı yazıya göz atabilirsiniz.
Kendi kullandığım bazı notları hızlı erişim sağlayabilmek için bu sayfaya ekliyorum, bilgi paylaştıkça güzeldir (:
15 Aralık 2011 Perşembe
5 Aralık 2011 Pazartesi
Oracle PL/SQL Soru & Cevaplar 2: Bir tablo içerisindeki çiftleyen/duplicate/tekrarlayan değerleri bulup nasıl silebilirim?
Oracle'da tüm tablolar üzerinde default tanımlı olan rowid alanı sayesinde bir tablo içerisinden belirli bir set seçip ve bu seti de rowid alanı üzerinden taşıyarak çiftleyen/duplicate/tekrarlayan kayıtları silebiliriz.
Bu yöntem için yazılmış olan aşağıdaki sql ifadesini incelediğimizde, sorgunun iç kısmındaki select ifadesinde KULLANICI tablosunda bulunan ID değerlerini grupladığını ve bu değerler arasından rowid değeri minimum olan değeri aldığını görüyoruz, ifadenin asıl silme işlemini yapan delete kısmında ise iç sorgudan dönen minimum rowid değerlerinin dışındaki tüm kayıtları NOT IN ifadesi kullanarak silmeye çalıştığını görüyoruz.
DELETE FROM KULLANICI WHERE rowid not in
(SELECT MIN(rowid) FROM KULLANICI K GROUP BY K.ID );
Bu yöntem için yazılmış olan aşağıdaki sql ifadesini incelediğimizde, sorgunun iç kısmındaki select ifadesinde KULLANICI tablosunda bulunan ID değerlerini grupladığını ve bu değerler arasından rowid değeri minimum olan değeri aldığını görüyoruz, ifadenin asıl silme işlemini yapan delete kısmında ise iç sorgudan dönen minimum rowid değerlerinin dışındaki tüm kayıtları NOT IN ifadesi kullanarak silmeye çalıştığını görüyoruz.
DELETE FROM KULLANICI WHERE rowid not in
(SELECT MIN(rowid) FROM KULLANICI K GROUP BY K.ID );
Kaydol:
Kayıtlar (Atom)
Popüler Yayınlar
-
NVARCHAR ve VARCHAR çok fazla kullandığımız veri tipleri arasında, fakat geçenlerde bir sohbet sırasında iki veri tipi arasındaki farkları t...
-
Kullandığımız Oracle versiyonu bazı özelliklerin kullanılıp kullanılmması açısından önemli olabilir, yeni eklenen özellikleri eski versiyonl...
-
Üzerlerinde parent-child ilişkisi tanımlanmış olan tablolar sayesinde tablolardaki verinin bütünlüğünü korumak daha kolay olabilir, örneğin ...
-
DDL Data Definition Language (DDL) cümleleri veritabanı veya şema yapıları tanımlamak için kullanılırlar. Örneğin: • CREATE - veritabanında ...
-
Tablo üzerinde bir alandaki duplicate, çiftleyen, tekrarlayan, mükerrer kayıtları bulmak ve o kayıt için kaç tane tekrarlayan olduğunu liste...
-
Soru: Oracle da string bir değerin alfanumerik karakterler içerip içermediğini nasıl test ederiz? Cevap: Bir stringi alfanumerik karakterl...
-
Merhaba, Bu yazı sql plus marifetlerini kullanarak iki veritabanı arasında veri kopyalama işlemini nasıl yapabileceğiniz hakkında bilgiler i...
-
Oracle/PLSQL: Oracle Sistem Tabloları Bütün gerçekten ilişkisel olan sistemler sistem bilgilerini saklayan alanlara sahiptir. Sistem ...
-
Gittikçe büyüyen ve data yükü artan tablolar üzerinde sorgu çalıştırmak veya tablo bakımına ait diğer işlemleri gerçekleştirmek zamanla ...
-
MS-SQL kullanmış olanlar bilirler auto increment kolon oluşturmak iki tıklama kadar kolaydır fakat ORACLE a gelince işler biraz farklı yürüy...