Subqueries
Nested queries for complex data retrieval and filtering
#subqueries #nested #in #exists
Subqueries
Use subqueries to perform complex queries by nesting SELECT statements.
Subquery in WHERE Clause
-- Find products more expensive than average
SELECT product_id, name, price
FROM products
WHERE price > (SELECT AVG(price) FROM products);
Subquery with IN
-- Find users who have placed orders
SELECT user_id, name, email
FROM users
WHERE user_id IN (
SELECT DISTINCT user_id
FROM orders
);
Subquery with NOT IN
-- Find users who haven't placed orders
SELECT user_id, name, email
FROM users
WHERE user_id NOT IN (
SELECT DISTINCT user_id
FROM orders
);
Subquery with EXISTS
-- Find products that have been ordered
SELECT product_id, name, price
FROM products p
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.product_id = p.product_id
);
Subquery with NOT EXISTS
-- Find products never ordered
SELECT product_id, name, price
FROM products p
WHERE NOT EXISTS (
SELECT 1
FROM orders o
WHERE o.product_id = p.product_id
);
Correlated Subquery
-- Find products with above-category-average price
SELECT p1.product_id, p1.name, p1.price, p1.category
FROM products p1
WHERE p1.price > (
SELECT AVG(p2.price)
FROM products p2
WHERE p2.category = p1.category
);
Subquery in FROM Clause (Derived Table)
-- Get average order value by user
SELECT u.user_id, u.name, avg_order.avg_total
FROM users u
JOIN (
SELECT user_id, AVG(total) as avg_total
FROM orders
GROUP BY user_id
) avg_order ON u.user_id = avg_order.user_id;
Subquery in SELECT Clause
-- Get user with order count
SELECT
u.user_id,
u.name,
(SELECT COUNT(*)
FROM orders o
WHERE o.user_id = u.user_id) as order_count
FROM users u;
Multiple Row Subquery with ANY
-- Find products cheaper than ANY premium product
SELECT product_id, name, price
FROM products
WHERE price < ANY (
SELECT price
FROM products
WHERE category = 'Premium'
);
Multiple Row Subquery with ALL
-- Find products cheaper than ALL premium products
SELECT product_id, name, price
FROM products
WHERE price < ALL (
SELECT price
FROM products
WHERE category = 'Premium'
);
Complex Nested Subquery
-- Find users whose total spending exceeds average
SELECT u.user_id, u.name
FROM users u
WHERE (
SELECT SUM(o.total)
FROM orders o
WHERE o.user_id = u.user_id
) > (
SELECT AVG(total_spending)
FROM (
SELECT user_id, SUM(total) as total_spending
FROM orders
GROUP BY user_id
) user_totals
);
Discover another handy tool from EditPDF.pro