1. 关系运算概述
关系运算是对关系(表)进行操作的一种数学运算。它是集合论中的运算符在关系代数中的扩展。关系运算主要是用在关系型数据库(RDBMS)中,以对数据表进行查询、合并等业务操作。
在关系运算中,关系是通过数学意义上的二维表格表示的。关系的一行被称为一个元组,一列被称为一个属性。元组和属性是关系中重要的概念。关系运算分为两大类:基本运算和扩展运算。
2. 基本运算
2.1 选择运算
选择(Selection)运算是选择满足指定条件的元组,其结果是一个元组集合。条件是指关系的某一个属性,可以是数值型、字符型等类型。选择运算使用的符号是σ。
例如,查找名字为张三的人的信息:
SELECT * FROM student WHERE name='张三';
2.2 投影运算
投影(Projection)运算是选择部分属性,将这些属性构成一个新的关系。投影运算使用的符号是π。
例如,查找学生的姓名和年龄:
SELECT name, age FROM student;
2.3 连接运算
连接(Join)运算是将两个关系的元组进行匹配,将满足条件的元组连接成一个新的关系。连接运算使用的符号是?。
例如,查找选修了计算机基础和数据库的学生信息:
SELECT s.id, s.name, s.age
FROM student s, course c, sc
WHERE s.id=sc.sid AND c.id=sc.cid AND c.name='计算机基础'
AND s.id IN (SELECT s.id
FROM student s, course c, sc
WHERE s.id=sc.sid AND c.id=sc.cid AND c.name='数据库');
2.4 差运算
差(Difference)运算是找出关系中在一个指定属性上不属于另一个关系的元组。差运算使用的符号是?。
例如,查找选修了课程但是没有通过课程的所有学生:
SELECT s.*
FROM student s
WHERE s.id NOT IN (SELECT sc.sid
FROM sc
WHERE sc.score >= 60);
3. 扩展运算
3.1 并运算
并(Union)运算是将两个关系合并为一个关系,新关系的元组包含两个关系的元组。并运算使用的符号是∪.
例如,查找选修了计算机基础或数据库的所有学生:
SELECT s.*
FROM student s, course c, sc
WHERE s.id=sc.sid AND c.id=sc.cid AND (c.name='计算机基础'
OR c.name='数据库');
3.2 交运算
交(Intersect)运算是查找两个关系中都存在的元组。交运算使用的符号是∩。
例如,查找既选修了计算机基础又选修了数据库的学生:
SELECT s.*
FROM student s, course c, sc
WHERE s.id=sc.sid AND c.id=sc.cid AND c.name='计算机基础'
AND s.id IN (SELECT s.id
FROM student s, course c, sc
WHERE s.id=sc.sid AND c.id=sc.cid AND c.name='数据库');
3.3 自然连接运算
自然连接(Natural Join)运算是在两个关系的基础上,对它们的共有属性相等的元组进行匹配,然后删除重复的属性列。自然连接运算没有使用符号。
例如,查找选修了计算机基础和数据库的学生信息:
SELECT s.id, s.name, s.age, c.name
FROM student s NATURAL JOIN sc NATURAL JOIN course c
WHERE c.name='计算机基础' OR c.name='数据库';
3.4 分组运算
分组(Group)运算是将关系中的元组按照一个或多个属性进行分组,然后对每一组进行聚集函数的操作得到结果。分组运算使用的符号是γ。
例如,查找每个学生选修的课程数量:
SELECT s.id, s.name, COUNT(DISTINCT sc.cid) AS num
FROM student s, sc
WHERE s.id=sc.sid
GROUP BY s.id, s.name;
3.5 排序运算
排序(Order)运算是将关系中的元组按照一个或多个属性进行排序,分为升序和降序。排序运算使用的符号是ORDER BY。
例如,查找所有学生信息按照年龄降序排序:
SELECT * FROM student ORDER BY age DESC;
4. 总结
本文介绍了关系运算的基本和扩展运算,包括选择、投影、连接、差、并、交、自然连接、分组和排序运算等。在实际的数据库查询中,应灵活运用各种运算,以便提高查询效率和精确度。