文章目录
数据库第二、三章重难点
单个not exists的引入
1. 检索不学C2课程的学生姓名与年龄
不学C2的学生,即从学生表中除去学了C2课程的学生
/*方法1:使用not in*/
SELECT SNAME, AGE
FROM S
WHERE S# NOT IN (
SELECT S#
FROM SC
WHERE C# = 'C2')
/*方法2:使用not exists*/
SELECT SNAME, AGE
FROM S
WHERE NOT EXISTS (
SELECT *
FROM SC
WHERE SC.S#=S.S# AND C# = 'C2')
两个not exists的嵌套使用
1. 检索学习全部课程的学生姓名
[解题思路]
在表S中找学生,在C表中不存在一门课程,这个学生没有学
SELECT SNAME
FROM S
WHERE NOT EXISTS( /*C表中不存在一门课程*/
SELECT *
FROM C
WHERE NOT EXISTS( /*该学生没有学*/
SELECT *
FROM SC
WHERE SC.S#=S.S# AND SC.C#=C.C#))
/* not exists中的语句为假时,整个语句才为真*/
除法
1. R/ (S在C上的投影)
/*R(A,B,C) S(A,B,C)*/
SELECT A, B
FROM R X
WHERE NOT EXISTS(
SELECT *
FROM S
WHERE NOT EXISTS(
SELECT *
FROM R Y
WHERE X.A=Y.A AND X.B=Y.B AND Y.C=S.C))
笛卡尔积
1. R*S
SELECT * FROM R,S