My SQL学习笔记_子查询
交叉连接=笛卡尔乘积
子查询:出现在其他语句中的select语句,称为子查询或者内查询,外部的查询语句称为主查询或外查询。
分类:子查询出现的位置:
1、select 后面
仅仅支持标量子查询
2、from后面
支持表子查询
3、where或having后面(重点)
标量子查询、列子查询
4、exists后面
表子查询
按结果集的行列数不同:
标量子查询(结果集只有一行一列)
列子查询(结果集有一列多行)
行子查询(结果集有一行多列)
表子查询(结果集一般为多行多列)
一、where或having后面
子查询放小括号中,子查询一般放在条件的右侧,标量子查询,一般搭配着单行操作符使用,>、<、>=,=<,=,<>,子查询优先顺序高于主查询
列子查询,一般搭配着多行操作符使用。
1、标量子查询(单行子查询)
2、列子查询:关键字in、not in、any、all、some
3、行子查询:
SELECT EMPLOYEES
FROM EMPLOUEES
WHERE (EMPLOYEE_ID,SALARY) = (
SELECT MIN(EMPLOYEE_ID),MAX(SALARY)
FROM EMPLOYEES)
二、放在select后,仅仅支持标量子查询
查询每个部门的员工个数
SELECT D.*,(SELECT COUNT(*)
FROM EMPLOYEES E
WHERE E.DEPERTMENT_ID = DEPARTMENT_ID
)
FROM DEPARTMENT D;
三、from后面
将子查询结果充当一张表,必须起别名
查询每个部门的平均工资的工资等级
SELECT AG_DEP.*,G.GRADE_LEVEL
FROM (
SELECT AVG(SALARY) AG,DEPSRTMENT_ID
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
)AG_DEP
INNER JOIN JOB_GRADES G
ON AG.DEP.AG BETWEEN LOWEST_SAL AND HIGHT_SAL;
四、exists后面(相关子查询)
exists(完整的查询语句)
结果1或0
浙公网安备 33010602011771号