Operator dan Predikat Pernyataan SQL

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..

Related Posts

  1. Pernyataan Data Manipulation Language (DML) SQL
  2. Ketentuan dan Aturan Umum dalam Pernyataan SQL
  3. Relasi Tabel dalam Pernyataan SQL
  4. Fungsi-fungsi dalam Pernyataan SQL
  5. Pernyataan Data Definition Language (DDL) SQL

About the Author

rumono Bukan siapa-siapa, hanya seorang ‘manusia’ yang pernah lahir di suatu tempat di Brebes, Jawa Tengah. Sangat gemar bacaan sejarah dunia masa lalu, sejarah perang dan pribadi-pribadi yang memberi warna sejarah dunia. Nge-game pun bisa dilakoni sampai berhari-hari asal ada hubungannya dengan sejarah dunia dan perang...