千家信息网

SQL中的连接操作

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"SQL中的连接操作",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"SQL中的连接操作"吧!利用连接操作,可以根据表与表之间的逻辑联系从两个
千家信息网最后更新 2026年10月31日SQL中的连接操作

本篇内容主要讲解"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.课程名称='数据库'

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

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可省略。

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

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

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

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

·自然连接的实现方法是在内连接的基础上,用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中的连接操作"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

课程 条件 子句 学生 查询 方法 结果 成绩 A. 学号 研究生 语句 研究 属性 数据 教师 自然 B. 分数 数据库 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 A股互联网金融科技公司 互联网巨头科技公司 互联网与科技金融数据 互联网科技公司发展 中国互联网科技发展 奇酷互联网络科技 碳银互联网科技 云电互联网科技 互联网科技创新企业排名 富国互联网科技创新基金 世界互联网科技公司市值排名 南平创想时代互联网科技有限公司 武汉健翔互联网络科技有限公司 哈尔滨屹滨互联网科技有限公司 互联网科技和法律行业 中国互联网有什么科技 中天科技中国工业互联网 全球科技与互联网公司市值变化 北京天晋互联网科技有限公司 深圳互联网科技园地址 广州凡科互联网科技 科技类的互联网平台 联恩商钥互联网科技有限公司 彤创互联网科技有限公司 国大互联网教育科技有限公司薪资 杭州披云加互联网科技有限公司 互联网相关科技技术 兰石爱特工业互联网科技分公司 第三届互联网大会安防黑科技 数字科技和互联网金融哪个好
0