第3章_关系数据库标准语言(SQL)_006_由元组关系演算到SQL Command_002_案例_04_以全部学生为准,课程被选的4种选课情况(只列举出2种)
01:查询被全校学生选修的课程的课程编号和课程名;
02_查询至少有一个学生没有选的课程的课程编号和课程名(没有被全部学生选的课程);
01_查询被全校学生选修的课程的课程编号和课程名 ===》
{new_c(2) |
∃c (
c(C) Λ
∀s (
s(S)
→ ∃sc (
sc(SC) Λ
sc.SNo = s.SNo Λ
sc.CNo = c.CNo
)
)
new_c[1] = c[1] Λ
new_c[2] = c[2]
)
}
经过化简得到:
{new_c(2) |
∃c (
¬【∃s (
¬【∃sc (
sc.SNo = s.SNo Λ
sc.CNo = c.CNo
)】
)】
)
}
按照简化后的“元组关系演算式”得出SQL语句:
SELECT CNo, CN
FROM C
WHERE
NOT EXISTS (
SELECT *
FROM S
WHERE
NOT EXISTS (
SELECT *
FROM SC
WHERE
SC.CNo = C.CNo AND
SC.SNo = S.SNo
)
)
02_查询至少有一个学生没有选的课程的课程编号和课程名(没有被全部学生选的课程) ===》
{new_c(2) |
∃c (
c(C) Λ
∃s (
s(S) Λ
∀sc ¬(
sc(SC) Λ
sc.SNo = s.SNo Λ
sc.CNo = c.CNo
)
)
new_c[1] = c[1] Λ
new_c[2] = c[2]
)
}
经过化简得到:
{new_c(2) |
∃c (
∃s (
¬【∃sc (
sc.SNo = s.SNo Λ
sc.CNo = c.CNo
)】
)
)
}
按照简化后的“元组关系演算式”得出SQL语句:
SELECT CNo, CN
FROM C
WHERE
EXISTS (
SELECT *
FROM S
WHERE
NOT EXISTS (
SELECT *
FROM SC
WHERE
SC.CNo = C.CNo AND
SC.SNo = S.SNo
)
)
注释:其他的就和前面的几个实例差不多,不一一举例了。