在 SQL 中,子查询是一个查询嵌套在另一个查询中的查询,也被称为内部查询。子查询可以用来创建更复杂的查询,从而实现更高级的数据检索和分析。
子查询的分类
子查询可以根据其位置和返回结果的数量和数据类型分为以下三种类型:
- 标量子查询:返回一个单一值的查询,通常用于作为 WHERE 子句或 SELECT 子句中的表达式。例如:
SELECT first_name, last_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
在这个例子中,子查询 (SELECT AVG(salary) FROM employees)
返回平均工资,然后在 WHERE 子句中将其与员工的薪资进行比较。
- 列子查询:返回一个列值列表的查询,通常用于 IN 或 EXISTS 子句中。例如:
SELECT product_name, product_price
FROM products
WHERE product_category_id IN (SELECT category_id FROM categories WHERE category_name = 'Electronics');
在这个例子中,子查询 (SELECT category_id FROM categories WHERE category_name = 'Electronics')
返回电子类别的 ID,然后在 WHERE 子句中将其与产品表中的产品类别 ID 进行比较。
- 表子查询:返回一个表格作为查询结果的查询,通常用于 FROM 子句中的表达式。例如:
SELECT c.customer_name, o.order_number, o.order_date
FROM customers c
JOIN (SELECT order_id, order_number, order_date, customer_id FROM orders) o
ON c.customer_id = o.customer_id;
在这个例子中,子查询 (SELECT order_id, order_number, order_date, customer_id FROM orders)
返回订单表的一部分,然后将其与客户表进行连接,以获取每个客户的订单信息。