В этом учебном материале вы узнаете, как использовать условие NOT в SQL с синтаксисом и примерами.
Описание
SQL условие NOT (иногда называемое оператор NOT) используется для отмены условия в предложении WHERE оператора SELECT, INSERT, UPDATE или DELETE.
Синтаксис
Синтаксис условия NOT в SQL.
Параметры или аргумент
- condition
- Это условие для отрицания. Для включения записи в набор результатов необходимо выбрать противоположное condition.
Пример - использование NOT с условием IN
Давайте начнем с рассмотрения того, как использовать NOT с условием IN. Когда мы используем оператор NOT с условием IN, мы создаем условие NOT IN. Это проверит, нет ли выражения в списке.
В этом примере у нас есть таблица products со следующими данными:
product_id | product_name | category_id |
---|---|---|
1 | Pear | 50 |
2 | Banana | 50 |
3 | Orange | 50 |
4 | Apple | 50 |
5 | Bread | 75 |
6 | Sliced Ham | 25 |
7 | Kleenex | NULL |
Введите следующий SQL оператор.
1 2 3 |
SELECT * FROM products WHERE product_name NOT IN ('Pear', 'Banana', 'Bread'); |
Будет выбрано 4 записи. Вот результаты, которые вы должны получить.
product_id | product_name | category_id |
---|---|---|
3 | Orange | 50 |
4 | Apple | 50 |
6 | Sliced Ham | 25 |
7 | Kleenex | NULL |
В этом примере будут возвращены все строки из таблицы products, где product_name не является Pear, Banana или Bread. Иногда более эффективно перечислять значения, которые вы не хотите, в отличие от значений, которые вы хотите.
Это эквивалентно следующему оператору SQL.
1 2 3 4 5 |
SELECT * FROM products WHERE product_name <> 'Pear' AND product_name <> 'Banana' AND product_name <> 'Bread'; |
Пример - использование NOT с условием IS NULL
Когда вы объединяете оператор NOT с условием IS NULL , вы создаете условие IS NOT NULL, которое позволяет вам проверять значение, отличное от NULL. Это рекомендуемый оператор сравнения для использования в SQL при проверке значений, отличных от NULL. Давайте рассмотрим пример, который показывает, как использовать условие IS NOT NULL в запросе.
Используя тот же products, что и в предыдущем примере.
product_id | product_name | category_id |
---|---|---|
1 | Pear | 50 |
2 | Banana | 50 |
3 | Orange | 50 |
4 | Apple | 50 |
5 | Bread | 75 |
6 | Sliced Ham | 25 |
7 | Kleenex | NULL |
Введите следующий SQL оператор.
1 2 3 |
SELECT * FROM products WHERE category_id IS NOT NULL; |
Будет выбрано 6 записей. Вот результаты, которые вы должны получить.
product_id | product_name | category_id |
---|---|---|
1 | Pear | 50 |
2 | Banana | 50 |
3 | Orange | 50 |
4 | Apple | 50 |
5 | Bread | 75 |
6 | Sliced Ham | 25 |
В этом примере будут возвращены все записи из таблицы products, где customer_id не содержит значения NULL.
Пример - использование NOT с условием LIKE
Далее давайте рассмотрим пример использования оператора NOT с условием LIKE.
В этом примере у нас есть таблица suppliers со следующими данными:
supplier_id | supplier_name | city | state |
---|---|---|---|
100 | Yandex | Moscow | Russian |
200 | Lansing | Michigan | |
300 | Oracle | Redwood City | California |
400 | Bing | Redmond | Washington |
500 | Yahoo | Sunnyvale | Washington |
600 | DuckDuckGo | Paoli | Pennsylvania |
700 | Qwant | Paris | France |
800 | Menlo Park | California | |
900 | Electronic Arts | San Francisco | California |
Давайте посмотрим на все записи в таблице suppliers, где supplier_name не содержит букву 'o'. Введите следующий SQL оператор.
1 2 3 |
SELECT * FROM suppliers WHERE supplier_name NOT LIKE '%o%'; |
Будет выбрана 4 запись. Вот результаты, которые вы должны получить.
supplier_id | supplier_name | city | state |
---|---|---|---|
100 | Yandex | Moscow | Russian |
300 | Oracle | Redwood City | California |
400 | Bing | Redmond | Washington |
700 | Qwant | Paris | France |
В этом примере в таблице suppliers есть четыре записи, в которых supplier_name не содержит литеры 'o'.
Пример - использование NOT с условием BETWEEN
Оператор NOT также можно комбинировать с условием BETWEEN для создания условия NOT BETWEEN. Давайте рассмотрим пример, который показывает, как использовать условие NOT BETWEEN в запросе.
В этом примере у нас есть таблица customers со следующими данными:
customer_id | first_name | last_name | favorite_website |
---|---|---|---|
4000 | Justin | Bieber | google.com |
5000 | Selena | Gomez | bing.com |
6000 | Mila | Kunis | yahoo.com |
7000 | Tom | Cruise | oracle.com |
8000 | Johnny | Depp | NULL |
9000 | Russell | Crowe | google.com |
Введите следующий SQL оператор.
1 2 3 |
SELECT * FROM customers WHERE customer_id NOT BETWEEN 5000 AND 8000; |
Будет выбрано 2 записи. Вот результаты, которые вы должны получить.
customer_id | first_name | last_name | favorite_website |
---|---|---|---|
4000 | Justin | Bieber | google.com |
9000 | Russell | Crowe | google.com |
Это вернет все строки, где customer_id не находится в диапазоне между 5000 и 8000 включительно. Это было бы эквивалентно следующему оператору SELECT.
1 2 3 4 |
SELECT * FROM customers WHERE customer_id < 5000 OR customer_id > 800; |
Пример - использование NOT с условием EXISTS
Наконец, условие NOT можно объединить с условием EXISTS, чтобы создать условие NOT EXISTS. Давайте рассмотрим пример, который показывает, как использовать условие NOT EXISTS в SQL.
В этом примере у нас есть таблица customers со следующими данными:
customer_id | first_name | last_name | favorite_website |
---|---|---|---|
4000 | Justin | Bieber | google.com |
5000 | Selena | Gomez | bing.com |
6000 | Mila | Kunis | yahoo.com |
7000 | Tom | Cruise | oracle.com |
8000 | Johnny | Depp | NULL |
9000 | Russell | Crowe | google.com |
И таблица с именем orders со следующими данными:
order_id | customer_id | order_date |
---|---|---|
1 | 7000 | 2019/06/18 |
2 | 5000 | 2019/06/18 |
3 | 8000 | 2019/06/19 |
4 | 4000 | 2019/06/20 |
5 | NULL | 2019/07/01 |
Введите следующий SQL оператор.
1 2 3 4 5 6 |
SELECT * FROM customers WHERE NOT EXISTS (SELECT * FROM orders WHERE customers.customer_id = orders.customer_id); |
Будет выбрано 2 записи. Вот результаты, которые вы должны получить.
customer_id | first_name | last_name | favorite_website |
---|---|---|---|
6000 | Mila | Kunis | yahoo.com |
9000 | Russell | Crowe | google.com |
В этом примере возвращаются все записи из таблицы customer, где в таблице orders нет записей для данного customer_id.