【SQL Server】左联接,右联接,内联接的比较
2015-10-20 16:54
330 查看
首先需要解释一下这几个联接的意思:
left join(左联接): 返回包括左表中的所有记录和右表中联结字段相等的记录。
right join(右联接): 返回包括右表中的所有记录和左表中联结字段相等的记录。
inner join(等值连接): 只返回两个表中联结字段相等的行。
接下来,创建一个数据库,然后创建两张表,分别为MyTable1和MyTable2,然后向这两张表中插入一些我们要测试的数据,这里忽略建库和建表过程,望理解。
好了,接下来,我们来查询一下是否添加成功了:
我们根据上一步查询,可以看出,表1中的ID编号分别为:1,2,3,5,而表2中的ID编号分别为:1,2,3,4,也就是说,两个表中的最后一条数据是对应不上的,接下来,我们来看一下left join执行的效果,语句为:
select * from MyTable1 a
left join MyTable2 b
on a.ID=b.ID
通过结果我们可以看出,left join是以表1的记录为基础,即左表的记录全部显示出来,而表2只显示符合搜索条件的记录显示出来,即右表根据条件显示,那这里的条件就是a.ID=b.ID,记录不足的会以NULL填充显示。
接下来,我们看一下right join执行的效果,语句为:select * from MyTable1 a right join MyTable2 b
on a.ID=b.ID
我们会发现,right join执行的效果刚好和left join执行的效果相反,即以右表的数据为基础,显示右表全部数据,而只显示左表符合搜索条件的数据。
接下来,我们再看一下inner join执行的效果,语句为:select * from MyTable1 a inner join MyTable2 b
on a.ID=b.ID
通过结果,我们可以发现,inner join不以任何数据为基础,只显示符合搜索条件的数据
综合以上信息,我们就可以清楚的知道,当你需要两个或者多个表的数据的时候,你想要什么样的数据,该用什么样的联接,这对于数据操作来说,是一个很大的便利。
left join(左联接): 返回包括左表中的所有记录和右表中联结字段相等的记录。
right join(右联接): 返回包括右表中的所有记录和左表中联结字段相等的记录。
inner join(等值连接): 只返回两个表中联结字段相等的行。
接下来,创建一个数据库,然后创建两张表,分别为MyTable1和MyTable2,然后向这两张表中插入一些我们要测试的数据,这里忽略建库和建表过程,望理解。
好了,接下来,我们来查询一下是否添加成功了:
我们根据上一步查询,可以看出,表1中的ID编号分别为:1,2,3,5,而表2中的ID编号分别为:1,2,3,4,也就是说,两个表中的最后一条数据是对应不上的,接下来,我们来看一下left join执行的效果,语句为:
select * from MyTable1 a
left join MyTable2 b
on a.ID=b.ID
通过结果我们可以看出,left join是以表1的记录为基础,即左表的记录全部显示出来,而表2只显示符合搜索条件的记录显示出来,即右表根据条件显示,那这里的条件就是a.ID=b.ID,记录不足的会以NULL填充显示。
接下来,我们看一下right join执行的效果,语句为:select * from MyTable1 a right join MyTable2 b
on a.ID=b.ID
我们会发现,right join执行的效果刚好和left join执行的效果相反,即以右表的数据为基础,显示右表全部数据,而只显示左表符合搜索条件的数据。
接下来,我们再看一下inner join执行的效果,语句为:select * from MyTable1 a inner join MyTable2 b
on a.ID=b.ID
通过结果,我们可以发现,inner join不以任何数据为基础,只显示符合搜索条件的数据
综合以上信息,我们就可以清楚的知道,当你需要两个或者多个表的数据的时候,你想要什么样的数据,该用什么样的联接,这对于数据操作来说,是一个很大的便利。
相关文章推荐
- PLSQL之Split截取字符串
- 【转】Oracle存储过程常用技巧
- 【MySQL】【leetcode】 Duplicate Emails解题报告
- oracle 死锁
- 【转】Oracle存储过程学习
- 32位plsql配置连接64位ORACLE 11g的方法
- SQL HOWTO
- SQL的四种连接-左外连接、右外连接、内连接、全连接
- ubuntu mysql使用
- SQLserver数据库中关于递归的查询使用
- SQLserver数据库中关于递归的查询使用
- 新安装的Mysql5.5数据库使用mybatis提示插入数据成功并且主键已经自增,但是数据表中没有数
- oracle免安装服务器,pl/sql加instantclient的配置使用
- 什么是数据库事务
- mac下安装mysql5.6.27和MySQLWorkbench问题解决办法
- MYSQL数据库使用UTF-8中文编码乱码的解决办法
- Hibernate 因别名引起的Column Not Found(Mysql)
- 如何用Excel直接查询Oracle中的数据
- sql查询条件:闭区间和开区间(>=和>)效率分析
- vs2013添加mysql对EF的支持(转+说明)