多表联接查询.docx
《多表联接查询.docx》由会员分享,可在线阅读,更多相关《多表联接查询.docx(10页珍藏版)》请在冰豆网上搜索。
![多表联接查询.docx](https://file1.bdocx.com/fileroot1/2022-12/14/06ab6fb4-c7e5-4661-93d3-2e329402b118/06ab6fb4-c7e5-4661-93d3-2e329402b1181.gif)
多表联接查询
多表联接查询
一、多表联接查询的分类
多表联接查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系数据库查询最主要的特征。
联接查询可分为三大类,分另为:
1.内联接。
2.外联接。
3.交叉联接。
那么我们一起来看一下如何使用多表联接查询。
A.内联接:
内联接是最典型、最常用的联接查询,它根据表中共同的列来进行匹配,只有满足匹配的条件的数据才能被查询出来。
通常,两个表存在主外键关系时会使用到内联接查询。
内联结常使用“=”比较运算符来判断两列数据是否相等,在这里我们通过几个实例来学习内联接查询。
a)先在SQLServer2005中新建两个表usersTable和usersNote,两表的内容如下面的图中所示。
表usersTable
表usersNote
b)在建好相应的表后,我们就可以进行多表查询了,首先内联接我们有两种方式来查询。
第一种:
直接在Where条件里通过表达式来进行表之间的关联。
selectusersTable.myuser,usersTable.mypwd,
usersNote.useraddress,userphonenumber
--查询显示dbo.usersTable和dbo.usersNote表中的指定的内容
fromdbo.usersTable,dbo.usersNote
--内联接两表
whereusersTable.myuser=usersNote.username
--两表匹配的条件
在SQL2005中的查询结果如下:
第二种:
通过使用InnerJoin关键字进行表之间的关联。
selectusersTable.myuser,usersTable.mypwd,
usersNote.useraddress,userphonenumber
fromdbo.usersTableinnerjoindbo.usersNote
on(usersTable.myuser=usersNote.username)
查询结果如下:
B.外联接:
外联接又可分为左外联接、右外联接、完整联接三种。
外联接与内联接区别在于,不仅显示两个表关联字段匹配的记录,同时不匹配记录根据外联接类型也会显示。
a)左外联接:
LeftJoin或LeftOuterJoin。
左外联接的结果集包括LeftJoin子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。
如果左表的某行在右表中没有区配行,则在相关联的结果集行中,右表的所有选择列均为空值。
以下是左外联接语句:
selectusersTable.myuser,usersTable.mypwd,
usersNote.useraddress,userphonenumber
--查询显示dbo.usersTable和dbo.usersNote表中的指定的字段
fromdbo.usersTableleftjoindbo.usersNote
onusersTable.myuser=usersNote.username
--左外联接两表
查询结果如下图:
可以看到最后一行的右表中不匹配的行显示部分均为NULL。
b)右外联接:
RightJoin或RightOuterJoin.
右外联接是左外联接的反向联接,将返回右表的所有行。
如果右表的某行在左表中没有匹配行,则将左表返回空值。
以下是右外联接语句:
selectusersTable.myuser,usersTable.mypwd,
usersNote.useraddress,userphonenumber
--查询显示dbo.usersTable和dbo.usersNote表中的指定的字段
fromdbo.usersTableleftjoindbo.usersNote
onusersTable.myuser=usersNote.username
--右外联接两表
查询结果如下图:
可以看到最后一行的左表中不匹配的行显示部分均为NULL
c)完整外联接:
FullJoin或FullOuterJoin。
完整外联接返回左表和右表中的所有行,当某行在另一个表中没有匹配行时,则另一个表的选择列包含空值,如果表之间有区配行,则整个结果集包含相应表的数据值。
以下的完整外联接语句:
select*
--查询显示两表的所有字段
fromdbo.usersTablefulljoindbo.usersNote
on(usersTable.myuser=usersNote.username)
--完整外联接
selectusersTable.myuser,usersTable.mypwd,
usersNote.useraddress,userphonenumber
--查询两表指定的字段
fromdbo.usersTablefulljoindbo.usersNote
on(usersTable.myuser=usersNote.username)
--完整外联接
C.交叉联接:
交叉联接就是表之间没有任何关联条件,查询将返回左表与右表逐个联接的所有行,就是左表的的每一行与右表的所有行一一组合,相当于两个表相乘。
因为交叉联接两表之间没有关联,所以再新建两个没有关联的表进行,实验。
表Table_1
表Table_2
以下是交叉联接语句和相应的查询结果:
select*fromdbo.Table_1,dbo.Table_2
selecttable_1.title,table_2.username,table_1.showneirong
--查询两表中的指定字段
fromTable_1,Table_2
--交叉联接
以上的操作中只使用了两个表,在实际使用中有时会有三个或更多的表联接使用,但其原理都是一样的。