子查询(Subquery)是SQL查询中嵌套在另一个查询中的查询。子查询可以出现在SELECT、FROM、WHERE和HAVING子句中,用于进一步限制或定义主查询的结果集。以下是一些常见的子查询类型:
标量子查询(Scalar Subquery):
SELECT name FROM employees WHERE salary = (SELECT MAX(salary) FROM employees);列子查询(Column Subquery):
SELECT name FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');行子查询(Row Subquery):
SELECT name FROM employees WHERE (salary, department_id) = (SELECT MAX(salary), department_id FROM employees GROUP BY department_id);表子查询(Table Subquery):
SELECT e.name FROM (SELECT * FROM employees WHERE department_id = 10) AS e;相关子查询(Correlated Subquery):
SELECT name FROM employees e WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id);EXISTS子查询:
SELECT name FROM employees e WHERE EXISTS (SELECT 1 FROM projects p WHERE p.employee_id = e.id);NOT EXISTS子查询:
SELECT name FROM employees e WHERE NOT EXISTS (SELECT 1 FROM projects p WHERE p.employee_id = e.id);IN子查询:
SELECT name FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE active = 1);NOT IN子查询:
SELECT name FROM employees WHERE department_id NOT IN (SELECT department_id FROM departments WHERE active = 0);联合子查询(Union Subquery):
SELECT name FROM employees WHERE department_id = 10 UNION SELECT name FROM contractors WHERE department_id = 10;这些子查询类型可以根据需要组合使用,以实现复杂的查询逻辑。在实际应用中,选择合适的子查询类型可以提高查询效率和可读性。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。