元组运算详解及SQL示例
元组运算在关系数据库中是指对元组(表中的行)进行的各种操作。以下是主要的元组运算及其SQL实现示例:
1. 元组选择(Tuple Selection)
从关系中选择满足特定条件的元组。
-- 选择工资大于5000的员工
SELECT * FROM employees WHERE salary > 5000;
-- 选择部门为'IT'且工资大于6000的员工
SELECT * FROM employees
WHERE department = 'IT' AND salary > 6000;
2. 元组投影(Tuple Projection)
从关系中选择特定的属性(列)。
-- 选择所有员工的姓名和部门
SELECT name, department FROM employees;
-- 选择不同部门(去重)
SELECT DISTINCT department FROM employees;
3. 元组连接(Tuple Join)
将两个关系的元组基于相关条件组合起来。
-- 内连接:员工和部门表
SELECT e.name, e.salary, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;
-- 左外连接:显示所有员工,即使没有分配部门
SELECT e.name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;
4. 元组并集(Tuple Union)
合并两个关系的元组(去重)。
-- 合并全职和兼职员工
SELECT name, position FROM full_time_employees
UNION
SELECT name, position FROM part_time_employees;
5. 元组交集(Tuple Intersection)
找出两个关系中都存在的元组。
-- 找出既是全职又是兼职的员工
SELECT name FROM full_time_employees
INTERSECT
SELECT name FROM part_time_employees;
6. 元组差集(Tuple Difference)
找出在一个关系中存在但在另一个关系中不存在的元组。
-- 找出只是全职但不是兼职的员工
SELECT name FROM full_time_employees
EXCEPT
SELECT name FROM part_time_employees;
7. 元组排序(Tuple Ordering)
对元组进行排序。
-- 按工资降序排列员工
SELECT name, salary FROM employees
ORDER BY salary DESC;
-- 按部门升序,工资降序排列
SELECT name, department, salary FROM employees
ORDER BY department ASC, salary DESC;
8. 元组分组与聚合(Tuple Grouping and Aggregation)
对元组进行分组并计算聚合值。
-- 计算每个部门的平均工资
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department;
-- 计算每个部门工资最高的员工
SELECT department, MAX(salary) as max_salary
FROM employees
GROUP BY department;
9. 元组插入(Tuple Insertion)
向关系中添加新元组。
-- 插入一条新员工记录
INSERT INTO employees (id, name, department, salary)
VALUES (101, '张三', 'IT', 7500);
-- 从另一个表插入多条记录
INSERT INTO retired_employees
SELECT * FROM employees WHERE retirement_date IS NOT NULL;
10. 元组更新(Tuple Update)
修改关系中现有元组的值。
-- 给IT部门所有员工加薪10%
UPDATE employees
SET salary = salary * 1.1
WHERE department = 'IT';
-- 更新特定员工的部门
UPDATE employees
SET department = 'HR'
WHERE id = 101;
11. 元组删除(Tuple Deletion)
从关系中移除元组。
-- 删除工资低于3000的员工
DELETE FROM employees
WHERE salary < 3000;
-- 删除特定部门的员工
DELETE FROM employees
WHERE department = 'Finance';
这些SQL示例展示了关系数据库中常见的元组运算操作,涵盖了从简单查询到复杂数据操作的各种场景。