Verileri Kısıtlama ve Sıralama
SELECT ifadesinin temel yetenekleri Seçim, Projeksiyon ve Birleştirme'dir. Bir tablodan belirli sütunların görüntülenmesi proje işlemi olarak bilinir. Şimdi belirli çıktı satırlarını görüntülemeye odaklanacağız. Bu, seçme işlemi olarak bilinir. Bir SELECT sorgusuna bir WHERE yan tümcesi eklenerek belirli satırlar seçilebilir. Nitekim, WHERE yan tümcesi, SELECT sorgu hiyerarşisindeki FROM yan tümcesinden hemen sonra görünür. Sıranın tüm senaryolarda korunması gerekir. İhlal edilirse, Oracle bir istisna oluşturur.
Sözdizimi:
SELECT *|{[DISTINCT] column| expression [alias],..}
FROM table
[WHERE condition(s)]
Sözdiziminde,
WHERE yan tümcesi anahtar kelimedir
[koşul] sütun adlarını, ifadeleri, sabitleri, değişmez değerleri ve bir karşılaştırma işlecini içerir.
Yöneticinizin kuruluşunuzun üç aylık bütçesi üzerinde çalıştığını varsayalım. Bu faaliyetin bir parçası olarak, her bir çalışanın temel ayrıntılarının bir listesini çıkarmak gerekir, ancak yalnızca yılda en az 25.000 ABD doları ödenen çalışanlar için. Aşağıdaki SQL sorgusu bu görevi yerine getirir. Kalın metinle gösterilen WHERE cümlesinin kullanımına dikkat edin.
SELECT Employee_ID, Last_Name, First_Name, Salary
FROM employees
WHERE Salary >= 25000;
EMPLOYEE_ID LAST_NAME FIRST_NAME SALARY
---------- --------------- --------------- -----------
88303 Jones Quincey $30,550.00
88404 Barlow William $27,500.00
88505 Smith Susan $32,500.00
3 rows selected
Dikkat edilecek noktalar -
Bir SELECT yan tümcesi yalnızca bir WHERE yan tümcesi içerebilir. Ancak, AND veya OR operatörü kullanılarak WHERE yan tümcesine birden çok filtre koşulu eklenebilir.
Bir yüklem cümlesindeki sütunlar, değişmez değerler veya ifadeler benzer veya birbirine dönüştürülebilir veri türlerinde olmalıdır.
Sütun takma adı WHERE yan tümcesinde kullanılamaz.
Karakter değişmezleri tek tırnak işareti içine alınmalıdır ve büyük / küçük harfe duyarlıdır.
Tarih değişmezleri tek tırnak işareti içine alınmalıdır ve biçime duyarlıdır. Varsayılan biçimDD-MON-RR.
Karşılaştırma Operatörleri
Karşılaştırma operatörleri, bir terimi veya işleneni başka bir terimle karşılaştırmak için yüklemlerde kullanılır. SQL kapsamlı eşitlik, eşitsizlik ve çeşitli operatörler sunar. SELECT sorgusundaki verilere ve filtre koşulu mantığına bağlı olarak kullanılabilirler. WHERE yan tümcesinde karşılaştırma işleçlerini kullandığınızda, işlecin her iki tarafındaki bağımsız değişkenler (karşılaştırdığınız nesneler veya değerler) bir sütun adı veya belirli bir değer olmalıdır. Belirli bir değer kullanılıyorsa, değerin sayısal bir değer veya değişmez bir dize olması gerekir. Değer bir karakter dizesi veya tarih ise, değeri tek tırnak işareti ('') içinde girmelisiniz.
Oracle'ın eşitlik veya eşitsizlik koşullarında kullanılacak dokuz karşılaştırma operatörü vardır.
Operator Meaning
= equal to
< less than
> greater than
>= greater than or equal to
<= less than or equal to
!= not equal to
<> not equal to
Diğer Oracle operatörleri BETWEEN..AND, IN, LIKE ve IS NULL şeklindedir.
BETWEEN Operatörü
BETWEEN operatörü, belirli bir aralıktaki bir sütun değerini karşılaştırmak için kullanılabilir. Karşılaştırma sırasında her ikisinin de kapsayıcı olduğu durumlarda, belirtilen aralığın bir alt ve üst sınırı olmalıdır. Kullanımı, bileşik eşitsizlik operatörüne benzer (<= ve> =). Sayısal, karakter ve tarih tipi değerleri ile kullanılabilir.
Örneğin, WHERE koşulu SALARY BETWEEN 1500 AND 2500 bir SELECT sorgusunda maaşı 1500 ile 2500 arasında olan çalışanları listeler.
IN Operatörü
IN operatörü, belirli bir değer kümesindeki bir sütun değerini test etmek için kullanılır. Sütun, verilen kümedeki değerlerden herhangi birine eşitlenebiliyorsa, koşul doğrulanır. IN operatörü kullanılarak tanımlanan koşul, üyelik koşulu olarak da bilinir.
Örneğin, WHERE koşulu SALARY IN (1500, 3000, 2500) bir SELECT sorgusunda maaşın 1500, 3000 veya 2500 olduğu satırları kısıtlar.
LIKE Operatörü
LIKE operatörü, bir SELECT sorgusunda kalıp eşleştirme ve joker karakter aramaları için kullanılır. Sütun değerinin bir kısmı bilinmiyorsa, bilinmeyen kısmı değiştirmek için joker karakter kullanılabilir. Arama dizesini oluşturmak için joker karakter operatörleri kullanır, bu nedenle arama, Joker karakter araması olarak bilinir. Bu iki operatör Yüzde birlik ('%') ve Alt Çizgidir ('_'). Alt çizgi ('_') tek bir karakteri değiştirirken yüzdelik dilim ('%') birden fazla karakteri değiştirir. Kombinasyon halinde de kullanılabilirler.
Örneğin, aşağıdaki SELECT sorgusu, soyadı 'SA' ile başlayan çalışanların adlarını listeler.
SELECT first_name
FROM employees
WHERE last_name LIKE 'SA%';
BOŞ DEĞİLDİR Koşulları
Unutulmamalıdır ki, NULL değerleri eşitlik operatörü kullanılarak test edilemez. Bunun nedeni, eşitlik operatörü belirli bir değeri test ederken NULL değerlerin bilinmemesi ve atanmamasıdır. IS NULL operatörü, bir sütunun NULL değerlerini kontrol etmek için eşitlik operatörü görevi görür.
Örneğin, WHERE koşulu COMMISSION_PCT IS NULL bir SELECT sorgusunda komisyon yüzdesi olmayan çalışanları listeleyecektir.
Mantıksal operatörler
WHERE yan tümcesi yüklemine birden çok filtre koşulu eklenebilir. AND, OR ve NOT mantıksal operatörleri kullanılarak birden fazla koşul birleştirilebilir.
VE: iki veya daha fazla koşulu birleştirir ve yalnızca tüm koşullar doğru olduğunda sonuçları döndürür.
VEYA: iki veya daha fazla koşula katılır ve koşullardan herhangi biri doğru olduğunda sonuç verir.
NOT: onu izleyen ifadeyi geçersiz kılar.
AND operatörü, bir WHERE yan tümcesinde iki veya daha fazla koşulu bağlar ve yalnızca tüm koşullar doğruysa TRUE değerini döndürür. Bir yöneticinin kadın çalışanların listesine ihtiyacı olduğunu varsayalım. Ayrıca, liste yalnızca soyadı "E" harfiyle başlayan veya alfabede daha sonra gelen çalışanları içermelidir. Ek olarak, sonuç tablosu çalışanın soyadına göre sıralanmalıdır. Karşılanması gereken iki basit koşul vardır. WHERE yan tümcesi şu şekilde yazılabilir: WHERE Gender = 'F' AND last_name> 'E'.
SELECT last_name "Last Name", first_name "First Name", Gender "Gender"
FROM employees
WHERE Gender = 'F' AND last_name > 'E'
ORDER BY last_name;
OR operatörü, bir WHERE yan tümcesinde birden fazla koşulu bağlar ve koşullardan biri true değerini döndürürse TRUE döndürür. Kuruluş yöneticinizin gereksinimlerinin biraz değiştiğini varsayalım. Başka bir çalışan listelemesine ihtiyaç vardır, ancak bu listede çalışanlar: (1) kadın olmalı veya (2) "T" harfiyle başlayan bir soyadı veya alfabede daha sonra gelen bir harf olmalıdır. Sonuç tablosu çalışanın soyadına göre sıralanmalıdır. Bu durumda, sorguyu tatmin etmek için iki koşuldan biri karşılanabilir. Kadın çalışanlar, ikinci koşulu sağlayan isme sahip çalışanlarla birlikte listelenmelidir.
NOT operatörü, bir ifadeyi veya koşulu olumsuzlamak için kullanılır.
Madde TARAFINDAN SİPARİŞ
Yalnızca birkaç satırlık veri görüntülediğinizde, çıktının sıralanması gereksiz olabilir; ancak, çok sayıda satır görüntülediğinizde, yöneticilere bilgilerin sıralanması karar vermede yardımcı olabilir. Bir SELECT ifadesinden alınan çıktı, isteğe bağlı ORDER BY yan tümcesi kullanılarak sıralanabilir. ORDER BY yan tümcesini kullandığınızda, sipariş ettiğiniz sütun adı da SELECT yan tümcesinde belirtilen bir sütun adı olmalıdır.
Aşağıdaki SQL sorgusu, sonuç tablosunu artan sırada last_name sütununa göre sıralamak için bir ORDER BY deyimi kullanır. Artan düzen, varsayılan sıralama düzenidir.
SELECT last_name, first_name
FROM employees
WHERE last_name >= 'J'
ORDER BY last_name;
last_name first_name
--------------- ---------------
Jones Quincey
Klepper Robert
Quattromani Toni
Schultheis Robert
Sıralama, sayısal ve tarih değerlerine de dayalı olabilir. Sıralama, birden çok sütuna göre de yapılabilir.
Varsayılan olarak ORDER BY yan tümcesi, sonuç tablosundaki çıktı satırlarını artan sırada sıralayacaktır. Azalan sıralamayı etkinleştirmek için DESC anahtar kelimesini (azalan için kısa) kullanabiliriz. Alternatif varsayılan, artan sırada sıralayan ASC'dir, ancak ASC anahtar sözcüğü varsayılan olduğundan nadiren kullanılır. ASC veya DESC isteğe bağlı anahtar sözcüğü kullanıldığında, WHERE yan tümcesinde sıraladığınız sütun adını izlemelidir.
Positional Sorting - Seçilen sütun listesindeki sütunun sayısal konumu, sütun adı yerine ORDER BY yan tümcesinde verilebilir. Esas olarak UNION sorgularında kullanılır (daha sonra tartışılacaktır). Sorgu, sütun listesinde 2. göründüğü için maaşa göre belirlenen sonucu sıralar.
SELECT first_name, salary
FROM employees
ORDER BY 2;
İkame Değişkenleri
Farklı girdi kümesi için bir SQL sorgusunun birden fazla kez yürütülmesi gerektiğinde, ikame değişkenleri kullanılabilir. İkame değişkenleri, sorgu yürütmeden önce kullanıcı girişlerini istemek için kullanılabilir. Koşullu filtreleme ve veri görüntüleme için girdi olarak kullanıcılardan veri aralığını alan sorgu tabanlı rapor oluşturmada yaygın olarak kullanılırlar. Değerleri geçici olarak depolamak için değiştirme değişkenlerinin önüne tek bir ve işareti (&) simgesi gelir. Örneğin,
SELECT EMPLOYEE_ID, LAST_NAME, SALARY
FROM employees
WHERE LAST_NAME = &last_name
OR EMPLOYEE_ID = &EMPNO;
Yukarıdaki SELECT sorgusu yürütüldüğünde, oracle '&' karakterini ikame değişkeni olarak tanımlar. Kullanıcıdan aşağıdaki gibi 'soyad' ve 'EMPNO' için değer girmesini ister.
Enter value for last_name:
Enter value for empno:
Kullanıcı her iki değişkene de girdi sağladığında, değerler değiştirilir, sorgu doğrulanır ve yürütülür.
Dikkat edilecek noktalar -
Değişkenin bir karakter veya tarih değerinin yerini alması amaçlanıyorsa, değişmez değerin tek tırnak içine alınması gerekir. Yararlı bir teknik, karakter ve tarih değerleri ile uğraşırken ve işareti yerine koyma değişkenini tek tırnak içine almaktır.
Hem SQL Developer hem de SQL * Plus, ikame değişkenlerini ve DEFINE / UNDEFINE komutlarını destekler. SQL Developer veya SQL * Plus, kullanıcı girdisinde doğrulama kontrollerini (veri türü hariç) desteklemiyor.
İkame değişkenlerini yalnızca bir SQL ifadesinin WHERE yan tümcesinde değil, aynı zamanda sütun adları, ifadeler veya metin için ikame olarak da kullanabilirsiniz.
Çift Ampersan İkame Değişkenini Kullanma
Aynı ikame değişkeni birden fazla yerde kullanıldığında, aynı verilerin tekrar girilmesini önlemek için çift ve işareti değiştirmeyi kullanırız. Bu gibi durumlarda, ikame değişkeninin değeri girildikten sonra, tüm kullanım anlarında ikame edilecektir.
SELECT first_name, HIRE_DATE, SEPARATION_DATE
FROM employees
WHERE HIRE_DATE LIKE '%&DT%' AND SEPARATION_DATE '%&&DT%'
Aynı & DT değerinin yukarıdaki sorguda iki kez değiştirildiğine dikkat edin. Yani, kullanıcı tarafından verildikten sonra değeri iki yerde ikame edilecektir.
DEFINE ve VERIFY Komutları
Bir oturumda değişkenlerin tanımını ayarlamak, SQL * Plus'ın DEFINE özelliği ile ayarlanır. Değişkenler, sorgu yürütme sırasında durmayı önlemek için oturumda tanımlanabilir. Oracle, bir SQL sorgusunda karşılaşıldığında aynı değişkeni okur. Varsayılan olarak AÇIK durumdadır. DEFINE cümlesi yardımıyla, sorgu çalıştırılmadan önce komut satırında bir değişken tanımlanabilir.DEFINE variable=value;.
Doğrulama komutu, OLD ve NEW ifadesi olarak gösterilen yukarıdaki ikameyi doğrular. Varsayılan olarak KAPALI'dır ve SET komutu kullanılarak AÇIK olarak ayarlanabilir.
SQL> SET DEFINE ON
SQL> SET VERIFY ON
SQL> DEFINE NAME = MARTIN'
SQL> SELECT first_name, SALARY
FROM employees
WHERE first_name = '&NAME';
OLD 1: select first_name, sal from employee where first_name = '&first_name'
new 1: select first_name, sal from employee where first_name = 'MARTIN'
first_name SALARY
------- -------
MARTIN 5000