English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Подзапросы SQL

В этом руководстве вы узнаете, как嵌入 один запрос в другой в SQL.

Что такое подзапрос?

Подзапрос, также называемый вложенным запросом или подвыборкой, являетсяSELECTВложенный в другой SQL-запрос WHERE или HAVINGЗапрос в предложении. Данные, возвращаемые подзапросом, используются внешним предложением, как и использование литеральных значений.

Подзапрос предоставляет простой и эффективный способ обработки запросов, зависимых от результатов другого запроса. Они почти такие же, как обычные SELECT-запросы, но без ограничений. Самые важные моменты следующие:

  • Подзапросы должны всегда быть заключены в скобки.

  • Подзапросы должны всегда出现在 скобках. Это означает, что нельзя использовать SELECT *, если в таблице только один столбец. Если目的是 сравнение строк, можно использовать подзапросы, возвращающие несколько столбцов.

  • Вы можете использовать операторы, возвращающие несколько значений (напримерIN или NOT INоператором) для нескольких строк подзапроса.

  • Подзапросы не могут бытьUNION. Разрешается использовать только один оператор SELECT.

Подзапросы наиболее часто используются сSELECTвместе с операторомINSERT,UPDATEилиDELETEв предложении или в другом подзапросе.

Подзапрос с оператором SELECT

Следующие строки возвращают详细信息 клиентов, заказавших товары на сумму более 5000 долларов в таблице заказов. Также обратите внимание, что мы используем ключевое словоDISTINCTУдалены дублирующиеся значения cust_id из результата.

SELECT * FROM customers;
WHERE cust_id IN (SELECT DISTINCT cust_id FROM orders WHERE order_value > 5000);

Совет:Подзапросы могут возвращать единичное значение, строку, столбец или таблицу, содержащую одну или несколько строк и/или столбцов.

Примечание:Подзапросы могут быть вложены во внешниеSELECT,INSERT,UPDATEилиDELETEпредложенияWHEREилиHAVINGпредложение, также можно вложить в другой подзапрос.

Подзапрос с оператором INSERT

Подзапросы также можно использовать с оператором INSERT. Вот пример:

INSERT INTO premium_customers 
SELECT * FROM customers; 
WHERE cust_id IN (SELECT DISTINCT cust_id FROM orders WHERE order_value > 5000);

Эти строки插入 данные клиентов с высоким уровнем в таблицу premium_customers с использованием данных, возвращенных подзапросом. Здесь клиенты с высоким уровнем - это клиенты, которые заказали товары на сумму более 5000 долларов.

Совет: обратитесь кСм.Клонирование таблицы SQLруководства, чтобы узнать, как быстро вставить несколько строк из другой таблицы в таблицу с помощью оператора INSERT ... SELECT.

Подзапрос с оператором UPDATE

Вы также можете использовать подзапросы с оператором UPDATE, чтобы обновить одно или несколько столбцов в таблице, например:

UPDATE orders;
SET order_value = order_value + 10;
WHERE cust_id IN (SELECT cust_id FROM customers WHERE postal_code = 75016);

Увеличивая текущую стоимость заказа на 10 долларов, вышеуказанное предложение обновит стоимость заказа клиентов, проживающих в регионе с почтовым индексом 75016, в таблице заказов (orders).

Подзапрос с оператором DELETE

Таким же образом, можно использовать подзапросы с оператором DELETE, чтобы удалить строку или несколько строк из таблицы, как показано ниже:

DELETE FROM orders
WHERE order_id IN (SELECT order_id FROM order_details WHERE product_id = 5);

SQL-запрос из примера выше будет содержатьproduct_idУдалите эти заказы из таблицы заказов продукта 5.