Подзапрос SQL: полное руководство

Подзапрос SQL База данных

Подзапрос SQL

Подзапрос SQL — это запрос внутри другого запроса. Он используется в предложении WHERE или HAVING оператора SQL. Подзапросы позволяют указать результаты одного запроса в качестве аргумента в другом запросе.

Когда вы пишете SQL- запрос, вы можете указать параметр на основе результата другого запроса. Например, скажем, у вас есть список клиентов. Вы можете получить список клиентов, которые разместили заказы на сумму, превышающую определённую сумму. Информация о заказе и клиенте хранится в другой таблице.

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

В этом руководстве мы обсудим, как использовать подзапросы в SQL, со ссылкой на несколько примеров.

Подзапрос SQL: руководство

Подзапрос SQL — это запрос внутри другого запроса. Они используются для выполнения запроса, который зависит от результатов другого запроса. Подзапросы позволяют делать это без необходимости писать два отдельных запроса и копировать, и вставлять результаты. Подзапросы появляются в предложениях WHERE или HAVING.

Вот синтаксис подзапроса в инструкции SQL SELECT:

SELECT name
FROM products
WHERE supplier_id
IN (SELECT id FROM suppliers WHERE local = True);

Этот запрос выбирает названия всех продуктов, поставляемых местной компанией. Мы используем подзапрос в качестве входных данных для оператора SQL IN. Оператор SQL IN возвращает все записи из таблицы «products», где в результатах нашего подзапроса находится идентификатор supplier_id.

Мы можем использовать подзапросы в операторах INSERT, UPDATE и DELETE.

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

Убедитесь, что вы выбрали соответствующие данные в своём подзапросе. В нашем подзапросе выше мы выбрали идентификатор из таблицы поставщиков. Если бы мы выбрали другой столбец, наш запрос не работал бы. Это потому, что наш основной запрос зависит от идентификатора поставщика.

Читайте также:  Порядок в Postgresql по предложению

Пример подзапроса SQL: SELECT

Предположим, вы хотите получить список студентов, занесённых в списки почёта, вы можете использовать подзапрос. Это предполагает, что информация о списках части находится в другой таблице.

Давайте воспользуемся примером, чтобы проиллюстрировать, как работают подзапросы SQL. Следующий запрос вернёт список всех клиентов, которые сделали заказ на сумму более 200 долларов:

SELECT * FROM customers
WHERE id IN (SELECT DISTINCT customer_id FROM orders
WHERE cost > 200);

Наш подзапрос возвращает следующее:

name email address loyalty_plan id
Katy katy.l@gmail.com Mountain View, CA None 4
John john.p@outlook.com Boston, MA None 1

В первой строке мы выбираем каждый столбец из нашей таблицы клиентов. Затем мы указываем, что хотим получить только тех клиентов, чей идентификатор клиента находится в подзапросе. Наш подзапрос выбирает все уникальные идентификаторы клиентов из нашей таблицы заказов, где стоимость товара превышает 200 долларов. Записи, соответствующие этим условиям, включают этих клиентов в результаты.

Подзапрос SQL: INSERT

Мы хотим вставить все записи клиентов, совершивших покупку на сумму более 200 долларов, в таблицу с именем high_value_customers. Для этого мы можем использовать подзапрос SQL и команду SQL INSERT :

INSERT INTO high_value_customers
SELECT * FROM customers
WHERE id IN (SELECT DISTINCT customer_id FROM orders
WHERE cost > 200);

Если мы запросим нашу таблицу high_value_customers, мы сможем увидеть всех наших ценных клиентов в одной таблице:

name email address loyalty_plan id
Katy katy.l@gmail.com Mountain View, CA Gold 4
John john.p@outlook.com Boston, MA None 1

Подзапрос SQL: UPDATE

Мы могли бы использовать подзапрос для обновления данных в таблице. Например, предположим, что мы хотим обновить планы лояльности всех клиентов, совершивших дорогостоящую покупку, до уровня Bronze. Мы могли бы использовать следующий запрос для выполнения этой операции:

UPDATE customers
SET loyalty_plan = ‘High Value’
WHERE id IN (SELECT DISTINCT customer_id FROM orders
WHERE cost > 200);

Когда мы запрашиваем нашу таблицу клиентов, мы видим, что планы лояльности для двух наших ценных клиентов были обновлены:

Читайте также:  PostgreSQL Copy from Stdin
name email address loyalty_plan id
Katy katy.l@gmail.com Mountain View, CA High Value 4
John john.p@outlook.com Boston, MA High Value 1

Подзапрос SQL: DELETE

Вы можете использовать подзапросы с оператором SQL DELETE для удаления отдельных или нескольких строк в таблице.

Напишем команду, которая удаляет заказы ценных клиентов, которые мы переместили в новую таблицу в базе данных. Для этого нам нужно будет зависеть от подзапроса:

DELETE FROM orders
WHERE customer_id IN (SELECT id FROM customers
WHERE loyalty_plan = ‘High Value’);

Мы видим, что все заказы от наших ценных клиентов были удалены. Наш вложенный подзапрос возвращает:

id item_name cost customer_id
5 Oak Chair 100 3

Вывод

Подзапрос SQL — это запрос внутри другого запроса. Подзапросы позволяют вам зависеть от результата одного запроса в другом. Подзапросы указываются в предложениях HAVING или WHERE оператора SQL.

Также подзапросы упрощают выполнение запроса, который зависит от результата другого запроса. В этом руководстве мы обсудили, как написать подзапрос на сервере SQL. Мы также говорили о том, как использовать подзапросы в SQL- операторах SELECT, INSERT, UPDATE и DELETE.

Оцените статью
bestprogrammer.ru
Добавить комментарий