一、联接查询
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
举例如下:
--------------------------------------------
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
--------------------------------------------
1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
--------------------------------------------
2.right join
sql语句如下:
select * from A
right join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
--------------------------------------------
3.inner join
sql语句如下:
select * from A
innerjoin B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
--------------------------------------------
注:
LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。
语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2
说明:table1, table2参数用于指定要将记录组合的表的名称。
field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。
如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误.
?
@时间漩涡
用上面提到的A、B表为例:
select * from A
left join
(
select bID,bName from B where bID <= 3
)T
on T.bID = A.aID
二、 联合查询UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:
select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]
其中selectstatement为待联合的SELECT查询语句。ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:
查询1 UNION (查询2 UNION 查询3)
FROM:http://yexin188.blog.163.com/blog/static/1011661320094111331584/?fromdm&isFromSearchEngine=yes
详细解决方案
Sql之left join、right join、inner join的差别
热度:61 发布时间:2016-05-05 15:10:58.0
相关解决方案
- 关于inner join 的返回类型有关问题
- js编写的贪吃蛇,无论如何改变div的top、left,蛇和食物在地图显式位置始终不变
- poi导入excel出现 Initialisation of record 0x86 left 2 bytes remaining still to be re解决办法
4.1) eclipse集成内嵌Maven
- 初学ASP.NET, 询问个简单有关问题, LEFT , RIGHT, SUBSTRING这些函数没有吗
- 8个表的 inner join ,现在3万条数据就支持不住了, 怎么处理
- 如何绑定 left.ascx 的代码
- 一次inner join select和 多次select 哪位高手的效率高
- div.animate({left:'+=200'},2000);中的'+=200'是什么意思啊解决方案
- Linq 查询 join 失败 !该如何解决
- 绑定的SqlDataSource中能不能用Inner join?对应的Eval、Bind如何写
- 急inner join 有关问题
- 究竟怎样让两个div完全重合呢?小弟我通过把两个div的style都设置成:"position: absolute; left: 138; top: 300px; width: 236px; height: 2
- 这个语句应该如何用inner join
- 求一条SQL语句关于 INNER JOIN,该如何解决
- full join 在不同数据库有不同结果,知道的一定要近来看下(内详)解决办法
- along with 跟 inner join、left join的关系?该如何处理
- along with 和 inner join、left join的关系
- along with 跟 inner join、left join的关系?该如何解决
- 关于full join 3个表关联有关问题
- 小弟我想判断excel某一列的末尾是否为冒号,如果是就去掉,不是就保留原来数据,这个不对吗:=IF(RIGHT(G4,1)=“:”,G4,LEFT(G4,LEN(G
- 怎么用VBA设置word中图文框的top、left
- left join不能用?该怎么解决
- informix 分组统计 left join解决方法
- left join不能用?解决方案
- informix 分组统计 left join解决方案
- 多个表 inner join 的执行有关问题
- 在foxpro中可以使用update inner join 的方法关联修改一个表吗解决方法
- left outer join 中的有关问题
- JSTL 联结字符fn:join()