Pernyataan SQL, terutama Data Manipulation Language (DML), kadang-kadang mengunakan beberapa operator dan predikat untuk mendeklarasikan pernyataannya.
1. Aritmatika
Syntax: numeric_value1 + numeric_value2 numeric_value1 - numeric_value2 numeric_value1 * numeric_value2 numeric_value1 / numeric_value2
Digunakan untuk melakukan perhitungan aritmatika dalam query SELECT. Secara normal perhitungan aritmatika dilakukan mulai dari operasi perkalian, pembagian, penjumlahan, dan kemudian pengurangan. Gunakan tanda kurung untuk melalukan perhitungan di luar keadaan normal. Pernyataan berikut akan melakukan operasi penjumlahan sebelum melakukan operasi perkalian.
SELECT (N.Numbers * (N.Multiple + 1)) AS Result FROM Numbertable N
Operator aritmatika hanya beroperasi pada data bertipe numerik, gunakan fungsi CAST untuk mengkonversi tipe data menjadi data bertipe numerik.
2. Logika
Syntax: [NOT] predicate OR [NOT] predicate [NOT] predicate AND [NOT] predicate
Operator OR dan NOT digunakan untuk menghubungkan dua predikat dalam klausa tunggal WHERE. Jika menggunakan operator OR, akan menghasilkan nilai True jika salah satu atau kedua prdikat bernilai True. Jika operator AND digunakan, untuk menghasilkan nilai True, kedua perdikat harus bernilai True. Pernyataan berikut akan menampilkan data (bernilai True) jika salah satu predikat dalam klausa WHERE bernilai True.
SELECT * FROM Reservations WHERE ((ReserveDate < "1/31/1998") OR (Paid = TRUE))
Dan operator NOT berfungsi untuk menegasi nilai predikat. Pernyataan berikut hanya menampilkan baris dimana kolom Paid yang bernilai False.
SELECT * FROM Reservations WHERE (NOT (Paid = "TRUE"))
3. Predikat
3.1. Comparison
Syntax: value1 < value2 kurang dari value1 > value2 lebih dari value1 = value2 sama dengan value1 <> value2 tidak sama dengan value1 != value2 tidak sama dengan (alternatif) value1 >= value2 lebih besar dari atau sama dengan value1 <= value2 kurang dari atau sama dengan
Membandingkan dua nilai (nilai kolom, literal, atau hasil perhitungan) yang sejenis. Hasil perbandingan dapat dimodifikasi dengan menggunakan operator logika, seperti NOT.
SELECT * FROM Orders WHERE NOT (ItemsTotal >= 1000)
Perbandingan predikat hanya dapat digunakan dalam klausa WHERE atau HAVING, atau dalam klausa ON pada penggabungan tabel dan tidak dapat digunakan dalam pernyataan SELECT.
3.2. BETWEEN
Syntax: value1 [NOT] BETWEEN value2 AND value3
Membandingkan suatu nilai dalam suatu range nilai. Jika nilai tersebut lebih besar atau sama dengan nilai terendah range dan kurang dari atau sama dengan nilai terbesar range maka BETWEEN bernilai True. Sebaliknya jika nilai tersebut lebih rendah dari nilai terendah range atau lebih besar dari nilai terbesar range maka BETWEEN bernilai False. BETWEEN dapat digunakan untuk semua data bertipe non-Blob, tetapi semua nilai yang dibandingkan harus bertipe sama atau sesuai. Untuk mengkonversi data gunakan fungsi CAST. Nilai yang digunakan dalam perbandingan BETWEEN dapat berupa nilai kolom, literal, atau nilai hasil perhitungan.
SELECT Saledate FROM Orders WHERE (Saledate BETWEEN "1/1/1988" AND "12/31/1988")
3.3. EXIST
Syntax: EXISTS subquery
Untuk menyaring tabel yang didasarkan pada keberadaan nilai kolom suatu tabel dalam subquery. Subquery dinyatakan dengan menggunakan klausa WHERE. EXIST bernilai True jika subquery telah menghasilkan setidaknya satu record data, dan bernilai False jika tidak ada record yang didapatkan. Subquery tersebut dapat disaring lagi dengan menggunakan kondisi-kondisi lain. Gunakan operator NOT untuk mengkonversi predikat pembanding EXIST. Sebagai contoh, pernyataan berikut menghasilkan record yang menyinggung semua pelanggan yang telah membukukan total pesanan melebihi $ 1,000.
SELECT
C.Company,
C.CustNo
FROM Customer C
WHERE EXISTS(SELECT O.CustNo
FROM Orders O
WHERE (O.CustNo = C.CustNo) AND (O.ItemsTotal > 1000))
3.4. IN
Syntax: value [NOT] IN (value_set)
Untuk menyaring tabel yang didasarkan pada keberadaan nilai kolom suatu tabel dalam suatu set nilai pembanding tertentu. Nilai kolom atau nilai literal atau nilai hasil perhitungan (termasuk kombinasinya) dapat digunakan sebagai nilai pembanding predikat IN. Nilai pembanding dapat berupa daftar pernyataan statis yang dipisahkan tanda koma.
SELECT
C.Company,
C.State
FROM Customer C
WHERE (C.State IN ("CA", "HI"))
Atau pernyataan dinamis yang dihasilkan melalui suatu subquery. Subquery dapat menghasilkan banyak baris, tetapi harus hanya menghasilkan kolom tunggal sebagai nilai pembanding.
SELECT
C.Company,
C.State
FROM Customer C
WHERE (C.State IN (SELECT R.State
FROM Regions R
WHERE (R.Region = "Pacific")))
Predikat IN dapat digunakan untuk semua data bertipe non-Blob, tetapi semua nilai yang dibandingkan harus bertipe sama atau sesuai. Untuk mengkonversi data gunakan fungsi CAST. Predikat IN berguna jika ingin menyaring data yang bernilai tidak ‘berdekatan’ (data noncontiguous). Dan gunakan predikat BETWEEN jika ingin menampilkan baris data bernilai mendekati range tertentu.
3.5. LIKE
Syntax: value [NOT] LIKE [substitution_char] comparison_value [substitution_char] [ESCAPE escape_char]
Untuk menyaring tabel berdasarkan persamaan nilai kolom terhadap nilai pembanding. Karakter pengganti wildcard (“%”) dapat digunakan dalam perbandingan untuk mewakili jumlah karakter yang tidak diketahui. Predikat perbandingan LIKE bernilai True jika bagian nilai kolom cocok dengan posisi karakter wildcard. Posisi karakter wildcard bisa pada permulaan, pertengahan, atau akhir nilai perbandingan (atau berbagai kombinasi posisi tersebut). Sebagai contoh, pernyataan berikut akan menampilkan record dimana nilai kolom diawali huruf “A” tanpa memperhitungkan banyaknya karakter sesudah huruf tersebut.
SELECT * FROM Customer WHERE (Company LIKE "A%")
Karakter pengganti garis bawah (“_”) dapat digunakan dalam perbandingan untuk mewakili suatu karakter tunggal. Sebagai contoh, pernyataan berikut akan menampilkan record dimana nilai kolom diawali huruf “b” dan diakhiri huruf “n”, dengan sebuah karakter diantara nilai tersebut. nilai yang cocok misalnya “bin” atau “ban” tetapi bukan “barn”.
SELECT Words FROM Dictionary WHERE (Words LIKE "b_n")
Gunakan operator NOT untuk menegasi hasil perbandingan. Dan gunakan kata kunci ESCAPE untuk memunculkan karakter wildcard “%” atau “_” sebagai data dalam kolom. Karakter yang mengikuti kata kunci ESCAPE diperlakukan sebagai suatu karakter lepas untuk memunculkan suatu karakter wildcard sebagai data. Contoh berikut menunjukkan karakter “^” sebagai karakter lepas dan karakter “%” diperlakukan sebagai data dalam kolom PercentValue. Jadi penyaringan data berdasarkan string “10%”.
SELECT * FROM Sales WHERE (PercentValue LIKE "%10^%%" ESCAPE "^")
Case-sensitive (huruf besar/kecil mempunyai nilai berbeda) berlaku dalam predikat perbandingan ini. Dan hanya data bertipe Char yang dapat dinyatakan dalam predikat LIKE.
3.6. IS NUL
Syntax: column_reference IS [NOT] NULL
Predikat perbandingan IS NULL digunakan untuk menyaring tabel berdasarkan kolom tertentu yang berisi suatu nilai kosong (bukan nol). Untuk kolom bertipe numeric, nilai 0 (nol) tidak sama dengan nilai kosong. Gunakan operator NOT untuk menegasi hasil predikat perbandingan ini.
SELECT * FROM Customer WHERE (InvoiceDate IS NULL)
3.7. SOME/ANY/ALL
Syntax: column_reference comparison_predicate SOME | ANY | ALL (subquery)
Predikat perbandingan SOME, ANY, dan ALL digunakan untuk menyaring suatu tabel dengan membandingkan suatu nilai kolom terhadap beberapa nilai perbandingan. Predikat perbandingan ANY dan SOME bernilai True jika predikat perbandingan yang mengiringinya bernilai True untuk beberapa nilai subquery. Sebagai contoh, untuk menampilkan beberapa record dalam tabel Holding, nilai dalam kolom Pur_Price hanya membutuhkan nilai yang lebih besar dari beberapa nilai yang dihasilkan dalam subquery kolom Price tabel Old_Sales.
SELECT *
FROM "Holdings.db" H
WHERE (H."Pur_Price" > ANY (SELECT O."Price"
FROM "Old_Sales.db"))
Predikat perbandingan ALL bernilai True jika predikat perbandingan yang mengiringinya bernilai True untuk semua nilai subquery. Sebagai contoh, untuk menampilkan beberapa record dalam tabel Holding, nilai dalam kolom Pur_Price hanya membutuhkan nilai yang lebih besar dari setiap nilai yang dihasilkan dalam subquery kolom Price tabel Old_Sales.
SELECT *
FROM "Holdings.db" H
WHERE (H."Pur_Price" > ALL (SELECT O."Price"
FROM "Old_Sales.db"))
Nuwun..
