Dalam SQL, NOT
operator meniadakan input Boolean (itu membalikkan nilai ekspresi Boolean apa pun). Oleh karena itu mengembalikan TRUE
ketika ekspresinya FALSE
.
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 1
Berikut adalah contoh sederhana untuk mendemonstrasikan NOT
operator.
SELECT * FROM Pets
WHERE PetName NOT LIKE 'F%';
Hasil:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
Dalam hal ini, kami menggunakan NOT
operator untuk meniadakan hasil LIKE
operator. Permintaan kami mengembalikan semua hewan peliharaan yang tidak dimulai dengan huruf F.
Contoh 2 – Menggunakan NOT dengan Operator Perbandingan
Jika Anda menggunakan NOT
operator untuk meniadakan operator perbandingan, Anda harus sedikit mengubah sintaks Anda dari yang digunakan pada contoh sebelumnya.
Misalnya, jika Anda ingin menggunakannya untuk meniadakan operator yang sama (=
), gunakan sintaks berikut:
SELECT * FROM Pets
WHERE NOT PetName = 'Fluffy';
Hasil:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 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 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
Ini mengembalikan semua hewan peliharaan yang namanya bukan Fluffy.
Dalam contoh ini, kami menempatkan NOT
operator di depan nama kolom. Jika kami tidak melakukannya, kami akan menerima pesan kesalahan seperti ini:
SELECT * FROM Pets
WHERE PetName NOT = 'Fluffy';
Hasil:
Msg 102, Level 15, State 1, Line 2 Incorrect syntax near '='.
Kami juga bisa mencapai hasil yang sama dengan menggunakan tidak sama dengan operator (baik <>
atau !=
tergantung pada DBMS Anda).
Misalnya, ini:
SELECT * FROM Pets
WHERE PetName <> 'Fluffy';
Atau ini:
SELECT * FROM Pets
WHERE PetName != 'Fluffy';
Contoh 3 – Sintaks yang Sama dengan Operator Logika
Ternyata, kita juga dapat menggunakan sintaks tersebut saat menggunakan operator logika, seperti LIKE
operator yang kita gunakan pada contoh pertama.
Oleh karena itu, kita dapat menulis ulang contoh pertama ini:
SELECT * FROM Pets
WHERE NOT PetName LIKE 'F%';
Hasil:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
Jika Anda tidak yakin apa perbedaannya, kami memindahkan NOT
operator dari setelah PetName
kolom, ke sebelumnya.
Berikut adalah dua pernyataan bersama:
SELECT * FROM Pets
WHERE PetName NOT LIKE 'F%';
SELECT * FROM Pets
WHERE NOT PetName LIKE 'F%';
Contoh 4 – Meniadakan Beberapa Kondisi
NOT
operator hanya meniadakan satu kondisi. Jika Anda memiliki beberapa kondisi yang perlu Anda ingkari, gunakan NOT
separate yang terpisah operator untuk setiap kondisi,
SELECT * FROM Pets
WHERE NOT PetName = 'Fluffy'
AND NOT PetName = 'Wag';
Hasil:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
Contoh 5 – Prioritas
Saat menggunakan kondisi gabungan, di mana Anda memiliki beberapa operator, NOT
operator dievaluasi sebelum operator logis apa pun, tetapi setelah operator apa pun. operator perbandingan,
Saat dua operator dalam ekspresi memiliki tingkat prioritas yang sama, mereka dievaluasi dari kiri ke kanan berdasarkan posisinya dalam ekspresi. Namun, Anda dapat menggunakan tanda kurung untuk menentukan urutan evaluasi setiap ketentuan yang Anda inginkan.
Ini contohnya.
SELECT * FROM Pets
WHERE
NOT PetName = 'Fluffy'
OR NOT PetName = 'Wag'
AND NOT DOB > '2020-01-01';
Hasil:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 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 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
Kami tidak menggunakan tanda kurung apa pun di sini, dan semua ketentuan ditiadakan dengan NOT
operator, dan dengan demikian AND
operator lebih diutamakan daripada OR
operator.
Namun, kita dapat menggunakan tanda kurung untuk menentukan bahwa OR
kondisi harus dievaluasi sebelum AND
kondisi.
SELECT * FROM Pets
WHERE
(NOT PetName = 'Fluffy'
OR NOT PetName = 'Wag')
AND NOT DOB > '2020-01-01';
Hasil:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | +---------+-------------+-----------+-----------+------------+
Dalam hal ini kita mendapatkan hasil yang berbeda.
Contoh 6 – Meniadakan Operator ANTARA
Ini contoh lain, kali ini menggunakan NOT
operator untuk meniadakan hasil BETWEEN
operator.
SELECT * FROM Pets
WHERE DOB NOT BETWEEN '2018-10-01' AND '2020-09-17';
Hasil:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
Dalam contoh ini, kami mengembalikan semua baris di mana DOB
kolom tidak antara 2018-10-01
dan 2020-09-17
.
Dalam hal ini, dua baris cocok dengan kriteria tersebut, dan oleh karena itu, dua baris dikembalikan.
Ini adalah hasil kebalikan dari kueri berikut:
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-01' AND '2020-09-17';
Hasil:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
Dalam contoh ini, kami mengembalikan semua baris di mana DOB
kolom adalah antara 2018-10-01
dan 2020-09-17
.
Dalam hal ini, empat baris cocok dengan kriteria itu, dan oleh karena itu, empat baris dikembalikan.