|
WHERE子句中参与比较的表达式还可以是由SELECT-FROM-WHERE结构组成的查询块,称为子查询或嵌套查询。连接条件本身可能是一个递归的
SQL 查询,而且可以嵌套多层。格式如下:
SELECT … FROM …
WHERE … =
(SELECT … FROM … WHERE … )
子查询的结果可以是单个数据值,元组的属性值,或一个新的关系表。子查询有多个返回值时,用比较符:
● (IN或NOT IN)R :是或不是R中的一个值
● (<>,>,< )ALL R: 指'不等''大于'或'小于'R中的所有值。
● (=,>,< )ANY R: 指至少'等于''大于'或'小于'R中的一个值。
|
例1,列出与李楷同班的同学的全部信息:
SELECT *
FROM STUDENT
WHERE sclass =( SELECT sclass
FROM STUDENT
WHERE sname="李楷");
输出结果如下:
sno sname ssex sage sclass
J20001 李 楷 m 19 JS2001
J20002 张 会 f 20 JS2001
J20003 王 者 m 20 JS2001
|
|
例2,查找高于职工平均工资的职工信息:
SELECT *
FROM emptable
WHERE salary >( SELECT AVG(salary)
FROM emptable); |
|
例3.查询本学期选课超过8门的学生人数,没有成绩的选课表示本学期正在选修的课程。
SELECT COUNT(*)
FROM student
WHERE sno IN 注:选课>8的学号集 ( SELECT sno 选课的学号 FROM sc
WHERE grade IS NULL
GROUP BY sno 注:按学号分组 HAVING COUNT(*) > 8); |
|
|