我们现在需要查询输出一个客户列表,如果该客户有订单表中,要求包含订单资料。这个查询能使用内连接吗?我们试试:
select customer.*,order.one,order.goods fromcustomer,order where customer.cno=order.cno
输出结果为:
cnonameaddressage onogoods
1张三长沙25101牙刷
3王五上海36301电风扇
很显然,这不是我们所要的结果,由于内连接返回查询结果集合中的仅是符合查询条件和连接条件的行,在order表中找不到对应李四这个客户编号的任何订单记录,不满足连接条件,因此李四没有出现在查询结果中。必须使用左外连接才能得到预期结果。
以custmoer为左表,以order表为右表,左外连接的特点是保证左表的满足查询条件的所有记录无论是否符合连接条件,都会出现在查询结果中,那些不满足条件的左表记录的右表相应字段将输出为空值。
下面是完成这个查询功能的左连接SQL语句。实际开发中,Oracle、SqlServer主流数据库管理系统使用较多,因此对本文所有的外连接操作,笔者分别列出了这两种数据库的SQL语句。
Oracle:(Oracle的风格与众不同,可理解为左连接中符号+所在边的表就是右表)
select customer.*,order.one,order.goods fromcustomer,order where customer.cno=order.cno(+)
Sql Server(access与SqlServer相同):
select customer.*,order.one,order.goods from customer leftjoin order on customer.cno=order.cno
运行一下,查询结果如下:
cnonameaddressage onogoods
1张三长沙25101牙刷
2李四北京21
3王五上海36301电风扇
完全符合要求,上述例子,如果以custmoer为左表,以order表为右表,进行右外连接查询,完成的功能是查询所有订了货的客户名单。
Oracle:(Oracle的风格与众不同,可理解为右连接中符号+所在边的表就是左表)
select customer.*,order.one,order.goods fromcustomer,order where customer.cno(+)=order.cno
Sql Server(access与SqlServer相同):
select customer.*,order.one,order.goods from customerright join order on customer.cno=order.cno
运行后查询结果与使用内连接结果居然一致辞,细想一下,对于右连接而言,右表order中的所有满足查询条件的记录都会在输出结果中,order表中没有不符合连接条件的记录,因此与内连接一样。
外连接虽方便实用,但消耗的资源非常之多,因为它们包含与 NULL(不存在)数据匹配的数据,只能在不可避免的情况下使用它,被过度使用,代价可能非常高。避免使用外连接最简单方法是尽可能多地围绕它们设计数据库,避免数据库的人为设计造成外连接语句的过多使用。
相关推荐
可以实现所有的XML解析,通过JDBC连接ORACLE,SQL SERVER,MYSQL,DB2等数据库,是一个通用的连接池.
dom4j解析xml,连接oracle数据库实例
kettle 连接 clickhouse数据库 所有包
例如耽搁查询 的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作UPDATE,INSERT, DELETE还不能并行处理。 ...
数据库技术与应用 连接查询-E名称解析与常见问题.doc 学习资料 复习资料 教学资源
java 连接数据库详细解析 连接各种数据库 用各种方式连接 。。。方便您的使用
VB与VB与数据库连接的解析实例数据库连接的解析实例
本文分析了使用IP地址连接SQL Server数据库的速度慢的原因,介绍了获取最新的Microsoft SQL Server 2000 Service Pack、最新的Microsoft Data Access Components 2.6 Service Pack来解决此问题。
导出 MySQL数据库表结构word设计文档,一键连接数据库,直接导出库表结构、字段解析、自动排序 导出 MySQL数据库表结构word设计文档,一键连接数据库,直接导出库表结构、字段解析、自动排序 导出 MySQL数据库表结构...
JAVA串口助手接收串口来的数据,并将数据解析存储入MySQL数据库中,在使用前串口需要有设备,同时自己创建数据库与数据表,见README
NULL 博文链接:https://baihe747.iteye.com/blog/2128506
建立数据库后需要建立ODBC连接到数据库,建立的方法可以参考图书第一章1.6.4小节中的小知识。第一章程序通过INI文件直接连接数据库,后面各个实例对应的ODBC数据源名称分别为:hrmlink、mrplink、caiwulink、...
pdm连接oracle实用经验
教你如何连接数据库解析Kettle中的json串
从数据库中访问数据库以JSON格式返回数据,在Android手机端将返回的数据 以JSON的格式解析出来。 本文件中的mysql.sql是我测试是的数据库,在测试的时候先将这个文件 导入到本机的mysql数据库中的(至于怎样导入...
Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。
json报文的解析,写入数据库; 通过数据库取值,生成json报文
Web.Config中数据库连接字符串解析[文].pdf
Web.Config中数据库连接字符串解析[参考].pdf
ORA-12154: TNS: 无法解析指定的连接标识符的解决方法