我们现在需要查询输出一个客户列表,如果该客户有订单表中,要求包含订单资料。这个查询能使用内连接吗?我们试试:
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(不存在)数据匹配的数据,只能在不可避免的情况下使用它,被过度使用,代价可能非常高。避免使用外连接最简单方法是尽可能多地围绕它们设计数据库,避免数据库的人为设计造成外连接语句的过多使用。
相关推荐
上传的"upload.ppt"可能包含关于XML解析、JDBC和数据库连接池的详细讲解,可能涵盖了如何配置和使用这些技术,以及它们在实际项目中的应用场景和最佳实践。如果需要深入学习,建议查看该文件内容以获取更具体的信息...
("数据库连接成功"); %> (); stmt.close(); conn.close(); %> ``` **解析:** 1. **加载驱动:** 使用 `Class.forName` 方法加载 Oracle JDBC 驱动。 2. **建立连接:** 设置数据库 URL、用户名和密码,...
数据库查询优化器是数据库管理系统(DBMS)中的一组程序或算法,用于决定执行SQL查询的最佳方式。其核心目标是生成并选择一个高效的执行计划,从而最小化查询的成本,提高数据处理速度和降低系统资源消耗。查询优化...
本文将深入解析数据库连接池的工作原理,以及在Struts框架中如何实现数据库连接池的配置。 ### 数据库连接池工作原理 数据库连接是一种宝贵的系统资源。在传统的数据库访问方式中,每个新的请求都会创建一个新的...
本文将详细介绍如何利用C语言进行数据库连接与简单查询操作,帮助读者更好地理解这一过程。 #### 一、C语言连接SQL数据库概述 在本节中,我们将探讨如何编写一个简单的C程序来连接到SQL数据库,并执行基本的查询...
在IT领域,特别是软件开发行业中,C#作为一门强大的编程语言,被广泛应用于各种应用程序的开发,包括桌面应用、Web应用以及游戏开发等。...通过以上解析,希望能帮助读者更好地理解和运用C#进行数据库连接和操作。
### JAVA 使用数据库连接池连接Oracle数据库全代码解析 #### 一、概述 本文将详细介绍如何在Java项目中使用Apache DBCP(Database Connection Pool)来连接Oracle数据库,并提供完整的示例代码。通过这种方式,我们...
在Java编程中,XML(eXtensible Markup Language)是一种常用的数据交换格式,常用于存储配置信息,包括数据库连接参数。本篇文章将深入探讨如何使用DOM(Document Object Model)和SAX(Simple API for XML)两种...
Derby数据库连接方法详解 Derby数据库连接方法是Java应用程序连接Derby数据库的主要方式。 Derby数据库是一种嵌入式关系数据库管理系统,可以嵌入到Java应用程序中,提供了一个轻量级、可靠的数据库解决方案。 ...
本篇文章将详细解析Delphi通过ADO方式实现数据库连接的源码测试过程。 首先,我们来理解一下ADO的核心组件。在Delphi中,主要使用TADOConnection、TADOCommand、TADODataset等组件来实现数据库操作。TADOConnection...
根据给定的文件信息,以下是对“数据库实验报告-数据库的简单查询和连接查询”的详细解析,涵盖了实验目的、原理、步骤以及实验内容的关键知识点。 ### 实验目的 本实验旨在使学生掌握SQL Server查询分析器的使用...
数据库连接通用模块是软件开发中的一个重要组成部分,它允许应用程序与各种数据库进行交互,实现数据的存取、查询、更新和管理。在不同的编程语言中,如Java、Python、C#等,都有相应的数据库连接库或模块来实现这一...
此外,还可能涉及数据库连接池的使用,以有效地管理和复用数据库连接。查询优化也是关键,例如通过预编译SQL语句减少解析时间,或者使用索引来加速查询。 总之,这个多线程数据库查询软件是一个利用C#和Winfrom技术...
为了实现在图形库与属性库之间的有效管理和动态连接,需要引入如ODBC(开放数据库连接)这样的公共接口。ODBC通过提供一套标准API,使得应用程序能够访问各种SQL数据库,从而解决了不同数据库间的连接问题。 然而,...
- Druid:阿里巴巴开源的数据库连接池,除了基本功能外,还包括监控、SQL解析等特性。 **Java数据库连接方法的实践** 在"java数据库连接方法.doc"文档中,可能详细展示了如何在Java代码中实现上述步骤,包括加载...
首先,需要在项目中引入MySQL的JDBC驱动,然后通过`DriverManager.getConnection()`方法建立数据库连接。接着,编写SQL语句,使用`Statement`或`PreparedStatement`对象执行插入、更新、查询等操作。 5. **数据库与...
本文将深入探讨如何使用Python连接并操作Microsoft Access数据库,这一过程不仅涉及了基础的数据库连接,还包括了数据的读取、写入以及查询等高级功能。 #### 一、环境准备与库导入 在开始之前,确保已安装了...
导出 MySQL数据库表结构word设计文档,一键连接数据库,直接导出库表结构、字段解析、自动排序 导出 MySQL数据库表结构word设计文档,一键连接数据库,直接导出库表结构、字段解析、自动排序 导出 MySQL数据库表结构...
通用数据库查询器的源码可能会采用模块化设计,如将数据库连接、查询执行、结果展示等作为独立的组件。同时,设计模式如工厂模式(用于创建数据库连接)、策略模式(用于切换不同的SQL方言)等也可能在源码中得到...
在本实例中,我们将深入探讨如何使用DOM4J解析XML,并利用这些数据连接Oracle数据库进行数据操作。 首先,让我们了解DOM4J的基本用法。DOM4J的主要类包括`Document`、`Element`、`Attribute`和`Namespace`。`...