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.