`
deepfuture
  • 浏览: 4437126 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80446
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:71006
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:104312
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:287950
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15203
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:68594
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32687
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:46368
社区版块
存档分类
最新评论

解析数据库查询中的外连接

阅读更多

解析数据库查询中的外连接

在信息管理系统的开发中,外连接通常用来完成一些复杂特殊的多表查询,虽不常用,但其作用举足轻重。

什么是外连接呢?简而言之,外连接是指它返回查询结果集合中,不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行,共分为左外连接、右外连接、全外连接三种方式,实际开发中使用较多的是左外连接和右外连接,笔者以一实例来解析这两种外连接。

假设某数据库中有两个数据表,表一是客户表costomer,表二是订单表order,表结构及记录如下:

customer表结构:

cno:客户编号

name:客户名称

address:客户地址

age:客户年龄

 

customer表内容:

cnonameaddressage

1张三长沙25

2李四北京21

3王五上海36

 

order表结构:

cno:客户编号

ono:订单号

goods:所订货物

 

order表内容:

cnoonogoods

1101牙刷

3301电风扇

我们现在需要查询输出一个客户列表,如果该客户有订单表中,要求包含订单资料。这个查询能使用内连接吗?我们试试:

select customer.*,order.one,order.goods fromcustomer,order where customer.cno=order.cno

输出结果为:

cnonameaddressage onogoods

1张三长沙25101牙刷

3王五上海36301电风扇

很显然,这不是我们所要的结果,由于内连接返回查询结果集合中的仅是符合查询条件和连接条件的行,在order表中找不到对应李四这个客户编号的任何订单记录,不满足连接条件,因此李四没有出现在查询结果中。必须使用左外连接才能得到预期结果。

custmoer为左表,以order表为右表,左外连接的特点是保证左表的满足查询条件的所有记录无论是否符合连接条件,都会出现在查询结果中,那些不满足条件的左表记录的右表相应字段将输出为空值。

下面是完成这个查询功能的左连接SQL语句。实际开发中,OracleSqlServer主流数据库管理系统使用较多,因此对本文所有的外连接操作,笔者分别列出了这两种数据库的SQL语句。

Oracle(Oracle的风格与众不同,可理解为左连接中符号+所在边的表就是右表)

select customer.*,order.one,order.goods fromcustomer,order where customer.cno=order.cno(+)

Sql Server(accessSqlServer相同)

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(accessSqlServer相同)

select customer.*,order.one,order.goods from customerright join order on customer.cno=order.cno

运行后查询结果与使用内连接结果居然一致辞,细想一下,对于右连接而言,右表order中的所有满足查询条件的记录都会在输出结果中,order表中没有不符合连接条件的记录,因此与内连接一样。

外连接虽方便实用,但消耗的资源非常之多,因为它们包含与 NULL(不存在)数据匹配的数据,只能在不可避免的情况下使用它,被过度使用,代价可能非常高。避免使用外连接最简单方法是尽可能多地围绕它们设计数据库,避免数据库的人为设计造成外连接语句的过多使用。

 

0
0
分享到:
评论

相关推荐

    XML解析和数据库连接池

    上传的"upload.ppt"可能包含关于XML解析、JDBC和数据库连接池的详细讲解,可能涵盖了如何配置和使用这些技术,以及它们在实际项目中的应用场景和最佳实践。如果需要深入学习,建议查看该文件内容以获取更具体的信息...

    jsp中各种连接数据库方式

    ("数据库连接成功"); %> (); stmt.close(); conn.close(); %> ``` **解析:** 1. **加载驱动:** 使用 `Class.forName` 方法加载 Oracle JDBC 驱动。 2. **建立连接:** 设置数据库 URL、用户名和密码,...

    深入解析数据库查询优化器的工作原理与代码实现

    数据库查询优化器是数据库管理系统(DBMS)中的一组程序或算法,用于决定执行SQL查询的最佳方式。其核心目标是生成并选择一个高效的执行计划,从而最小化查询的成本,提高数据处理速度和降低系统资源消耗。查询优化...

    Struts框架中使用数据库连接池

    本文将深入解析数据库连接池的工作原理,以及在Struts框架中如何实现数据库连接池的配置。 ### 数据库连接池工作原理 数据库连接是一种宝贵的系统资源。在传统的数据库访问方式中,每个新的请求都会创建一个新的...

    怎么使用C语言连接SQL数据库

    本文将详细介绍如何利用C语言进行数据库连接与简单查询操作,帮助读者更好地理解这一过程。 #### 一、C语言连接SQL数据库概述 在本节中,我们将探讨如何编写一个简单的C程序来连接到SQL数据库,并执行基本的查询...

    c#如何连接各类数据库

    在IT领域,特别是软件开发行业中,C#作为一门强大的编程语言,被广泛应用于各种应用程序的开发,包括桌面应用、Web应用以及游戏开发等。...通过以上解析,希望能帮助读者更好地理解和运用C#进行数据库连接和操作。

    JAVA 使用数据库连接池连接Oracle数据库全代码

    ### JAVA 使用数据库连接池连接Oracle数据库全代码解析 #### 一、概述 本文将详细介绍如何在Java项目中使用Apache DBCP(Database Connection Pool)来连接Oracle数据库,并提供完整的示例代码。通过这种方式,我们...

    Java解析XML配置数据库连接(DOM技术连接 SAX技术连接)

    在Java编程中,XML(eXtensible Markup Language)是一种常用的数据交换格式,常用于存储配置信息,包括数据库连接参数。本篇文章将深入探讨如何使用DOM(Document Object Model)和SAX(Simple API for XML)两种...

    连接derby数据库方法—附图

    Derby数据库连接方法详解 Derby数据库连接方法是Java应用程序连接Derby数据库的主要方式。 Derby数据库是一种嵌入式关系数据库管理系统,可以嵌入到Java应用程序中,提供了一个轻量级、可靠的数据库解决方案。 ...

    delphi源码连接测试Ado方式得到数据库连接代码

    本篇文章将详细解析Delphi通过ADO方式实现数据库连接的源码测试过程。 首先,我们来理解一下ADO的核心组件。在Delphi中,主要使用TADOConnection、TADOCommand、TADODataset等组件来实现数据库操作。TADOConnection...

    数据库实验报告-数据库的简单查询和连接查询

    根据给定的文件信息,以下是对“数据库实验报告-数据库的简单查询和连接查询”的详细解析,涵盖了实验目的、原理、步骤以及实验内容的关键知识点。 ### 实验目的 本实验旨在使学生掌握SQL Server查询分析器的使用...

    数据库连接通用模块数据库连接通用模块

    数据库连接通用模块是软件开发中的一个重要组成部分,它允许应用程序与各种数据库进行交互,实现数据的存取、查询、更新和管理。在不同的编程语言中,如Java、Python、C#等,都有相应的数据库连接库或模块来实现这一...

    多线程数据库查询软件

    此外,还可能涉及数据库连接池的使用,以有效地管理和复用数据库连接。查询优化也是关键,例如通过预编译SQL语句减少解析时间,或者使用索引来加速查询。 总之,这个多线程数据库查询软件是一个利用C#和Winfrom技术...

    MapGuide与外部数据库动态连接的实现

    为了实现在图形库与属性库之间的有效管理和动态连接,需要引入如ODBC(开放数据库连接)这样的公共接口。ODBC通过提供一套标准API,使得应用程序能够访问各种SQL数据库,从而解决了不同数据库间的连接问题。 然而,...

    java数据库连接方法(一)

    - Druid:阿里巴巴开源的数据库连接池,除了基本功能外,还包括监控、SQL解析等特性。 **Java数据库连接方法的实践** 在"java数据库连接方法.doc"文档中,可能详细展示了如何在Java代码中实现上述步骤,包括加载...

    JAVA串口助手接收数据并解析数据存入MySQL数据库中

    首先,需要在项目中引入MySQL的JDBC驱动,然后通过`DriverManager.getConnection()`方法建立数据库连接。接着,编写SQL语句,使用`Statement`或`PreparedStatement`对象执行插入、更新、查询等操作。 5. **数据库与...

    Python连接Access数据库

    本文将深入探讨如何使用Python连接并操作Microsoft Access数据库,这一过程不仅涉及了基础的数据库连接,还包括了数据的读取、写入以及查询等高级功能。 #### 一、环境准备与库导入 在开始之前,确保已安装了...

    导出 MySQL数据库表结构word设计文档,一键连接数据库,直接导出库表结构、字段解析、自动排序

    导出 MySQL数据库表结构word设计文档,一键连接数据库,直接导出库表结构、字段解析、自动排序 导出 MySQL数据库表结构word设计文档,一键连接数据库,直接导出库表结构、字段解析、自动排序 导出 MySQL数据库表结构...

    通用数据库查询器源码

    通用数据库查询器的源码可能会采用模块化设计,如将数据库连接、查询执行、结果展示等作为独立的组件。同时,设计模式如工厂模式(用于创建数据库连接)、策略模式(用于切换不同的SQL方言)等也可能在源码中得到...

    dom4j解析xml,连接oracle数据库

    在本实例中,我们将深入探讨如何使用DOM4J解析XML,并利用这些数据连接Oracle数据库进行数据操作。 首先,让我们了解DOM4J的基本用法。DOM4J的主要类包括`Document`、`Element`、`Attribute`和`Namespace`。`...

Global site tag (gtag.js) - Google Analytics