Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

SQL ATAU Operator untuk Pemula

Dalam SQL, OR operator memungkinkan Anda untuk menggunakan kondisi alternatif saat memfilter kueri Anda.

OR operator menggabungkan dua kondisi, dan mengembalikan TRUE ketika salah satu dari kondisinya TRUE .

Tabel Sumber

Tabel berikut digunakan untuk contoh di halaman ini.

SELECT * FROM Pets;

Hasil:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+
(8 rows affected)

Contoh

Berikut adalah contoh sederhana untuk mendemonstrasikan OR operator.

SELECT * FROM Pets 
WHERE PetName = 'Fluffy' OR PetName = 'Tweet';

Hasil:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

Kita dapat melihat bahwa itu memang mengembalikan baris di mana PetName kolom adalah Fluffy atau Tweet . Tidak ada baris lain yang dikembalikan.

Kolom Berbeda

Pada contoh sebelumnya, kedua kondisi membandingkan nilai terhadap kolom yang sama, tetapi ini bukan persyaratan. Ekspresi di kedua sisi OR operator dapat menggunakan kolom yang berbeda untuk membandingkan nilai. OR operator hanya akan mengembalikan TRUE ketika salah satu dari kondisi tersebut TRUE .

SELECT * FROM Pets 
WHERE PetName = 'Fluffy' OR DOB < '2020-01-01';

Hasil:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

Dikombinasikan dengan Operator Lain

Kriteria pemfilteran Anda dapat menggabungkan ekspresi yang menggunakan operator lain selain OR operator.

Berikut adalah contoh yang menyertakan AND operator.

SELECT * FROM Pets 
WHERE (PetName = 'Fluffy' OR PetName = 'Tweet')
AND DOB >= '2020-11-20';

Hasil:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
+---------+-------------+-----------+-----------+------------+

Perhatikan bahwa saya mengelilingi OR kondisi dengan tanda kurung. Alasan saya melakukannya adalah karena, secara default, OR operator dievaluasi setelah AND operator. SQL memiliki urutan prioritas operator yang ditentukan dalam ekspresi, dan ini menentukan bahwa AND operator dievaluasi sebelum OR operator.

Namun, Anda bisa menggunakan tanda kurung untuk mengganti prioritas operator yang ditentukan dalam ekspresi. Segala sesuatu dalam tanda kurung dievaluasi untuk mengembalikan nilai tunggal. Nilai tersebut dapat digunakan oleh operator mana pun di luar tanda kurung tersebut.

Dengan kata lain, Anda dapat menggunakan tanda kurung untuk menentukan urutan yang Anda inginkan agar setiap operator logika dievaluasi dalam sebuah ekspresi.

Mengapa ini menjadi masalah?

Lihat hasilnya saat kami menghapus tanda kurung.

SELECT * FROM Pets 
WHERE PetName = 'Fluffy' OR PetName = 'Tweet'
AND DOB >= '2020-11-20';

Hasil:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
+---------+-------------+-----------+-----------+------------+

Kami justru mendapatkan hasil yang berbeda.

Ini karena, kueri sekarang memeriksa PetName = 'Tweet' AND DOB >= '2020-11-20' pertama, lalu centang OR ekspresi PetName = 'Fluffy' .

Seolah-olah kita meletakkan tanda kurung di sekitar AND ekspresi, seperti ini:

SELECT * FROM Pets 
WHERE PetName = 'Fluffy' OR (PetName = 'Tweet'
AND DOB >= '2020-11-20');

Namun, untuk lebih membingungkan, kami dapat mengatur ulang kueri kami sehingga kami tidak menggunakan tanda kurung, namun tetap mendapatkan hasil yang sama seperti contoh pertama kami dengan tanda kurung.

Seperti ini:

SELECT * FROM Pets 
WHERE DOB >= '2020-11-20' 
AND PetName = 'Fluffy' OR PetName = 'Tweet';

Hasil:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
+---------+-------------+-----------+-----------+------------+

Dalam hal ini, AND ekspresi dievaluasi terlebih dahulu, seperti yang diharapkan. Urutan ekspresi kebetulan berbaris sehingga DOB >= '2020-11-20' AND PetName = 'Fluffy' dievaluasi terlebih dahulu, jadi kami mengecualikan hewan peliharaan lain bernama Fluffy karena DOB its jatuh di luar kisaran itu. Hanya setelah itu, adalah OR ekspresi dievaluasi sebagai kondisi alternatif untuk AND kami yang ada hasil.

Pesan moral dari cerita ini? Gunakan tanda kurung saat menggunakan beberapa operator. Dengan cara itu Anda dapat menentukan urutan yang tepat di mana Anda ingin setiap ekspresi dievaluasi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa itu Injeksi SQL?

  2. Mendasarkan Model Basis Data dalam Kenyataan:Tantangan Seorang Blogger

  3. Cara Mengganti Nama Tabel di SQL

  4. Aturan Penerapan TDD di Proyek Lama

  5. Seni Menggabungkan Data dalam SQL dari Sederhana ke Agregasi Geser