1、子查询的位置与要求
1.表子查询:N行N列 常用于from后面,需要命名
2.行子查询: 1行N列
3.列子查询:N行1列
4.标量子查询:一行一列,一个标量值
2、注意:
1.子查询结果只要是多列,肯定在 FROM 后面作为表
2.子查询作为表需要取别名,否则这张表没有名称则无法访问表中的字段 (这个相当重要,不加的话sql是运行不了的)
3.select后面的子查询使用,只能是标量查询
3、举例说明:
1、多列子查询:
SELECT avg_tab.avg_sal, department_id, jg.grade_level
FROM (
SELECT AVG(salary) avg_sal,department_id
FROM employees e
GROUP BY department_id
) AS avg_tab
INNER JOIN job_grades jg
ON avg_tab.avg_sal BETWEEN jg.`lowest_sal` AND jg.`highest_sal`;
2、标量子查询(使用在select后)
SELECT d.*,
(SELECT COUNT(*) FROM employees
WHERE employees.`department_id`=d.department_id)
FROM departments d;