SQL中的连接操作

63次阅读
没有评论

共计 3655 个字符,预计需要花费 10 分钟才能阅读完成。

本篇内容主要讲解“SQL 中的连接操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“SQL 中的连接操作”吧!

利用连接操作,可以根据表与表之间的逻辑联系从两个或多个表中查询数据。

早期的 SQL 版本,实现连接方法是在 from 子句中给出连接操作的表名,在 where 子句中

给出连接条件。

例如,从学生、课程和成绩表中,产生课程的成绩单。from 子句列出连接运算的

3 个表,where 子句给出连接条件。在 where 子句的条件表达式中包含了连接条件和选择

条件。

  例 1 从学生、课程和成绩表中,产生数据库课程的成绩单。SQL 语句是:

  select 姓名,课程名,分数

  from 学生 S,课程 C,成绩 G

  where S. 学号 =G. 学号 AND G. 课程号 =C. 课程号 AND C. 课程名称 = 数据库

middot;SQL-92 提供更丰富的连接操作,包括:内连接、条件连接、自然连接、左外

连接、右外连接、全连接,同时增加了在 from 子句定义连接条件的方法。SQL-92 中 from

子句连接的语法格式:

  from 表 1 连接类型 表 2 [on ( 连接条件)]

因此,上述产生学生数据库课程成绩单的 SQL 语句可以写成:

  select 姓名,课程名,分数

  from 学生 S join 成绩 G on (S. 学号 =G. 学号)

  join 课程 C on (G. 课程号 =C. 课程号)

  where C. 课程名称 = 数据库

middot; 这种方法不仅简化连接条件的表达方法,更重要是提高查询效率。

  SQL 系统处理的逻辑顺序是:

  1、from 子句中的连接条件

  2、where 子句中的连接条件与选择条件

  3、having 子句中的筛选条件

所以,在使用支持 SQL-92 标准的系统时,建议用 from 子句定义连接条件。

  关系 R 和 S 进行连接操作,且连接条件为 P。若连接的结果中只保含 R 与 S 在 P 上相匹

配的元组,这种连接属于内连接(inner join)。用 from 子句表示内连接的方法:

from R [inner] join S [on ( 连接条件)] 其中,inner 可省略。

  自然连接是等值连接的特例。

  middot; 设关系 R 和 S 进行连接操作,其连接条件为 P。如果 P 是 R 与 S 中连接属性的

等值比较,称为等值连接。

  middot; 若 R 与 S 进行等值连接,且 R 与 S 的连接属性名相同,称为自然连接。

  middot; 自然连接的实现方法是在内连接的基础上,用 select 子句消除重复列。

  有关系 R 和 S,R 与 S 的笛卡儿乘积称为交叉连接。交叉连接的实现方法:在 from 子

句中定义交叉连接类型:from R cross join S。

  关系 R 与 S 进行连接操作,连接条件为 P。若连接操作的结果中除了 R 与 S 在 P 上内连

接结果之外,还包括左边关系 R 在内连接操作中不相匹配的元组,而其对应于 S 的属性赋予

空值,这种连接称为左外连接。左外连接的表示方法:from R left outer join S on

(连接条件)

  关系 R 与 S 进行连接操作,连接条件为 P。若连接操作的结果中除了 R 与 S 在 P 上内连接

结果之外,还包括右边关系 S 在内连接操作中不相匹配的元组,而其对应于 R 的属性赋予空值

,这种连接称为右外连接。右外连接的表示方法:from R right outer join S on (连

接条件 )

  全外连接是左外连接和右外连接的组合应用。全外连接的表示方法:from R full

outer join S on (连接条件)

自连接:连接操作可以利用别名的方法实现一个表自身的连接。实质上,这种自身连接方法与

两个表的连接操作完全相似。

  一、内连接

  关系 R 和 S 进行连接操作,且连接条件为 P。若连接操作的结果中只包含 R 与 S 在 P 上相匹

配的行,这种连接属于内连接(inner join)。用 from 子句表示内连接的子句:

from R [inner] join S [on ( 连接条件)]

其中,inner 可省略。假设有导师与研究生 2 个表。

例 1 查询研究生与其导师的情况。此查询涉及教师和研究生 2 个表,连接条件是:

研究生. 导师号 = 教师. 教工号。SQL 语句是:

  select *from 研究生 A inner join 教师 B on A. 导师号 = B. 教工号

  也可以写成等价的 SQL 语句:

  select *

  from 研究生 A,教师 B

  where A. 导师号 = B. 教工号

  说明:这是一个内连接的例子,查询结果中只包含满足连接条件的 4 行。

  二、自然连接

  设关系 R 和 S 进行连接操作,其连接条件为 P。如果 P 是 R 与 S 中连接属性的等值比较,

称为等值连接。若 R 与 S 进行等值连接,且 R 与 S 的连接属性名相同,称为自然连接。自然连

接是等值连接的特例。自然连接的实现方法是在内连接的基础上,用 select 子句消除重复

列。

  假设有学生、课程和成绩 3 个表。例 1:根据学生、课程和成绩表的信息,输出 数

据库 课程的成绩单,包括姓名和分数。SQL 语句是:

  select 姓名,分数

  from 学生 A join 成绩 B on(A. 学号 =B. 学号)join 课程 C on(B. 课号 =C. 课号)

  where C. 课程名 = 数据库

等价的 SQL 语句:

  select 姓名,分数

  from 学生 A,成绩 B,课程 C

  where A. 学号 =B. 学号 AND B. 课号 = C. 课号 AND C. 课程名 = 数据库

这是一个自然连接的实例,查询结果中包含满足连接条件的 1 行,在查询结果中没有重复列。

  三、交叉连接

设有关系 R 和 S,R 与 S 的笛卡儿乘积称为交叉连接。在 SQL 中,实现交叉连接的方法是在 from

子句中定义交叉连接类型:from R cross join S

例 1 学生与课程的笛卡儿乘积。

  select *

  from 学生 cross join 课程

等价的 SQL 语句:

  select *

  from 学生, 课程

  四、左外连接

关系 R 与 S 进行连接操作,连接条件为 P。若连接操作的结果中除了 R 与 S 在 P 上内连接结果之外,

还包括左边关系 R 在内连接操作中不相匹配的元组,而其对应于 S 的属性赋予空值,这种连接

称为左外连接(left outer join)。

实现左外连接的 SQL 子句:from R left outer join S on (连接条件)

例 1:查询学生选课情况,包括没有选课的学生在内。SQL 语句是:

  select A. 学号, A. 姓名, B. 课号, B. 分数

  from 学生 A left outer join 成绩 B on(A. 学号 = B. 学号)

例 2:查询教师指导研究生的情况,包括不指导研究生的教师。SQL 语句是:

  select *

  from 教师 A left outer join 研究生 B on(A. 教工号 = B. 导师号)

这是两个左外连接的实例,查询结果中除了满足连接条件元组的之外,还包含左边关系不满足

连接条件的元组,而其对应的右边属性全部填充 NULL。

  五、右外连接

关系 R 与 S 进行连接操作,连接条件为 P。若连接操作的结果中除了 R 与 S 在 P 上内连接结果之外,

还包括右边关系 S 在内连接操作中不相匹配的元组,而其对应于 R 的属性赋予空值,这种连接

称为右外连接(right outer join)。

实现右外连接的 SQL 子句:from R right outer join S on (连接条件)

例 1:查询所开课程的选修情况,包括没有任何学生选修的课程。SQL 语句是:

  select *

  from 成绩 A right outer join 课程 B on(A. 课号 =B. 课号)

例 2:查询所开课程和学生的学习状况(学号、课程名和分数),其中还包括没有任何学生选修

的课。SQL 语句是:

  select 学号, 课程名, 分数

  from 成绩 A right outer join 课程 B on(A. 课号 =B. 课号)

这是 2 个右外连接的实例,查询结果中除了满足连接条件元组之外,还包含右边关系不满足连接

条件的元组,而其对应的左边属性全部填充 NULL。

  六、全外连接

全外连接(full outer join)是左外连接和右外连接的组合应用。实现全外连接的 SQL 子句:

  from R full outer join S on (连接条件)

  例 1:查询研究生和教师的情况,包括没有导师的研究生和没有指导研究生的教师。

SQL 语句是:

  select *

  from 研究生 A full outer join 教师 B on (A. 导师号 =B. 教工号)

  这是全外连接的实例,查询结果中除了满足连接条件元组之外,还包含 2 个关系中不满足

连接条件的元组,并且这些元组对应的属性全部填充 NULL。

  七、自连接

连接操作可以利用别名的方法实现一个表自身的连接。实质上,这种自身连接方法与两个表的

连接操作完全相似。假设有教学进度表,其中先修列是本门课程的先修课程。例如,先学习

数据结构 课程,再学习 数据库 课程。例 1:查询每一门课的先修课的先修课。例如,C5 的

先修课的先修课是 C6。用自连接实现查询,连接条件是:

from 教学进度 A join 教学进度 B on (A. 先修 =B. 课号)

  select A. 课号,B. 先修

  from 教学进度 A join 教学进度 B

  on (A. 先修 =B. 课号)

到此,相信大家对“SQL 中的连接操作”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-01发表,共计3655字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)