SELECT 姓名
FROM XS
WHERE 借书证号 IN
(SELECT 借书证号
FROM JY
WHERE ISBN ='978-7-111-21382-6'
)
注意:
EX:查询与“李明”在同一个专业的学生信息
(1)先查询李明的专业:
SELECT 专业
FROM XS
WHERE 姓名='李明'
(2)该查询结果为“计算机”。在查询“计算机”专业的学生信息:
SELECT 借书证号,姓名,性别,出生时间,借书量
FROM XS
WHERE 专业='计算机'
构造嵌套查询语句如下:
SELECT 借书证号,姓名,性别,出生时间,借书量
FROM XS
WHERE 专业 IN
(SELECT 专业
FROM XS
WHERE 姓名='李明'
)
比较子查询是指父查询与子查询之间用比较运算符(<, <=, =, >, >=, !=, <>, !< 和 !>)进行关联。
SELECT 借书证号,姓名,性别,出生时间,借书量
FROM XS
WHERE 专业 =
(SELECT 专业
FROM XS
WHERE 姓名='李明'
)
EX:查找其他专业比所有通信工程专业的同学年龄都小的学生:
SELECT *
FROM XS
WHERE 专业<>'通信工程' AND 出生时间>ALL
(SELECT 出生时间
FROM XS
WHERE 专业='通信工程'
)
EX:查找其他专业比所有计算机专业某个学生年龄小的学生:
(1)首先找出“计算机”专业所有学生的出生时间,构成一个集合;然后找出所有不是“计算机”专业且出生时间比上述集合中任一个值小的学生。
SELECT *
FROM XS
WHERE 专业<>'计算机' AND 出生时间>ANY
(SELECT 出生时间
FROM XS
WHERE 专业='计算机'
)
(2)首先查询找出“计算机”专业中“出生时间”最小值,然后再找出非“计算机”专业且“出生时间”值大于上述最小值的学生。
SELECT *
FROM XS
WHERE 专业<>'计算机' AND 出生时间>
(SELECT (MIN)出生时间
FROM XS
WHERE 专业='计算机'
)
注意: 通常,使用聚合函数实现子查询比直接用ANY 或 ALL 查询效率更高。
EXISTS谓词用于测试子查询的结果是否为空值,若子查询的结果集不为空,则EXISTS 返回TRUE,否则返回FALSE 。
EX:查找借阅了ISBN为978-7-111-21382-6图书的学生姓名。
SELECT 姓名
FROM XS
WHERE EXISTS
(SELECT *
FROM JY
WHERE XS.借书证号=JY.借书证号 AND ISBN='978-7-111-21382-6'
)