`
kidiaoer
  • 浏览: 818744 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Oracle PL-SQL中 左连接和右连接用法

阅读更多
Oracle PL-SQL中 左连接和右连接用法
在Oracle PL-SQL中,左连接和右连接以如下方式来实现
   查看如下语句:
SELECT emp_name, dept_name
FORM Employee, Department
WHERE Employee.emp_deptid(+) = Department.deptid

   此SQL文使用了右连接,即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。

反之:
SELECT emp_name, dept_name
FORM Employee, Department
WHERE Employee.emp_deptid = Department.deptid(+)则是左连接,无论这个员工有没有一个能在Department表中得到匹配的部门号,这个员工的记录都会被显示


有两个表T1和T2,两个表除了主键索引外均无其他索引,这两个表由T1.F1(主键),T2.F2(主键)进行左连接,SQL语句有两种写法:
1. SELECT * FROM T1,T2 WHERE T1.F1=T2.F2(+)
2. SELECT * FROM T1 LEFT JOIN T2 ON T1.F1=T2.F2

当查看1的执行计划时发现T1为全表扫描,T2为索引扫描。
当查看2的执行计划时发现两个表均为全表扫描。

介绍表连接,更确切的说是inner joins內连接.
內连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来。
为更好的理解这个概念,我们介绍两个表作演示。苏格兰议会中的政党表(party)和议员表(msp)。

party(Code,Name,Leader)
Code: 政党代码
Name: 政党名称
Leader: 政党领袖

msp(Name,Party,Constituency)
Name: 议员名
Party: 议员所在政党代码
Constituency: 选区

在介绍左连接、右连接和全连接前,有一个数据库中重要的概念要介绍一下,即空值(NULL)。

A left join(左连接)包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
同理,也存在着相同道理的 right join(右连接),即包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。
而full join(全连接)顾名思义,左右表中所有记录都会选出来。

讲到这里,有人可能要问,到底什么叫:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
Ok,我们来看一个实例:

SELECT msp.name, party.name
FROM msp JOIN party ON party=code

这个是我们上一节所学的Join(注意:也叫inner join),这个语句的本意是列出所有议员的名字和他所属政党。
你亲自执行一下该语句,看看结果是什么。

很遗憾,我们发现该查询的结果少了两个议员:Canavan MSP, Dennis。为什么,因为这两个议员不属于任
和政党,即他们的政党字段(Party)为空值。那么为什么不属于任何政党就查不出来了?这是因为空值在
作怪。因为议员表中政党字段(Party)的空值在政党表中找不到对应的记录作匹配,即
FROM msp JOIN party ON party=code 没有把该记录连接起来,而是过滤出去了。
在该短语中,msp在Join的左边,所有称为左表。party在Join的右边,所有称为右表。

Ok,现在再看看这句话,“包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录”,
意思应该很明白了吧。执行下面这个语句,那两个没有政党的议员就漏不了了。

SELECT msp.name, party.name
FROM msp LEFT JOIN party ON party=code

关于右连接,看看这个查询就明白了:

SELECT msp.name, party.name
FROM msp RIGHT JOIN party ON msp.party=party.code

这个查询的结果列出所有的议员和政党,包含没有议员的政党,但不包含没有政党的议员。

那么既要包含没有议员的政党,又要包含没有政党的议员该怎么办呢,对了,全连接(full join)。

SELECT msp.name, party.name
FROM msp FULL JOIN party ON msp.party=party.code

分享到:
评论

相关推荐

    Oracle PL-SQL编程详解.pdf

    PL/SQL是Oracle数据库系统专用的一种过程化编程语言,它结合了SQL的查询能力并扩展了其功能,使得在数据库管理、事务处理和复杂业务逻辑中更具灵活性和效率。 1. PL/SQL程序设计简介: - PL/SQL的引入是因为SQL...

    Oracle PL-SQL语言教程(简体中文pdf版

    Oracle PL-SQL(Procedural Language/Structured Query Language)是Oracle数据库系统中的一种编程语言,它结合了SQL的查询功能和传统编程语言的控制结构,用于创建复杂的数据库应用程序。本教程将带你深入理解...

    Oracle PL-SQL 中联模拟笔试题

    Oracle PL-SQL是一种强大的数据库编程语言,用于在Oracle数据库环境中创建和管理复杂的业务逻辑和数据处理任务。在“Oracle PL-SQL 中联模拟笔试题”中,你可以期待一系列旨在测试和提升你对PL-SQL理解的题目。这些...

    OraclePL-SQL.rar_ORACLE PL_oracle_oracle sql

    掌握基本的SELECT、INSERT、UPDATE、DELETE语句,以及JOIN、GROUP BY、HAVING、子查询等高级SQL用法,是PL/SQL编程的关键。 5. **PL/SQL控制结构**:包括IF-THEN-ELSIF-ELSE、CASE语句进行条件判断,WHILE、FOR循环...

    ORACLE PL-SQL超经典面试题

    Oracle PL/SQL是Oracle数据库系统中的重要组成部分,用于创建复杂的业务逻辑和数据库处理。以下是对题目中提到的一些关键知识点的详细解释: 1. **冷备份与热备份**:冷备份是在数据库关闭状态下进行的,简单且可靠...

    oracle PL-SQL 基础

    根据提供的文件信息,我们可以深入探讨Oracle PL/SQL的基础知识点,包括其历史背景、优势、基本结构、以及变量的定义和使用等内容。 ### PL/SQL的历史 PL/SQL(Procedural Language for SQL)是一种专门为Oracle...

    Oracle-Pl-Sql.rar

    8. **数据库连接与游标变量**:在PL/SQL中,可以使用游标变量进行连接管理和数据传输,这对于在程序中实现复杂的数据交互至关重要。 9. **PL/SQL中的事务管理**:事务是一系列数据库操作的集合,可以确保数据的一致...

    Oracle PL-SQL语言初级教程

    - **紧密集成:** PL/SQL被深度整合到Oracle服务器和其他工具中,使得开发者可以利用其强大的功能而不必担心兼容性问题。 #### 二、复合数据类型 **关键知识点:** 复合数据类型包括**记录**和**集合**,它们是PL/...

    Oracle PL-SQL 基础.pdf

    Oracle PL/SQL是一种强大的编程语言,它被广泛用于在Oracle数据库环境中编写数据库应用程序。PL/SQL结合了SQL的查询和数据操作能力与一种结构化编程语言的特性,从而提供了更高级别的控制和效率。 PL/SQL的历史可以...

    ORACLE PL-SQL经典面试题

    在Oracle数据库中,PL/SQL是一种过程化语言,它结合了SQL的查询能力和高级编程语言的功能,常用于数据库管理、应用程序开发等场景。面试中,关于Oracle PL/SQL的经典问题通常涉及数据库架构、数据类型、异常处理、表...

    精典oracle PL-SQL编程-最好教材

    Oracle PL/SQL编程是数据库开发领域中的核心技术,尤其在Oracle数据库系统中扮演着核心角色。本书《精典Oracle PL-SQL编程》被视为该领域的优秀教材,涵盖了PL/SQL的全面入门知识,旨在帮助读者深入理解和熟练掌握这...

    Oracle PL-SQL(日本語版).pdf

    ### Oracle PL/SQL(日本語版).pdf #### 一、PL/SQL简介 - **定义**:PL/SQL(Procedural Language for SQL)是一种过程化语言扩展,用于增强标准SQL的功能。它将过程控制功能添加到SQL之上,使得开发者能够编写更...

    ORACLE PL-SQL面试题

    Oracle PL/SQL是一种在Oracle数据库中进行存储过程和复杂业务逻辑处理的编程语言。它结合了SQL用于数据查询和操纵的威力,与PL/SQL的结构化编程元素,如流程控制、变量和函数。以下是对给定面试题中涉及的一些核心...

    PL-SQL 帮助文件 PL-SQL 帮助文件

    PL-SQL,全称为Procedural Language/Structured Query Language,是Oracle数据库系统中的一种扩展的SQL语言,它结合了SQL的查询能力与编程语言的控制结构,使得开发者能够编写存储过程、函数、触发器等复杂数据库...

    PL-SQL

    标题:PL-SQL 描述:PL-SQL基本语法,基本使用 知识点详述: ### 一、PL-SQL概述 ...通过理解和掌握PL-SQL的基本语法和使用方法,可以极大地提升开发人员在数据库层面进行数据管理和处理的能力。

    Oracle.PL-SQL.Programming,4th.Ed.chm

    Oracle PL/SQL编程是数据库管理和开发中的核心技能之一,尤其对于使用Oracle数据库系统的专业人士来说,掌握PL/SQL语言是至关重要的。"Oracle.PL-SQL.Programming,4th.Ed.chm"是一个关于Oracle PL/SQL编程的第四版...

Global site tag (gtag.js) - Google Analytics