第3章_关系数据库标准语言(SQL)_006_由元组关系演算到SQL Command_002_案例_03_以'数据库'和'JAVA'_教师姓名、编号为准,老师授课的4种选课情况
01:查询(至少)教授'数据库'和'JAVA'这两门课程的老师的姓名和编号(在老师教授的课程的课程编号集合中包含{'数据库'的编号, 'JAVA'的编号});
02:查询(至少)没有教授'数据库'和'JAVA'这两门课程中的一门的老师的姓名和编号(老师教授没有同时教授'数据库'和'JAVA');
03:查询(至少)教授了'数据库'和'JAVA'这两门课程中的一门的老师的姓名和编号;
04:查询没有教授'数据库'和'JAVA'这两门课程中的任意一门的老师的姓名和编号;
01_查询(至少)教授'数据库'和'JAVA'这两门课程的老师的姓名和编号(在老师教授的课程的课程编号集合中包含{'数据库'的编号, 'JAVA'的编号}) ===》
{new_t(2) |
∃t(
t(T) Λ
∀c(
c(C) Λ
(c.CN = '数据库' ∨ c.CN = 'JAVA')
→ ∃tc(
tc(TC) Λ
t.TNo = tc.TNo Λ
tc.CNo = c.CNo
)
) Λ
new_t[1] = t[1] Λ
new_t[2] = t[2]
)
}
经过化简得到:
{new_t(2) |
∃t(
¬【∃c(
(c.CN = '数据库' ∨ c.CN = 'JAVA') Λ
¬【∃tc(
t.TNo = tc.TNo Λ
tc.CNo = c.CNo
)】
)】
)
}
按照简化后的“元组关系演算式”得出SQL语句:
SELECT TNo, TN
FROM T
WHERE
NOT EXISTS (
SELECT *
FROM C
WHERE
(C.CN = '数据库' OR C.CN = 'JAVA') AND
NOT EXISTS (
SELECT *
FROM TC
WHERE
T.TNo = TC.TNo AND
TC.CNo = C.CNo
)
)
02_查询(至少)没有教授'数据库'和'JAVA'这两门课程中的一门的老师的姓名和编号(老师教授没有同时教授'数据库'和'JAVA') ===》
{new_t(2) |
∃t(
t(T) Λ
∃c(
c(C) Λ
(c.CN = '数据库' ∨ c.CN = 'JAVA') Λ
∀tc ¬(
tc(TC) Λ
t.TNo = tc.TNo Λ
tc.CNo = c.CNo
)
) Λ
new_t[1] = t[1] Λ
new_t[2] = t[2]
)
}
经过化简得到:
{new_t(2) |
∃t(
∃c(
(c.CN = '数据库' ∨ c.CN = 'JAVA') Λ
¬【∃tc(
t.TNo = tc.TNo Λ
tc.CNo = c.CNo
)】
)
)
}
按照简化后的“元组关系演算式”得出SQL语句:
SELECT TNo, TN
FROM T
WHERE
EXISTS (
SELECT *
FROM C
WHERE
(C.CN = '数据库' OR C.CN = 'JAVA') AND
NOT EXISTS (
SELECT *
FROM TC
WHERE
T.TNo = TC.TNo AND
TC.CNo = C.CNo
)
)
03_查询(至少)教授了'数据库'和'JAVA'这两门课程中的一门的老师的姓名和编号 ===》
{new_t(2) |
∃t(
t(T) Λ
∃c(
c(C) Λ
(c.CN = '数据库' ∨ c.CN = 'JAVA') Λ
∃tc (
tc(TC) Λ
t.TNo = tc.TNo Λ
tc.CNo = c.CNo
)
) Λ
new_t[1] = t[1] Λ
new_t[2] = t[2]
)
}
经过化简得到:
{new_t(2) |
∃t(
∃c(
(c.CN = '数据库' ∨ c.CN = 'JAVA') Λ
∃tc (
t.TNo = tc.TNo Λ
tc.CNo = c.CNo
)
)
)
}
按照简化后的“元组关系演算式”得出SQL语句:
SELECT TNo, TN
FROM T
WHERE
EXISTS (
SELECT *
FROM C
WHERE
(C.CN = '数据库' OR C.CN = 'JAVA') AND
EXISTS (
SELECT *
FROM TC
WHERE
T.TNo = TC.TNo AND
TC.CNo = C.CNo
)
)
04_查询没有教授'数据库'和'JAVA'这两门课程中的任意一门的老师的姓名和编号 ===》
{new_t(2) |
∃t(
t(T) Λ
∀c(
c(C) Λ
(c.CN = '数据库' ∨ c.CN = 'JAVA')
→ ∀tc ¬(
tc(TC) Λ
t.TNo = tc.TNo Λ
tc.CNo = c.CNo
)
) Λ
new_t[1] = t[1] Λ
new_t[2] = t[2]
)
}
经过化简得到:
{new_t(2) |
∃t(
¬【∃c(
(c.CN = '数据库' ∨ c.CN = 'JAVA') Λ
∃tc (
t.TNo = tc.TNo Λ
tc.CNo = c.CNo
)
)】
)
}
按照简化后的“元组关系演算式”得出SQL语句:
SELECT TNo, TN
FROM T
WHERE
NOT EXISTS (
SELECT *
FROM C
WHERE
(C.CN = '数据库' OR C.CN = 'JAVA') AND
EXISTS (
SELECT *
FROM TC
WHERE
T.TNo = TC.TNo AND
TC.CNo = C.CNo
)
)