温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SQL中的连接操作

发布时间:2021-08-16 21:52:02 来源:亿速云 阅读:201 作者:chen 栏目:数据库

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

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

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

给出连接条件。

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

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

条件。

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

      select 姓名,课程名,分数

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

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

·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中的连接操作”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

sql
AI