数据库中INNER JOIN的意思。

数据库中INNER JOIN的意思。,第1张

inner join on, left join on, right join on讲解(转载)

1理论

只要两个表的公共字段有匹配值,就将这两个表中的记录组合起来。

个人理解:以一个共同的字段求两个表中符合要求的交集,并将每个表符合要求的记录以共同的字段为牵引合并起来。

语法

FROM table1 INNER JOIN table2 ON table1 field1 compopr table2 field2

INNER JOIN *** 作包含以下部分:

部分 说明

table1, table2 要组合其中的记录的表的名称。

field1,field2 要联接的字段的名称。如果它们不是数字,则这些字段的数据类型必须相同,并且包含同类数据,但是,它们不必具有相同的名称。

compopr 任何关系比较运算符:“=”、“<”、“>”、“<=”、“>=”或者“<>”。

说明

可以在任何 FROM 子句中使用 INNER JOIN *** 作。这是最常用的联接类型。只要两个表的公共字段上存在相匹配的值,Inner 联接就会组合这些表中的记录。

可以将 INNER JOIN 用于 Departments 及 Employees 表,以选择出每个部门的所有雇员。而要选择所有部分(即使某些部门中并没有被分配雇员)或者所有雇员(即使某些雇员没有分配到任何部门),则可以通过 LEFT JOIN 或者 RIGHT JOIN *** 作来创建外部联接。

如果试图联接包含备注或 OLE 对象数据的字段,将发生错误。

可以联接任何两个相似类型的数字字段。例如,可以联接自动编号和长整型字段,因为它们均是相似类型。然而,不能联接单精度型和双精度型类型字段。

下例展示了如何通过 CategoryID 字段联接 Categories 和 Products 表:

SELECT CategoryName, ProductName

FROM Categories INNER JOIN Products

ON CategoriesCategoryID = ProductsCategoryID;

在前面的示例中,CategoryID 是被联接字段,但是它不包含在查询输出中,因为它不包含在 SELECT 语句中。若要包含被联接字段,请在 SELECT 语句中包含该字段名,在本例中是指 CategoriesCategoryID。

也可以在 JOIN 语句中链接多个 ON 子句,请使用如下语法:

SELECT fields

FROM table1 INNER JOIN table2

ON table1field1 compopr table2field1 AND

ON table1field2 compopr table2field2) OR

ON table1field3 compopr table2field3)];

也可以通过如下语法嵌套 JOIN 语句:

SELECT fields

FROM table1 INNER JOIN

(table2 INNER JOIN [( ]table3

[INNER JOIN [( ]tablex [INNER JOIN )]

ON table3field3 compopr tablexfieldx)]

ON table2field2 compopr table3field3)

ON table1field1 compopr table2field2;

LEFT JOIN 或 RIGHT JOIN 可以嵌套在 INNER JOIN 之中,但是 INNER JOIN 不能嵌套于 LEFT JOIN 或 RIGHT JOIN 之中。

2 *** 作实例

表A记录如下:

aID aNum

1 a20050111

2 a20050112

3 a20050113

4 a20050114

5 a20050115

表B记录如下:

bID bName

1 2006032401

2 2006032402

3 2006032403

4 2006032404

8 2006032408

实验如下:

1left join

sql语句如下:

select from A

left join B

on AaID = BbID

结果如下:

aID aNum bID bName

1 a20050111 1 2006032401

2 a20050112 2 2006032402

3 a20050113 3 2006032403

4 a20050114 4 2006032404

5 a20050115 NULL NULL

(所影响的行数为 5 行)

结果说明:

left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的

换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: AaID = BbID)

B表记录不足的地方均为NULL

2right join

sql语句如下:

select from A

right join B

on AaID = BbID

结果如下:

aID aNum bID bName

1 a20050111 1 2006032401

2 a20050112 2 2006032402

3 a20050113 3 2006032403

4 a20050114 4 2006032404

NULL NULL 8 2006032408

(所影响的行数为 5 行)

结果说明:

仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充

3inner join

sql语句如下:

select from A

innerjoin B

on AaID = BbID

结果如下:

aID aNum bID bName

1 a20050111 1 2006032401

2 a20050112 2 2006032402

3 a20050113 3 2006032403

4 a20050114 4 2006032404

结果说明:

很明显,这里只显示出了 AaID = BbID的记录这说明inner join并不以谁为基础,它只显示符合条件的记录

inner join: 表中至少有1个匹配时,才返回行。

cross join:返回的记录数为两个表的记录数乘积,一般是漏写连接条件

left join:左连接。 (如:select from table1 a left join table2 b on aid=bid 返回table1所有记录,即使在table2找不到匹配) right join刚相反

inner

join是内连接,显示符合连接条件的记录natural

join是自然连接,自动对两个表按照同名的列进行内连接使用自然连接要注意,两个表同名的列不能超过1个。

内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。在外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行。这种连接形式在许多情况下是非常有用的。外连接只能用于两个表中。

在Ansi语法形式中,包含下列三种外连接关键字:

◆LeftOuterJoin包含了左表中的全部行(表达式中第一个表)

◆RightOuterJoin包括了右表中的全部行(表达式中第二个表)

◆FullOuterJoin包括了左表和右表中所有不满足条件的行

在SQLServer连接语法形式中,包括下列两种外连接运算符:

◆=包含了左表中的全部行(表达式中第一个表)

◆=包括了右表中的全部行(表达式中第二个表)

左外连接和右连接都可以产生同样的结果,关键是看表达式中出现的前后顺序。

举例如下:

b外连接

b1左连接

selectcourseso,max(coursename),count(sno)

fromcoursesLEFTJOINgradesONcourseso=gradeso

groupbycourseso

左连接特点:显示全部左边表中的所有项目,即使其中有些项中的数据未填写完全。

左外连接返回那些存在于左表而右表中却没有的行,再加上内连接的行。

b2右连接

与左连接类似

b3全连接

selectsno,name,major

fromstudentsFULLJOINmajorsONstudentsmno=majorsmno

两边表中的内容全部显示

关于SQL数据库中cross join 和inner join用法上的区别

举个简单的例子吧,从结果来理解比较具体些。

a表

name sex

张三 男

李四 女

b表

name age

李四 30

王五 23

1\全外连接

select aname,asex,bname,bage

from a full outer join b on aname=bname

结果如下,

name sex name age

张三 男 NULL NULL

李四 女 李四 30

NULL NULL 王五 23

关联字段name,左表有而右表没有的,如张三,bname,bage都为NULL,加上左右两边都有的就是左连接的结果;而右表有而左表表没有的,如王五,aname,asex都为NULL,加上左右两边都有的就是右连接的结果;左右两边都有的如,李四,这就是内连接。

--测试代码

--建立测试数据

create

table

#ta1(id

integer

,

aa

char(1))

create

table

#ta2(id

integer

,

aa

char(1))

insert

into

#ta1

select

1,'a'

insert

into

#ta1

select

2,'b'

insert

into

#ta2

select

1,'a'

insert

into

#ta2

select

3,'b'

insert

into

#ta2

select

4,'c'

-----------------------------------

--完全测试

select

aid,aaa,bid,baa

from

#ta1

a

inner

join

#ta2

b

on

aid=bid

/结论:

左表的id必须完全跟右表的id一致,不匹配的不显示

/

--左链接测试

select

aid,aaa,bid,baa

from

#ta1

a

left

join

#ta2

b

on

aid=bid

/

结论:

以左表作为基准,右表能匹配上的就显示出来,不匹配的就显示成NULL,

记录个数满足左表

/

--右连接测试

select

aid,aaa,bid,baa

from

#ta1

a

right

join

#ta2

b

on

aid=bid

/

和左连接一样,只是以右表为基准了

/

以上就是关于数据库中INNER JOIN的意思。全部的内容,包括:数据库中INNER JOIN的意思。、数据库连接问题。请问 inner join using ,cross join ,left jo、数据库中natural join和join有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存