第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
)
)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
· 用 C# 插值字符串处理器写一个 sscanf