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

 

 

posted @ 2020-11-09 23:47  puffffff  阅读(192)  评论(0)    收藏  举报