在 SQL 中,子查询(Subquery)是指嵌套在主查询中的查询语句。子查询可以用于多种应用场景,以下是一些常见的例子:
- 过滤和比较数据:子查询可以用于过滤和比较数据,例如查找某个表中价格高于平均值的所有商品。
SELECT * FROM products WHERE price > (SELECT AVG(price) FROM products);
- 查找相关联的数据:子查询可以用于查找与另一个表相关联的数据,例如查找某个客户的所有订单。
SELECT * FROM orders WHERE customer_id = (SELECT id FROM customers WHERE name = 'John Doe');
- 查找最大或最小值:子查询可以用于查找表中的最大或最小值,例如查找销售额最高的产品。
SELECT * FROM products WHERE sales = (SELECT MAX(sales) FROM products);
- 查找前 N 个结果:子查询可以用于查找表中的前 N 个结果,例如查找销售额最高的前 3 个产品。
SELECT * FROM products ORDER BY sales DESC LIMIT 3;
- 分组和聚合数据:子查询可以用于对数据进行分组和聚合操作,例如查找每个类别的平均价格。
SELECT category, AVG(price) as avg_price FROM products GROUP BY category;
- 使用 EXISTS 和 NOT EXISTS:子查询可以与 EXISTS 和 NOT EXISTS 一起使用,用于检查某个条件是否存在于子查询中。
SELECT * FROM customers WHERE EXISTS (SELECT 1 FROM orders WHERE orders.customer_id = customers.id);
这些只是子查询在 SQL 中的一些应用场景,实际上子查询可以应用于更复杂的查询和操作。在使用子查询时,需要注意性能优化和查询效率,以确保查询能够高效地执行。