В этом учебном материале вы узнаете, как использовать условие 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.