数据库中的自然连接、选择、投影

本文介绍了关系数据库中的三种基本运算:选择、投影和连接。选择运算是基于特定条件从表中筛选行;投影运算是从表中提取指定的列;连接运算则是将两个表根据给定条件组合在一起。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

选择(Selection)

选择是单目运算,其运算对象是一个表。该运算按给定的条件,从表中选出满足条件的行形成一个新表作为运算结果。
选择运算的记号为 σF(R)。
其中σ是选择运算符,下标F是一个条件表达式,R是被操作的表。

投影(Projection)

投影也是单目运算,该运算从表中选出指定的属性值组成一个新表,记为:ΠA(R)。
其中A是属性名(即列名)表,R是表名。

连接(JOIN)

把两个表中的行按着给定的条件拼接而形成的新表。
执行顺序:自然连接–>选取–>投影

### 数据库操作中的笛卡尔积、自然连接投影选择 #### 笛卡尔积 笛卡尔积是一种基本的关系运算,用于将两个关系 \( R \) 和 \( S \) 组合成一个新的关系。新关系中的每一行由来自 \( R \) 的一行和来自 \( S \) 的一行组合而成。如果 \( R \) 中有 \( m \) 行,\( S \) 中有 \( n \) 行,则结果集中会有 \( m \times n \) 行[^1]。 在 SQL 中,可以通过省略 `WHERE` 子句来实现笛卡尔积: ```sql SELECT * FROM R, S; ``` --- #### 自然连接 自然连接是在等值连接的基础上进一步去除重复的列(即公共属性)。它通过比较两个表之间的公共属性,并仅保留这些属性的一份副本[^1]。如果没有公共属性存在,则自然连接退化为普通的笛卡尔积[^3]。 以下是自然连接的一个简单例子: 假设有两个表 \( A \) 和 \( B \),其中它们有一个共同字段 `id`,则可以这样写: ```sql SELECT * FROM A NATURAL JOIN B; ``` 或者更显式的方式: ```sql SELECT * FROM A INNER JOIN B ON A.id = B.id; ``` --- #### 投影 投影是从一个关系中选取某些特定的列形成新的关系的操作。这类似于表格数据处理中的“只显示几列”的功能[^3]。在 SQL 查询语句中,通常通过指定要提取的具体列名来进行投影: 例如,在表 `employees` 中获取员工的名字 (`name`) 和部门编号 (`dept_no`): ```sql SELECT name, dept_no FROM employees; ``` --- #### 选择 选择是对给定关系应用条件表达式的筛选过程,返回满足该条件的所有元组[^2]。此操作对应于 SQL 中的 `WHERE` 子句部分。 下面是一个简单的例子,展示如何从名为 `students` 的表中选出成绩大于等于90的学生记录: ```sql SELECT * FROM students WHERE score >= 90; ``` --- ### 结合实际场景的应用说明 为了更好地理解以上四种操作的实际用途,考虑如下情景:假设有两张表——学生表(`student`)和课程选修表(`course_selection`)。我们希望查询所有选择了物理课的学生姓名以及他们的学号。 - **第一步** 使用选择操作过滤出所涉及的课程; - **第二步** 执行自然连接关联两表基于学生的ID; - **第三步** 应用投影限定最终输出的内容仅为所需字段。 综合起来可得如下SQL命令形式: ```sql SELECT student.name, course_selection.student_id FROM student NATURAL JOIN course_selection WHERE course_selection.course_name='Physics'; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值