将关系代数运算(如选择、投影、连接、并、差、笛卡尔积等)转化为 SQL语句 是数据库学习的重要内容。下面是系统总结,包含常见运算及其对应的 SQL 写法。
✅ 1. 投影(π):选择列
关系代数:
π<列1,列2>(R)
SQL:
SELECT 列1, 列2 FROM R;
✅ 2. 选择(σ):选择行(加条件)
关系代数:
σ<条件>(R)
SQL:
SELECT * FROM R WHERE 条件;
示例:
σ salary > 5000 (Employee)
→
SELECT * FROM Employee WHERE salary > 5000;
✅ 3. 笛卡尔积(×)
关系代数:
R × S
SQL:
SELECT * FROM R, S;
-- 或
SELECT * FROM R CROSS JOIN S;
✅ 4. 连接(⨝):按条件连接两个关系
关系代数(等值连接):
R ⨝ R.a = S.b S
SQL:
SELECT * FROM R JOIN S ON R.a = S.b;
如果是自然连接(NATURAL JOIN),SQL 也有支持:
SELECT * FROM R NATURAL JOIN S;
✅ 5. 并(∪)
关系代数:
R ∪ S
SQL:
SELECT * FROM R
UNION
SELECT * FROM S;
要求列数、列类型一致。
✅ 6. 差(−)
关系代数:
R − S
SQL:
SELECT * FROM R
EXCEPT
SELECT * FROM S;
在某些数据库中(如 MySQL),没有
EXCEPT
,需要用LEFT JOIN + WHERE IS NULL
实现。
✅ 7. 交(∩)
关系代数:
R ∩ S
SQL:
SELECT * FROM R
INTERSECT
SELECT * FROM S;
有的数据库不支持
INTERSECT
,也可通过INNER JOIN
实现。
✅ 8. 重命名(ρ)
关系代数:
ρ S(a1, a2) (R)
SQL:
SELECT 列1 AS a1, 列2 AS a2 FROM R AS S;
✅ 总结:关系代数到 SQL 对照表
关系代数运算 | SQL 对应语句 |
---|---|
投影 π | SELECT 列 |
选择 σ | WHERE 条件 |
笛卡尔积 × | CROSS JOIN / 直接列出多个表 |
连接 ⨝ | JOIN … ON … |
自然连接 | NATURAL JOIN |
并 ∪ | UNION |
差 − | EXCEPT / NOT IN / LEFT JOIN |
交 ∩ | INTERSECT |
重命名 ρ | AS |
好的,我们通过一个具体的关系代数表达式,完整举例说明如何将其转换为 SQL 语句。
🧩 例子背景:两个关系
假设我们有两个表:
Student(sid, name, age, dept_id)
Department(dept_id, dept_name)
🎯 关系代数表达式:
查询计算机系(“Computer Science”)所有学生的学号和姓名。
关系代数写法:
π sid, name (σ dept_name = 'Computer Science' (Student ⨝ Student.dept_id = Department.dept_id Department))
✅ 转换为 SQL:
SELECT s.sid, s.name
FROM Student s
JOIN Department d ON s.dept_id = d.dept_id
WHERE d.dept_name = 'Computer Science';
🧠 分步解释:
步骤 | 关系代数 | SQL 表达式 |
---|---|---|
1. 连接 | Student ⨝ ... Department | JOIN Department d ON s.dept_id = d.dept_id |
2. 筛选 | σ dept_name = '...' (...) | WHERE d.dept_name = 'Computer Science' |
3. 投影(列筛选) | π sid, name (...) | SELECT s.sid, s.name |