sql 内连接和外连接的是什么意思

sql 内连接和外连接的是什么意思,第1张

内连接又分为等值连接、自然连接和不等连接三种。

外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

连接 *** 作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:

SELECT p1pub_id,p2pub_id,p1pr_info

FROM pub_info AS p1 INNER JOIN pub_info AS p2

ON DATALENGTH(p1pr_info)=DATALENGTH(p2pr_info)

(一) 内连接

内连接查询 *** 作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:

1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!& lt;和<>。

3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

SELECT

FROM authors AS a INNER JOIN publishers AS p

ON acity=pcity

又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):

SELECT a,ppub_id,ppub_name,pcountry

FROM authors AS a INNER JOIN publishers AS p

ON acity=pcity

(二) 外连接

内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

如下面使用左外连接将论坛内容和作者信息连接起来:

SELECT a,b FROM luntan LEFT JOIN usertable as b

ON ausername=busername

下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

SELECT a,b

FROM city as a FULL OUTER JOIN user as b

ON ausername=busername

(三) 交叉连接

交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于68=48 行。

SELECT type,pub_name

FROM titles CROSS JOIN publishers

ORDER BY type

介绍了表连接,更确切的说是inner joins内连接.

内连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来。

为更好的理解这个概念,我们介绍两个表作演示。苏格兰议会中的政党表(party)和议员表 (msp)。

party(Code,Name,Leader)

Code: 政党代码

Name: 政党名称

Leader: 政党领袖

msp(Name,Party,Constituency)

Name: 议员名

Party: 议员所在政党代码

Constituency: 选区

内连接:返回2个表中完全符合条件的记录,结果集中每个表的字段内容均来自各自的表;

外连接:返回2个表中完全符合条件的记录,再加上2个表中各自的记录,结果集中的字段只有一个表中有记录时,另一个表中的字段均使用空值null填写。

例如A表:

ID user partmentID

1 aaa 3

2 bbb 3

3 ccc (null)

B表:

parmentID PartmentName

3 pm001

4 pm002

内连接结果:select Auser BPartmentName from A inner join B on ApartmentID = BpartmentID

user PartmentName

aaa pm001

bbb pm001

外连接结果:select Auser BPartmentName from A outer join B on ApartmentID = BpartmentID

user PartmentName

aaa pm001

bbb pm001

ccc (null) 比内连接多出来的记录,PartmentName字段是空值

(null) pm002 比内连接多出来的记录,user字段是空值

内连接在多是应用环境下使用,只有极少是使用外连接:比如同类数据的对比就可以使用外连接,比较两人统计的同一个价格表,为了对比两份数据的一致性,可以使用外连接。

是相同的属性组即要求必须有相同的值域即可自然连接。

自然连接是一种特殊的等值连接,他要求两个关系表中进行比较的必须是相同的属性列,无须添加连接条件,并且在结果中消除重复的属性列。

在连接运算当中,一种最常用的连接是自然连接。如果关系R与S具有相同的属性组B,且该属性组的值相等时的连接称为自然连接,结果关系的属性集合为R的属性并上S减去属性B的属性集合。

R和S自然连接可记作:R⋈S={t r⌒ts |tr∈R∧ts∈S∧tr[A]=ts[B]}[3]

自然连接也可看作是在广义笛卡尔积R×S中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系。

自然连接与等值连接的区别

1 等值连接中不要求属性值完全相同,而自然连接要求两个关系中进行比较的必须是相同的属性组(属性名可以不同),即要求必须有相同的值域。

2 等值连接不将重复属性去掉,而自然连接去掉重复属性,也可以说,自然连接是去掉重复列的等值连接。

自然连接外连接

如果把舍弃的元组也保存在结果关系中,而在其他属性上空值,那么这种连接就叫外连接。如果只把左边关系R要舍弃的元组保留就叫左外连接,如果只把右边关系S中要舍弃的元组保留右外连接。

内连接也称为等同连接,返回的结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据。也就是说,在这种查询中,DBMS只返回来自源表中的相关的行,即查询的结果表包含的两源表行,必须满足ON子句中的搜索条件。作为对照,如果在源表中的行在另一表中没有对应(相关)的行,则该行就被过滤掉,不会包括在结果表中。内连接使用比较运算符来完成。

数据库 内连接 外连接 区别

(一)内连接

内连接查询 *** 作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的

列值。内连接分三种:

1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结

果中列出被连接表中的所有列,包括其中的重复列。

例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

SELECT

FROM authors AS a INNER JOIN publishers AS p

ON acity=pcity

2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的

列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。

3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选

择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

例,在选择列表中删除authors 和publishers 表中重复列(city和state):

SELECT a,ppub_id,ppub_name,pcountry

FROM authors AS a INNER JOIN publishers AS p

ON acity=pcity

(二) 外连接

外连接,返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左

外连接或左连接))、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录;

right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录;

例如1:SELECT a,b FROM luntan LEFT JOIN usertable as b

ON ausername=busername

例如2:SELECT a,b

FROM city as a FULL OUTER JOIN user as b

ON ausername=busername

(三) 交叉连接

交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到

结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查

询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下

列交叉连接检索到的记录数将等于68=48行。

例如:SELECT type,pub_name

FROM titles CROSS JOIN publishers

ORDER BY type

a、b两个表通过c字段做连接。全连接在ac is null和bc is null的记录列入结果中。内连接在ac is null和bc is null的记录不列入结果中。

全连接为连接信息不全时使用,比如学生95003没有选课,那么在选课表(sc)中就没有相应的元组,但是我们想从student表为主体列出每个学生的基本情况及选课情况,若没个学生没有选课,只输出其基本情况,选课信息为空即可,同时有想显示出哪门课没有任何学生选。这是就要用到全连接,

上面情况中不想看见两值为空的记录就用内连接

二、内连接(INNER JOIN)

内连接(INNER JOIN):有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行。(所谓的链接表就是数据库在做查询形成的中间表)。

例如:下面的语句3和语句4的结果是相同的。

语句3:隐式的内连接,没有INNER JOIN,形成的中间表为两个表的笛卡尔积(如果没有where条件)。

SELECT OID,OORDER_NUMBER,CID,CNAMEFROM CUSTOMERS C,ORDERS O WHERE CID=OCUSTOMER_ID;

语句4:显示的内连接,一般称为内连接,有INNER JOIN,形成的中间表为两个表经过ON条件过滤后的笛卡尔积。

SELECT OID,OORDER_NUMBER,CID,CNAMEFROM CUSTOMERS C INNER JOIN ORDERS O ON CID=OCUSTOMER_ID;

三、外连接(OUTER JOIN)(必须有ON条件):

外连不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。

外连接分三类:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。

三者的共同点是都返回符合连接条件和查询条件(即:内连接)的数据行。不同点如下:

左外连接还返回左表中不符合连接条件单符合查询条件的数据行。

右外连接还返回右表中不符合连接条件单符合查询条件的数据行。

全外连接还返回左表中不符合连接条件单符合查询条件的数据行,并且还返回右表中不符合连接条件单符合查询条件的数据行。全外连接实际是上左外连接和右外连接的数学合集(去掉重复),即“全外=左外 UNION 右外”。

说明:左表就是在“(LEFT OUTER JOIN)”关键字左边的表。右表当然就是右边的了。在三种类型的外连接中,OUTER 关键字是可省略的。

下面举例说明:

语句5:左外连接(LEFT OUTER JOIN)

SELECT OID,OORDER_NUMBER,OCUSTOMER_ID,CID,CNAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON CID=OCUSTOMER_ID;

语句6:右外连接(RIGHT OUTER JOIN)

SELECT OID,OORDER_NUMBER,OCUSTOMER_ID,CID,CNAMEFROM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON CID=OCUSTOMER_ID;注意:WHERE条件放在ON后面查询的结果是不一样的。例如:

语句7:WHERE条件独立。

SELECT OID,OORDER_NUMBER,OCUSTOMER_ID,CID,CNAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON CID=OCUSTOMER_IDWHERE OORDER_NUMBER<>'MIKE_ORDER001';

语句8:将语句7中的WHERE条件放到ON后面。

SELECT OID,OORDER_NUMBER,OCUSTOMER_ID,CID,CNAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON CID=OCUSTOMER_ID AND OORDER_NUMBER<>'MIKE_ORDER001';

从语句7和语句8查询的结果来看,显然是不相同的,语句8显示的结果是难以理解的。因此,推荐在写连接查询的时候,ON后面只跟连接条件,而对中间表限制的条件都写到WHERE子句中。

以上就是关于sql 内连接和外连接的是什么意思全部的内容,包括:sql 内连接和外连接的是什么意思、oracle数据库中外连接和内连接有什么区别、数据库自然连接等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9759376.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存