关系代数(Relational Algebra)是关系数据库的理论基础,而 SQL 是关系数据库的实际操作语言。二者在表达能力上是对应的,因此关系代数表达式可以系统地转换为 SQL 语句。下面从基本运算到复杂运算说明转换方法,并给出示例。
关系代数:
σ_{条件}(R)
SQL:
SELECT *
FROM R
WHERE 条件;
✅ 示例:
σ_{age > 20}(Student)
SELECT *
FROM Student
WHERE age > 20;
关系代数:
π_{属性1, 属性2}(R)
SQL:
SELECT 属性1, 属性2
FROM R;
✅ 示例:
π_{sname, age}(Student)
SELECT sname, age
FROM Student;
⚠️ 注意:SQL 默认允许重复,若需去重:
SELECT DISTINCT sname, age FROM Student;
关系代数:
R × S
SQL:
SELECT *
FROM R, S;
或(推荐写法):
SELECT *
FROM R CROSS JOIN S;
R ⋈_{条件} S
SELECT *
FROM R, S
WHERE 条件;
或:
SELECT *
FROM R JOIN S ON 条件;
R ⋈ S (自然连接)
SELECT *
FROM R NATURAL JOIN S;
或显式写:
SELECT R.a, R.b, S.c
FROM R JOIN S ON R.key = S.key;
R ∪ S
SELECT * FROM R
UNION
SELECT * FROM S;
R − S
SELECT * FROM R
EXCEPT -- MySQL用 NOT IN / NOT EXISTS
SELECT * FROM S;
(MySQL 不支持 EXCEPT,常用:)
SELECT * FROM R
WHERE (a,b) NOT IN (SELECT a,b FROM S);
R ∩ S
SELECT * FROM R
INTERSECT
SELECT * FROM S;
(MySQL 用 JOIN 或 IN 实现)
ρ_{新名}(R)
SQL 中用别名:
SELECT *
FROM R AS 新名;
关系代数扩展形式:
γ_{分组属性; 聚合函数}(R)
SQL:
SELECT 分组属性, 聚合函数
FROM R
GROUP BY 分组属性;
✅ 示例:
γ_{dept; AVG(salary)}(Employee)
SELECT dept, AVG(salary)
FROM Employee
GROUP BY dept;
关系代数:
σ_{条件}(γ_{...}(R))
SQL:
SELECT ...
FROM R
GROUP BY ...
HAVING 条件;
π_{sname}(
σ_{age > 20}(
Student ⋈ Enrolls ⋈ Course
)
)
SELECT DISTINCT s.sname
FROM Student s
JOIN Enrolls e ON s.sid = e.sid
JOIN Course c ON e.cid = c.cid
WHERE s.age > 20;
如果你有具体的关系代数表达式,我可以直接帮你转成 SQL。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。