Найти в Дзене
CODERIKK

🔹 Подзапросы в SQL

🔹 Где можно ставить subquery и зачем? 🔸 subquery в SQL (Structured Query Language) позволяет вложить один запрос в другой, чтобы вычислить критерий или агрегат без множества временных таблиц. 🔸 В WHERE используются для фильтрации по набору (IN/EXISTS) когда условие зависит от другой таблицы. 🔸 В FROM — как derived table (временная таблица) для дальнейшей агрегации. В SELECT — скалярный subquery для одного вычисленного значения. WITH (CTE: Common Table Expression) делает такие шаги читаемыми и переиспользуемыми. 🔸 Performance: субзапросы удобны, но JOIN или WITH часто дают лучший план. Сравнивайте план выполнения и заменяйте subquery на JOIN, если видите тормоза. -- WHERE SELECT * FROM orders WHERE customer_id IN (SELECT id FROM customers WHERE vip=1); -- FROM SELECT t.customer_id, SUM(t.amount) FROM (SELECT customer_id, amount FROM orders) AS t GROUP BY t.customer_id; -- SELECT scalar SELECT id, (SELECT COUNT(*) FROM orders o WHERE o.customer_id=c.id) AS orders_cnt FROM cus

🔹 Подзапросы в SQL

🔹 Где можно ставить subquery и зачем?

🔸 subquery в SQL (Structured Query Language) позволяет вложить один запрос в другой, чтобы вычислить критерий или агрегат без множества временных таблиц.

🔸 В WHERE используются для фильтрации по набору (IN/EXISTS) когда условие зависит от другой таблицы.

🔸 В FROM — как derived table (временная таблица) для дальнейшей агрегации. В SELECT — скалярный subquery для одного вычисленного значения. WITH (CTE: Common Table Expression) делает такие шаги читаемыми и переиспользуемыми.

🔸 Performance: субзапросы удобны, но JOIN или WITH часто дают лучший план. Сравнивайте план выполнения и заменяйте subquery на JOIN, если видите тормоза.

-- WHERE

SELECT * FROM orders WHERE customer_id IN (SELECT id FROM customers WHERE vip=1);

-- FROM

SELECT t.customer_id, SUM(t.amount) FROM (SELECT customer_id, amount FROM orders) AS t GROUP BY t.customer_id;

-- SELECT scalar

SELECT id, (SELECT COUNT(*) FROM orders o WHERE o.customer_id=c.id) AS orders_cnt FROM customers c;

📚 Используйте WITH для читаемости; тестируйте performance и меняйте на JOIN при необходимости.

#CODERIKK #Sql #Middle

➡️ Мы в Telegram - Сетке - Дзен

Буду рад вашей реакции здесь⬇️