MySQL 嵌套查询

概念

  1. 什么是嵌套查询?简单说就是一个查询语句中包含着另一个查询语句。
  2. 子查询返回值有几种可能?3种,分别是返回空数据、返回1条数据、返回多条数据。不同的返回值用不同的关键字连接子查询。
  3. 子查询写在哪里?写在外层查询中 where 的后面。

in 子查询

语法

1
2
3
4
select * from 表1
where 公共字段 in (
select 公共字段 from 表2 where 查询条件
)

知识点

  1. 当子查询的返回值有多条数据时,可以用 in 关键字判断公共字段是否在子查询的返回值里。
  2. 如果子查询的返回值只有一条记录,可以使用 = 取代 in

习题

  1. 查询李勇同学所选课程的课程号及成绩。

    1
    2
    3
    select * from sc where sno = (
    select sno from student where sname = '李勇'
    );
  2. 查询姓“王”的学生所学的课程名称。

    1
    2
    3
    4
    5
    select cname from course where cno in (
    select cno from sc where sno in (
    select sno from student where sname like '%王%'
    )
    )

比较子查询

语法

1
2
3
4
select * from 表1
where 字段 关系运算符 (
select 字段 from 表2 where 查询条件
)

知识点

  1. 关键字 All:表达式要与子查询结果集中的每个值都进行比较,当表达式与每个值都满足比较的关系时.才返回TRUE,否则返回FALSE。
  2. 关键字 SOME 或 ANY 是同义词,表示表达式只要与子查询结果集中的某个值满足比较的关系时,就返回TRUE,否则返回FALSE。
  3. 上面这几个关键字相当于逻辑元算中的 and 和 or。

习题

  1. 查询学号比“刘晨”同学大,而出生日期比她小的学生姓名。

  2. 查询出生日期大于所有女同学出生日期的男同学的姓名及系别。