子查询是嵌套在另一个 SELECT, INSERT, UPDATE, 或 DELETE查询的 SQL 查询。子查询可以在 WHERE 子句中、FROM 子句或 SELECT 列表中出现。
以下是一些使用 MySQL 子查询的常见示例:
1.在 WHERE 子句中使用子查询:
SELECT *
FROM Employees
WHERE salary > (SELECT AVG(salary) FROM Employees);
在这个例子中,我们从 Employees 表中选择工资高于平均工资的所有员工。
2.在 FROM 子句中使用子查询(也称为派生表):
SELECT e1.name
FROM (SELECT name, salary FROM Employees ORDER BY salary DESC LIMIT 1) AS e1
JOIN (SELECT name, salary FROM Employees ORDER BY salary ASC LIMIT 1) AS e2
ON e1.salary < e2.salary;
在这个例子中,我们创建了两个派生表 e1 和 e2,它们分别包含 Employees 表中薪水最高的记录和最低的记录,然后我们选择了只有当 e1 的薪水高于 e2 的薪水时的名字。
3.在 SELECT 列表中使用子查询:
SELECT
customer_name,
(SELECT COUNT(*) FROM orders WHERE orders.customer_id = customers.customer_id) AS orders_count
FROM customers;
在这个例子中,我们选择了客户的名字和该客户的订单数量。我们通过子查询来计算每个客户的订单数量。
注意:子查询的性能可能会受到影响,特别是在处理大型数据集时。在某些情况下,可以通过使用 JOIN 或其他方法重写子查询以提高性能。