sql语句中join的用法和效率说明.doc
《sql语句中join的用法和效率说明.doc》由会员分享,可在线阅读,更多相关《sql语句中join的用法和效率说明.doc(12页珍藏版)》请在课桌文档上搜索。
1、数据库join语句使用与效率说明第1章 目录第1章Sql之left join、right join、inner join的区别3第2章INNER JOIN和left JOIN82.1现在比较:left join 和 inner join9第3章提升left join效率11第4章SQL Server 中Inner join 和where的效率差异11第1章 Sql之left join、right join、inner join的区别 left join 返回包括左表中的所有记录和右表中联结字段相等的记录right join 返回包括右表中的所有记录和左表中联结字段相等的记录inner join
2、 只返回两个表中联结字段相等的行举例如下:-表A记录如下:aIDaNum1a200501112a200501123a200501134a200501145a20050115表B记录如下:bIDbName22006032402320060324034200603240482006032408-1.left joinsql语句如下:select * from Aleft join Bon A.aID = B.bID结果如下:aIDaNumbIDbName2a20050112220060324023a20050113320060324034a20050114420060324045a20050115
3、NULLNULL所影响的行数为 5 行结果说明:left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.换句话说,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录.B表记录不足的地方均为NULL.-2.right joinsql语句如下:select * from Aright join Bon A.aID = B.bID结果如下:aIDaNumbIDbName2a20050112220060324023a20050113320060324034a2005011442006032404NULLNULL82006032408所影响的
4、行数为 5 行结果说明:仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表为基础的,A表不足的地方用NULL填充.-3.inner joinsql语句如下:select * from Ainnerjoin Bon A.aID = B.bID结果如下:aIDaNumbIDbName2a20050112220060324023a20050113320060324034a2005011442006032404结果说明:很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.-注:LEFT JOIN操作用于在任何
5、的 FROM 子句中,组合来源表的记录.使用 LEFT JOIN 运算来创建一个左边外部联接.左边外部联接将包含了从第一个左边开始的两个表中的全部记录,即使在第二个右边表中并没有相符值的记录.语法:FROM table1 LEFT JOIN table2 ON table1.field1 popr table2.field2说明:table1, table2参数用于指定要将记录组合的表的名称.field1, field2参数指定被联接的字段的名称.且这些字段必须有相同的数据类型与包含相同类型的数据,但它们不需要有相同的名称.popr参数指定关系比较运算符:=, , = 或 .如果在INNER
6、JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误.时间漩涡 用上面提到的A、B表为例: select * from A left join select bID,bName from B where bID T on T.bID = A.aID第2章 inner join,left join,right join图形解析现在有两张表: 1.部门表: 2.员工表:a.内连接内连接就是获取 两张表共有的数据.Sql代码 1. SELECTb.branch,e.nameFROMbranchASbINNERJOINemployeeASeONb.id=
7、e.branchidSELECT b.branch,e.name FROM branch AS b INNER JOIN employee AS e ON b.id=e.branchid 结果: 如果Sql换个写法:Sql代码 1. SELECTb.branch,e.nameFROMemployeeASeINNERJOINbranchASbONb.id=e.branchidSELECT b.branch,e.name FROM employee AS e INNER JOIN branch AS b ON b.id=e.branchid 结果: 呵呵,发现结果是一样的,不管内连接的哪张表,结果
8、都是获取的两张表的共有数据!此外,还有一种写法,能达到同样的效果:Sql代码 1. SELECTb.branch,e.nameFROMemployeeASe,branchASbWHEREb.id=e.branchidSELECT b.branch,e.name FROM employee AS e,branch AS b WHERE b.id=e.branchid 结果: b.左连接:Sql代码 1. SELECTb.branch,e.nameFROMbranchASbLEFTJOINemployeeASeONb.id=e.branchidSELECT b.branch,e.name FROM
9、 branch AS b LEFT JOIN employee AS e ON b.id=e.branchid 结果: 分析下,为什么会有这样的结果,找个诀窍,看Sql语句的 from 关键字的后面是哪张表,那么结果一定包含branch表中的所查询的字段所关联左表的所有数据,如果左连接表不存在branch中的所查询字段,那么该字段的值为Null.好了,现在换个写法:Sql代码 1. SELECTb.branch,e.nameFROMemployeeASeLEFTJOINbranchASbONb.id=e.branchidSELECT b.branch,e.name FROM employee
10、AS e LEFT JOIN branch AS b ON b.id=e.branchid 结果: 在分析下,看Sql语句的 from 关键字的后面是哪张表,那么结果一定包含employee 表中的所查询的字段所关联左表的所有数据.c.右连接:第3章 INNER JOIN和left JOIN假如我们描述这样一种关系,表1存储的是区域和区域ID,表二代表的是微软公司的子公司以与子公司所在的区域 1、表1CREATE TABLE region regionid int IDENTITY NOT NULL , regionname varchar COLLATE Chinese_PRC_CI_AS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sql 语句 join 用法 效率 说明

链接地址:https://www.desk33.com/p-21494.html