sql 语句中left join 和right join 有什么区别? 还有什么时候应该用left join ,什么时候应该用right join? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 左联接和右连接要左边表的用LEFT JOIN要右边表的用RIGHT JOIN 外连接就是哪一边全都显示,另外一边不管有没有1--12--11--2LEFT JOIN 1--1--1--22--1-NULL-NULLRIGHT JOIN 1--2--1--1 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只返回两个表中联结字段相等的行举例如下: --------------------------------------------表A记录如下:aID aNum1 a200501112 a200501123 a200501134 a200501145 a20050115表B记录如下:bID bName1 20060324012 20060324023 20060324034 20060324048 2006032408--------------------------------------------1.left joinsql语句如下: select * from Aleft join B on A.aID = B.bID结果如下:aID aNum bID bName1 a20050111 1 20060324012 a20050112 2 20060324023 a20050113 3 20060324034 a20050114 4 20060324045 a20050115 NULL NULL(所影响的行数为 5 行)结果说明:left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).B表记录不足的地方均为NULL.--------------------------------------------2.right joinsql语句如下: select * from Aright join B on A.aID = B.bID结果如下:aID aNum bID bName1 a20050111 1 20060324012 a20050112 2 20060324023 a20050113 3 20060324034 a20050114 4 2006032404NULL NULL 8 2006032408(所影响的行数为 5 行)结果说明:仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.--------------------------------------------3.inner joinsql语句如下: select * from Ainnerjoin B on A.aID = B.bID结果如下:aID aNum bID bName1 a20050111 1 20060324012 a20050112 2 20060324023 a20050113 3 20060324034 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 数据类型数据的字段,将会发生错误. left join:以左边的表为基准表right join:以右边的表为基准表 left join :以左边的表为基准表,右边的表显示可以为空right join:以右边的表为基准表,左边的表显示可以为空 左连接与右连接,打个比方表A 数据 id 1 2 3 4 5表B数据 id 4 5 6 7 8A left join B on a.id=b.id结果 a.id b.id 1 null 2 null 3 null 4 4 5 5A right join B on a.id=b.id结果 a.id b.id 4 4 5 5 null 6 null 7 null 8 谁说讲不明白,9楼的 例子 挺简洁的。以后大家都可以通过baidu找到这个帖子,造福新人。 关于多重级联路径 请问这个N代表什么意思,讲详细点好不 SQLSERVER2005能停掉哪些服务 想开发基于msde的c/s程序,主要因为单位机器配置低,请问最低配置要求是什么呀? 查询一列中的最大值 怎样才能打开nsf格式数据库,求救 如何删除另一个数据库的表中的记录?急!!! 急,小弟刚学,请各位大虾帮忙,我用ADO连SQL SERVER 要实现查询的功能,我该怎么实现啊?表结构如下 问个多表查询的sql union后的order by 【继续求助】 如何写下述sql 语句....谢谢!!! 怎样求得它在哪一行值之前呢
2--11--2LEFT JOIN 1--1--1--2
2--1-NULL-NULLRIGHT JOIN
1--2--1--1
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 数据类型数据的字段,将会发生错误.
right join:以右边的表为基准表
right join:以右边的表为基准表,左边的表显示可以为空
表A 数据
id
1
2
3
4
5
表B数据
id
4
5
6
7
8
A left join B on a.id=b.id
结果
a.id b.id
1 null
2 null
3 null
4 4
5 5
A right join B on a.id=b.id
结果
a.id b.id
4 4
5 5
null 6
null 7
null 8
9楼的 例子 挺简洁的。以后大家都可以通过baidu找到这个帖子,造福新人。