SQL中Left Join、Right Join和Inner Join的使用
来源:互联网 发布:telnet 80端口 编辑:程序博客网 时间:2024/05/16 15:43
- 1、表结构
- 2、Left Join
- 3、Right Join
- 4、Inner Join
- 5、表的关联修改和删除
- 6、笛卡尔积
1、表结构
表A 表B
2、Left Join
示例:2.1
Select * From A left join B on A.aid = B.bid;
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的。 换句话说,左表A的记录将会全部表示出来,而右表B只会显示符合搜索条件的记录(例子中为: A.aid = B.bid),B表记录不足的地方均为NULL.
- A表所有记录都会显示,A表中没有被匹配的行(如aid=5、6的行)相应内容则为NULL。
- 返回的记录数一定大于A表的记录数,如A表中aid=7行被B表匹配了3次(因为B表有三行bid=7)。
注意:在Access中A.aid、B.bid不能缩写成aid、bid,否则会提示“不支持链接表达式”,这一点不同于Where查询。
3、Right Join
示例:3.1
Select * From A right join B on A.aid = B.bid;
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充。
4、Inner Join
示例:4.1
Select * From A inner join B on A.aid = B.bid;
这里只显示出了 A.aid = B.bid的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录。
inner join 等同于Where查询如:
Select * From A, B Where A.aid = B.bid
5、表的关联修改和删除
5.1修改
示例:5.1.1
update A left join B on A.aid = B.bidset A.aname = B.bname
上述SQL实际操作的表为"Select * From A left join B on A.aid = B.bid",因此Access会提示更新13条记录(Select查询出的记录就是13条)。对比“示例:2.1”返回的结果,分析update后的A表:
- aid=5、6的记录,被更新为NULL
- aid=7的记录,被更新了3次,依次是“b1997-1”、“b1997-2”、“b1997-3”,因此其结果为最后一次更新“b1997-3”
对于上述SQL同样可以将“A.aname = B.bname”改成“B.bname = A.aname”,执行后B表将会被修改,但是执行后B表会增加三行“0, a2005-1;0, a2005-2;0, a2006”,这也不难理解,因为Left Join执行后,B表会出现三行空值。
示例:5.1.2
Where条件查询在上面的SQL中同样可以使用,其作用的表也是Select查询出的关联表。如下SQL
update A left join B on A.aid = B.bidset A.aname = B.bnamewhere A.aid <> 5
执行后A表的结果:
对比第一次update可以发现,aid=5的并没有被更新。
这里只讲述left join,因为right join 和 inner join的处理过程等同于left join。另外Access中update语句中不能含有From关键字,这一点不同于其他数据库。
5.2删除
在Access中是不可以通过Left Join、Right Join、Inner Join来删除某张表的记录
示例:5.2.2
Delete From A inner join B on A.aid = B.bidwhere B.bname = "b1991"
上述SQL的本意是删除A表中aid=1的记录,但执行后表A和表B均未发生任何变化。若想实现此目的,下述SQL可以实现
Delete From AWhere A.aid In (Select bid From B Where B.bname="b1991")
6、笛卡尔积
如果A表有20条记录,B表有30条记录,则二者关联后的笛卡尔积工20*30=600条记实录。也就是说A表中的每条记录都会于B表的所有记录关联一次,三种关联方式实际上就是对“笛卡尔积”的处理方式不同。
- sql中left join(left outer join)、inner join的使用,right join(right outer join)的用法和left join的相反就可以了。
- SQL中Left Join、Right Join和Inner Join的使用
- Access SQL中Left Join、Right Join和Inner Join的使用
- sql中left join、right join、inner join的区别
- SQL中left join,right join,inner join的区别
- SQL中inner join,left join,right join的区别
- sql连接left join、right join、inner join的使用
- sql的left join、right join和inner join
- 【SQL】inner join、outer join、cross join和left join、right join、full join的区别
- SQL 中join、inner join、left join、right join、
- sql的inner join/left join/right join/full join
- sql inner[right][left] join 的使用
- SQL中cross join,left join,right join ,full join,inner join 的区别
- SQL中cross join,left join,right join ,full join,inner join 的区别
- SQL中cross join,left join,right join ,full join,inner join 的区别
- SQL中cross join,left join,right join ,full join,inner join 的区别
- join联接查询--SQL中 inner join、 left join 、right join、 outer join之间的区别
- sql语句中inner join,left join,right join,full join,cross join之间的区别
- 如何在ORACLE中异步调用存储过程的方法
- 机器视觉学习系列五:增强现实
- 134.根据公式计算和
- 要求输出1~n*n的自然数构成的魔方阵。(n<15且为奇数)
- 常用算法集锦
- SQL中Left Join、Right Join和Inner Join的使用
- ubuntu下配置vpn支持访问外网
- 鸿学金信风控详细介绍
- Java基础---反射
- tee命令用法小结
- 三、PageView Button的事件处理
- 杭电ACM1297——Children’s Queue~~大数相加的应用
- [C#学习笔记]获取当前系统的基本信息
- SpringMVC+MyBatis环境整合开发案例