MySQL------ 子查询

一、子查询

含义:出现在其他语句中的select语句,称为子查询或内查询

分类:按子查询出现的位置:

    select后面:仅仅支持标量子查询

    from后面:支持表子查询

    where或having后面:标量子查询(单行)、列子查询(多行)、行子查询

    exists后面(相关子查询):表子查询

      按结果集的行列数不同:标量子查询(结果集只有一行一列)、列子查询(结果集只有一列多行)、行子查询(结果集有一行多列)、表子查询(结果集一般为多行多列)

一.1、where或having后面

1、标量子查询(单行)

  #案例1:谁的工资比Abel高?
    SELECT first_name,last_name,salary
    FROM employees
    WHERE salary>(
    SELECT salary
    FROM employees
    WHERE last_name = ‘Abel‘ );

#非法使用标量子查询 

   标量子查询的自身所得到的结果要正确的,值为单一的,否则都造成了非法标量子查询

2、列子查询(多行)

  #案例1:返回loaction_id 是1400或1700的部门中的所有员工姓名

  SELECT department_id,last_name
    FROM employees
    WHERE department_id IN(
    SELECT DISTINCT department_id
    FROM departments
    WHERE location_id IN(1400,1700)
    )
    ORDER BY department_id ASC;

3、行子查询

  #案例:查询员工编号最小并且工资最高的员工信息
    SELECT *
    FROM employees
    WHERE (employee_id,salary) = (
    SELECT MIN(department_id),MAX(salary)
    FROM employees );

特点:

  ①子查询放在小括号内

  ②子查询一般放在条件的右侧

  ③标量子查询,一般搭配着单行操作符使用(< > <= >= <>)

           列子查询,一般搭配着多行操作符使用(in、 any/some、 all)

④子查询的执行优先于主查询执行,主查询的条件用到了子查询的

相关推荐