软件开发高手须掌握的4大SQL精髓语句(二)

本文通过具体实例,详细介绍了SQL中的Inner Join和Outer Join语句的使用方法,并对比了它们与多表查询的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

软件开发高手须掌握的4大SQL精髓语句(二)

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 马根峰</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> ( 广东联合电子收费股份有限公司, 广州 510300)</wbr></wbr></wbr>

<wbr></wbr>

作者博客:

优快云博客:http://blog.youkuaiyun.com/magenfeng

新浪博客:<wbr><a href="http://blog.sina.com.cn/magenfeng"><span style="color:#0057f5">http://blog.sina.com.cn/magenfeng</span></a></wbr>

QQ空间:<wbr><a href="http://user.qzone.qq.com/630414817/main"><span style="color:#0057f5">http://user.qzone.qq.com/630414817/main#</span></a>!</wbr>

<wbr></wbr>

<wbr></wbr>

0<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>引言<wbr></wbr><wbr></wbr>

<wbr></wbr>

随着计算机在社会各领域应用的深入,软件开发人员不得不面临着或多或少的数据处理、数据库访问。

在SQL(Structured Query Language)语言DML中,有四大语句堪称其精髓部分。下面就讲述一下其中之一,

Left Outer Join |<wbr> Left Join |<wbr> Right Outer Join |<wbr> Right Join |<wbr> Inner Join</wbr></wbr></wbr></wbr> <wbr>语句的用法。</wbr>

<wbr></wbr>

内连接:当实现同等连接和非同等连接时,分别使用等于和不等于运算符表示的连接条件,匹配源表和目标表中的行,这些连接称为内连接(inner join)。这个和用select查询多表是一样的效果,所以很少用到;等同于 From a,b where a.X=b.X

语法如下:

Select <要选择的字段>

From <主要资料表><wbr></wbr>

inner join < 次要资料表> [On 规则 ]<wbr></wbr>

<wbr></wbr>

外连接:当返回内连接没有包含的行时实现外连接(Outer Join)。外连接分为:左外连接,右外连接,全外连接。left join 是left outer join的简写,left join默认是outer属性的;right join 是right outer join的简写,right join默认是outer属性的。

<wbr></wbr>

语法如下:

Select <要查询的字段>

From <<资料表><wbr></wbr>

[Outer] Join <次要资料表>[On 规则 ]<wbr></wbr><wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

1<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>本例所用工具简单说明

<wbr></wbr>

下面就以MS ACCESS数据库为例,以“万能数据库查询分析器” 中文版本《DB 查询分析器》、英文版本《DB Query Analyzer》作为客户端工具来来演示一下Inner Join 和 Outer Join 语句的用法。

之所以选择“万能数据库查询分析器”作为客户端工具,主要是因为,一方面,“万能数据库查询分析器”具有强大的功能、友好的操作界面、良好的操作性、跨越数据库平台。在《程序员》2007第2期的“新产品&工具点评”部分,编辑“特别推荐”了“万能数据库查询分析器”发布。

另一方面,截止到目前,中文版本DB查询分析器》在国内最著名的软件下载网站“中关村在线”中下载量近9万次,位居整个数据库类排行谤中前20位。

<wbr></wbr>

<wbr>在OutJoin.mdb 中有三个数据表,本例中用到如下两个:</wbr>

<wbr><wbr> Tb_road (AREANO, ROADNO, ROADNAME, STATUS)</wbr></wbr>

Tb_vehcount (ROADNO, MONTHS, ROADFLUX)

<wbr></wbr>

另外:要先使用“控制面板”中“管理工具”下的“数据源(ODBC)”创建数据源OuterJoinAccess ;或者用《DB 查询分析器》/《DB Query Analyzer》中“工具/tools”菜单下的“ODBC数据源管理器/ODBC Data Source Manager”来创建数据源OuterJoinAccess

<wbr><wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

2<wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>“万能数据库查询分析器”中文版本《DB查询分析器》为例

<wbr></wbr>

下面就以MS ACCESS数据库为例,以“万能数据库查询分析器” 中文版本《DB 查询分析器》在Windows XP上运行,来为客户端工具来来演示一下Outer Join 、 Inner Join 语句的使用。请记住下面的两句话

A<wbr></wbr> Left<wbr><wbr>join<wbr> B<wbr><span style="color:fuchsia">Left</span><span style="color:fuchsia">表明左边的表</span><span style="color:fuchsia">A</span><span style="color:fuchsia">是全集</span><span style="color:red">;</span></wbr></wbr></wbr></wbr>

A<wbr></wbr> Right<wbr> join<wbr> B<wbr><span style="color:fuchsia">Right</span><span style="color:fuchsia">表明右边的表</span><span style="color:fuchsia">B</span><span style="color:fuchsia">是全集</span><span style="color:red">;</span></wbr></wbr></wbr>

<wbr></wbr>

运行《DB 查询分析器》,连接上数据源OuterJoinAccess ,用户名与口令均为空(MS ACCESS数据库可不用密码和口令),然后输入以下命令:

select*

fromtb_road<wbr></wbr>


<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>1<wbr><wbr></wbr></wbr> tb_road表内容

<wbr></wbr>

select*

fromtb_ vehcount


<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>2<wbr><wbr></wbr></wbr> tb_vehcount表内容

<wbr></wbr>

SELECT a.AREANO, a.ROADNO, a.ROADNAME, a.STATUS, b.ROADNO, b.MONTHS, b.ROADFLUX

FROM tb_road AS a LEFT JOIN tb_vehcount AS b ON a.ROADNO = b.ROADNO;


<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>3<wbr><wbr></wbr></wbr> Left Join执行结果<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

SELECT a.areano, a.roadno, a.roadname, a.status, b.roadno, b.MONTHS, b.ROADFLUX

FROM tb_road AS a RIGHT JOIN tb_vehcount AS b ON a.roadno=b.roadno;


<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>4<wbr><wbr></wbr></wbr> Right Join执行结果<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

SELECT a.areano, a.roadno, a.roadname, a.status, b.roadno, b.MONTHS, b.ROADFLUX

FROM tb_road AS a INNER JOIN tb_vehcount AS b ON a.ROADNO=b.ROADNO;


<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
5<wbr><wbr></wbr></wbr> Inner Join执行结果<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

SELECT a.areano, a.roadno, a.roadname, a.status, b.roadno, b.MONTHS, b.ROADFLUX

FROM tb_road AS a, tb_vehcount AS b

where a.ROADNO=b.ROADNO;


<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
6<wbr><wbr></wbr></wbr> select查询多表执行结果<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

3<wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>“万能数据库查询分析器”英文版本《DB Query Analzyer》为例

<wbr></wbr>

下面就以MS ACCESS数据库为例,以“万能数据库查询分析器” 英文版本《DB Query Analyzer》在Windows 2000上运行,来作为客户端工具来来演示一下Outer Join 、 Inner Join 语句的使用。请记住下面的两句话

A<wbr></wbr> Left<wbr><wbr> join<wbr> B<wbr><span style="color:fuchsia">Left</span><span style="color:fuchsia">表明左边的表</span><span style="color:fuchsia">A</span><span style="color:fuchsia">是全集</span><span style="color:red">;</span></wbr></wbr></wbr></wbr>

A<wbr></wbr> Right<wbr> join<wbr> B<wbr><span style="color:fuchsia">Right</span><span style="color:fuchsia">表明右边的表</span><span style="color:fuchsia">B</span><span style="color:fuchsia">是全集</span><span style="color:red">;</span></wbr></wbr></wbr>

<wbr></wbr>

运行《DB Query Analyzer》,连接上数据源OuterJoinAccess ,用户名与口令均为空(MS ACCESS数据库可不用密码和口令),然后输入以下命令:

<wbr></wbr>

select*

fromtb_road


<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
1<wbr><wbr></wbr></wbr> tb_road表内容

<wbr></wbr>

select*

fromtb_ vehcount

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>2<wbr><wbr></wbr></wbr> tb_vehcount表内容

<wbr></wbr>

SELECT a.AREANO, a.ROADNO, a.ROADNAME, a.STATUS, b.ROADNO, b.MONTHS, b.ROADFLUX

FROM tb_road AS a LEFT JOIN tb_vehcount AS b ON a.ROADNO = b.ROADNO;


<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
3<wbr><wbr></wbr></wbr> Left Join执行结果<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

SELECT a.areano, a.roadno, a.roadname, a.status, b.roadno, b.MONTHS, b.ROADFLUX

FROM tb_road AS a RIGHT JOIN tb_vehcount AS b ON a.roadno=b.roadno;


<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
4<wbr><wbr></wbr></wbr> Right Join执行结果<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

SELECT a.areano, a.roadno, a.roadname, a.status, b.roadno, b.MONTHS, b.ROADFLUX

FROM tb_road AS a INNER JOIN tb_vehcount AS b ON a.ROADNO=b.ROADNO;


<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
5<wbr><wbr></wbr></wbr> Inner Join执行结果<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

SELECT a.areano, a.roadno, a.roadname, a.status, b.roadno, b.MONTHS, b.ROADFLUX

FROM tb_road AS a, tb_vehcount AS b

where a.ROADNO=b.ROADNO;


<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
6<wbr><wbr></wbr></wbr> select查询多表执行结<wbr><wbr></wbr></wbr>

软件开发高手须掌握的4SQL精髓语句系列:

<wbr></wbr>

软件开发高手须掌握的4大SQL精髓语句(四)

http://blog.youkuaiyun.com/magenfeng/article/details/8050612

<wbr></wbr>

软件开发高手须掌握的4大SQL精髓语句(三)

http://blog.youkuaiyun.com/magenfeng/article/details/8015093

软件开发高手须掌握的4大SQL精髓语句(二)

http://blog.youkuaiyun.com/magenfeng/article/details/8003558

<wbr></wbr>

软件开发高手须掌握的4大SQL精髓语句(一)

http://blog.youkuaiyun.com/magenfeng/article/details/7969385

<wbr></wbr>

<wbr></wbr>

《程序员》“特别推荐”了“万能数据库查询分析器”:

<wbr></wbr>

在《程序员》2007第2期的“新产品&工具点评”部分,编辑“特别推荐”了“万能数据库查询分析器”发布。

http://blog.youkuaiyun.com/magenfeng/article/details/7192368

<wbr></wbr>

《DB 查询分析器》使用技巧 系列:

<wbr></wbr>

《DB 查询分析器》使用技巧之(一)

http://blog.youkuaiyun.com/magenfeng/article/details/7189174

<wbr></wbr>

《DB 查询分析器》使用技巧之(二)

http://blog.youkuaiyun.com/magenfeng/article/details/7189176

<wbr></wbr>

《DB 查询分析器》使用技巧之(三)

http://blog.youkuaiyun.com/magenfeng/article/details/7192402

<wbr></wbr>

《DB 查询分析器》使用技巧之(四)

http://blog.youkuaiyun.com/magenfeng/article/details/7195059

<wbr></wbr>

《DB 查询分析器》使用技巧之(五)

http://blog.youkuaiyun.com/magenfeng/article/details/7196846

<wbr></wbr>

《DB 查询分析器》使用技巧之(六)

http://blog.youkuaiyun.com/magenfeng/article/details/7164432

<wbr></wbr>

《DB 查询分析器》使用技巧之(七)

http://blog.youkuaiyun.com/magenfeng/article/details/7197934

<wbr></wbr>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值