SQL server 第三篇 多表联接查询
来源:互联网 发布:c语言射击游戏 编辑:程序博客网 时间:2024/06/06 20:19
一、多表联接查询的分类
多表联接查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系数据库查询最主要的特征。
联接查询可分为三大类,分另为:
1. 内联接。
2. 外联接。
3. 交叉联接。
那么我们一起来看一下如何使用多表联接查询。
A. 内联接:内联接是最典型、最常用的联接查询,它根据表中共同的列来进行匹配,只有满足匹配的条件的数据才能被查询出来。通常,两个表存在主外键关系时会使用到内联接查询。
内联结常使用“=”比较运算符来判断两列数据是否相等,在这里我们通过几个实例来学习内联接查询。
a) 先在SQL Server 2005中新建两个表usersTable和usersNote,两表的内容如下面的图中所示。
表usersTable
表usersNote
b) 在建好相应的表后,我们就可以进行多表查询了,首先内联接我们有两种方式来查询。
第一种:直接在Where条件里通过表达式来进行表之间的关联。
select usersTable.myuser,usersTable.mypwd,
usersNote.useraddress,userphonenumber
--查询显示dbo.usersTable和dbo.usersNote表中的指定的内容
from dbo.usersTable,dbo.usersNote
--内联接两表
where usersTable.myuser=usersNote.username
--两表匹配的条件
在SQL 2005中的查询结果如下:
第二种:通过使用Inner Join关键字进行表之间的关联。
select usersTable.myuser,usersTable.mypwd,
usersNote.useraddress,userphonenumber
from dbo.usersTable inner join dbo.usersNote
on (usersTable.myuser=usersNote.username)
查询结果如下:
B. 外联接:外联接又可分为左外联接、右外联接、完整联接三种。
外联接与内联接区别在于,不仅显示两个表关联字段匹配的记录,同时不匹配记录根据外联接类型也会显示。
a) 左外联接:Left Join 或 Left Outer Join。
左外联接的结果集包括Left Join子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有区配行,则在相关联的结果集行中,右表的所有选择列均为空值。
以下是左外联接语句:
select usersTable.myuser,usersTable.mypwd,
usersNote.useraddress,userphonenumber
--查询显示dbo.usersTable和dbo.usersNote表中的指定的字段
from dbo.usersTable left join dbo.usersNote
on usersTable.myuser=usersNote.username
--左外联接两表
查询结果如下图:
可以看到最后一行的右表中不匹配的行显示部分均为NULL。
b) 右外联接:Right Join 或 Right Outer Join.
右外联接是左外联接的反向联接,将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将左表返回空值。
以下是右外联接语句:
select usersTable.myuser,usersTable.mypwd,
usersNote.useraddress,userphonenumber
--查询显示dbo.usersTable和dbo.usersNote表中的指定的字段
from dbo.usersTable left join dbo.usersNote
on usersTable.myuser=usersNote.username
--右外联接两表
查询结果如下图:
可以看到最后一行的左表中不匹配的行显示部分均为NULL
c) 完整外联接:Full Join 或 Full Outer Join。
完整外联接返回左表和右表中的所有行,当某行在另一个表中没有匹配行时,则另一个表的选择列包含空值,如果表之间有区配行,则整个结果集包含相应表的数据值。
以下的完整外联接语句:
select *
--查询显示两表的所有字段
from dbo.usersTable full join dbo.usersNote
on (usersTable.myuser=usersNote.username)
--完整外联接
select usersTable.myuser,usersTable.mypwd,
usersNote.useraddress,userphonenumber
--查询两表指定的字段
from dbo.usersTable full join dbo.usersNote
on (usersTable.myuser=usersNote.username)
--完整外联接
C. 交叉联接:交叉联接就是表之间没有任何关联条件,查询将返回左表与右表逐个联接的所有行,就是左表的的每一行与右表的所有行一一组合,相当于两个表相乘。
因为交叉联接两表之间没有关联,所以再新建两个没有关联的表进行,实验。
表Table_1
表Table_2
以下是交叉联接语句和相应的查询结果:
select * from dbo.Table_1,dbo.Table_2
select table_1.title ,table_2.username,table_1.showneirong
--查询两表中的指定字段
from Table_1,Table_2
--交叉联接
以上的操作中只使用了两个表,在实际使用中有时会有三个或更多的表联接使用,但其原理都是一样的。
- SQL server 第三篇 多表联接查询
- SQL server 第三篇 多表联接查询
- SQL Server 中的联接查询
- SQL多表查询之一内联接
- Sql复杂查询--多表联接
- 【SQL Server学习笔记】联接提示、查询提示、表提示
- SQL Server 联接提示、查询提示、表提示
- SQL SERVER表联接查询的各种写法
- 多表联接查询
- 多表联接查询
- sql的联接查询
- SQL联接查询
- ef 多表联接查询
- 多表查询之联接
- 第三章 联接查询(转)
- SQL Server-外部联接基础
- oracle的多表联接查询用法
- 多表联接查询select count()
- 运算符
- mysql查询今天、昨天、7天、近30天、本月、上一月 数据
- Cmake Practice(一)
- 用C#实现字符串相似度算法(编辑距离算法 Levenshtein Distance)
- springmvc整合redis(补充一)
- SQL server 第三篇 多表联接查询
- Invalidate(TRUE)与Invalidate(FALSE)区别
- 运行amanda时报amandad: symbol lookup error: /lib/libamanda-2.6.1p2.so: undefined symbol: g_slist_free_fu
- python用read_csv导入txt文件时的数据丢失问题
- 嵌入式数据库sqlite3移植
- 微信开发相关
- js简单数组去重
- Java——多生产者 多消费者
- 小米面经