文章标题关系数据库标准语言SQL-2

来源:互联网 发布:mac键盘灯怎么开 编辑:程序博客网 时间:2024/05/17 07:35

连接查询:涉及多个表的查询
连接谓词:用来连接两个表的条件

等值查询:
select Student.*,
SC.* from Student,SC
where Student.Sno = SC.Sno

嵌套查询:
select Sname from Student where Sno
in(select Sno from SC where Cno=‘2’);

ANY 大于子查询结果中的某个值
ALL 大于子查询结果中的所有值
< ANY 小于子查询结果中的某个值
< ALL 小于子查询结果中的所有值
= ANY 大于等于子查询结果中的某个值
= ALL 大于等于子查询结果中的所有值
<= ANY 小于等于子查询结果中的某个值
<= ALL 小于等于子查询结果中的所有值
= ANY 等于子查询结果中的某个值
=ALL 等于子查询结果中的所有值(通常没有实际意义)
!=(或<>)ANY 不等于子查询结果中的某个值
!=(或<>)ALL 不等于子查询结果中的任何一个值

查询其他系中比信息系任意一个(其中某一个)学生年龄小的学生姓名和年龄
SELECT Sname,Sage
FROM Student
WHERE Sage < ANY (SELECT Sage
FROM Student
WHERE Sdept= ’ IS ‘)
AND Sdept <> ’ IS ’ ;
对上述条件采用集函数查询那么效率会更高一点
SELECT Sname,Sage
FROM Student
WHERE Sage < ANY (SELECT MIN(Sage)
FROM Student
WHERE Sdept= ’ IS ‘)
AND Sdept <> ’ IS ’ ;

带有EXISTS谓词的子查询
查询至少选修了学生95002选修的全部课程的学生号码。
解题思路:
用逻辑蕴函表达:查询学号为x的学生,对所有的课程y,只要95002学生选修了课程y,则x也选修了y。
形式化表示:
用P表示谓词 “学生95002选修了课程y”
用q表示谓词 “学生x选修了课程y”
则上述查询为: (任意y) (如果p则q)
不存在这样的课程y,学生95002选修了y,而学生x没有选。
用NOT EXISTS谓词表示:

 SELECT DISTINCT Sno         FROM SC SCX         WHERE NOT EXISTS               (SELECT *                FROM SC SCY                WHERE SCY.Sno = ' 95002 '  AND                     NOT EXISTS                          (SELECT *                           FROM SC SCZ                           WHERE SCZ.Sno=SCX.Sno AND                                           SCZ.Cno=SCY.Cno));

集合查询:
并操作(UNION)
交操作(INTERSECT)
差操作(MINUS)

查询计算机科学系的学生及年龄不大于19岁的学生。
方法一:
SELECT *
FROM Student
WHERE Sdept= ‘CS’
UNION
SELECT *
FROM Student
WHERE Sage<=19;
方法二:
SELECT DISTINCT *
FROM Student
WHERE Sdept= ‘CS’ OR Sage<=19;

标准SQL中没有提供集合交操作,但可用其他方法间接实现。

查询计算机科学系的学生与年龄不大于19岁的学生的交集
本例实际上就是查询计算机科学系中年龄不大于19岁的学生
SELECT *
FROM Student
WHERE Sdept= ‘CS’ AND
Sage<=19;

查询选修课程1的学生集合与选修课程2的学生集合的交集
本例实际上是查询既选修了课程1又选修了课程2的学生
SELECT Sno
FROM SC
WHERE Cno=’ 1 ’ AND Sno IN
(SELECT Sno
FROM SC
WHERE Cno=’ 2 ‘);

标准SQL中没有提供集合差操作,但可用其他方法间接实现。

查询计算机科学系的学生与年龄不大于19岁的学生的差集。
本例实际上是查询计算机科学系中年龄大于19岁的学生
SELECT *
FROM Student
WHERE Sdept= ‘CS’ AND
Sage>19;

查询学生姓名与教师姓名的差集
本例实际上是查询学校中未与教师同名的学生姓名
SELECT DISTINCT Sname
FROM Student
WHERE Sname NOT IN
(SELECT Tname
FROM Teacher);

原创粉丝点击