DQL---子查询

    技术2022-07-11  79

    子查询

    一、含义二、分类1.按出现的位置2.按结果集的行列 三、示例where后面标量子查询使用where后面列子查询使用select后面的子查询使用

    一、含义

    嵌套在其他语句内部的select语句称为子查询或内查询。 外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多。 外面如果为select语句,则此语句称为外查询或主查询。

    二、分类

    1.按出现的位置

    select后面:仅仅支持标量子查询 from后面:表子查询、 where或having后面:标量子查询、列子查询、行子查询 exists后面:标量子查询、列子查询、行子查询、表子查询

    2.按结果集的行列

    标量子查询(单行子查询):结果集为一行一列 列子查询(多行子查询):结果集为多行一列 行子查询:结果集为一行多列或多行多列 表子查询:结果集为多行多列

    三、示例

    where后面标量子查询使用

    查询最低工资的员工姓名和工资

    ①查询最低工资

    SELECT MIN(salary) FROM empoloyees;

    ②查询员工的姓名和工资,要求工资=①

    SELECT last_name,salary FROM employees WHERE salary=( SELECT MIN(salary) FROM employees );

    where后面列子查询使用

    使用多行比较操作符 IN / NOT IN:等于列表中的任意一个 ANY / SOME:和子查询返回的某一个值比较 ALL:和子查询返回的所有值比较

    查询 location_id是1400或1700的部门中的所有员工姓名

    ①查询 location_id是1400或1700的部门编号

    SELECT DISTINCT department_id FROM departments WHERE location_id IN (1400,1700)

    ②查询员工姓名,要求部门号是①列表中的某一个

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

    select后面的子查询使用

    查询每个部门的员工个数

    SELECT d.*,( SELECT COUNT(*) FROM employees e WHERE e.department_id = d.department_id ) 个数 FROM departments d;
    Processed: 0.010, SQL: 9