文章目录

数据库第二、三章重难点

单个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