ORACLE复杂查询之连接查询
一、传统的连接查询
1、交叉连接:返回笛卡尔积
WHERE中限定查询条件,可以预先过滤掉掉不符合条件的记录,返回的只是两个表中剩余记录(符合条件的记录)的笛卡尔积。
2、内连接:参与连接的表地位平等,不分主次。两表均可能有丢弃。
(1)等值连接:表间记录的连接是通过相等的字段值为条件建立起来的。
(2)非等值连接:与等值连接类似。如果表间记录的连接条件使用除“=”以外的其它比较运算符(>,>=,<,<=,!>,!<,<>以及BETWEEN…AND等)比较被连接的字段值。注意“BETWEEN (较小值)AND (较大值)”对应闭区间,
3、外连接:参与连接的表分主次。主表不丢弃,从表可能有丢弃。
(1)左外连接:主表在左,从表一侧(右侧)使用“(+)”。
(2)右外连接:同理。
4、自连接:同一个表上的连接查询,令一个表与其自身连接。
注:SELECT子句中的字段别名可以中间使用AS,可以省略;但表名与表别名之间不允许使用AS。
二、SQL92连接语法
在SQL92标准中,除支持前述传统的连接语法之外,还定义了一组新的连接语法体系--在FROM子句中指定连接条件(之前是在WHERE子句中),二者功能几乎完全相互覆盖,只是语法格式有所不同、且SQL92中增加了一种全外连接。SQL92连接语法基本格式如下:
注意:连接条件仍是由被连接表中的字段和比较运算符、逻辑运算符等构成的表达式,使用关键字ON或USING等。
连接类型可分为交叉连接、内连接、外连接三种,并可再细分(下图):
(1)交叉连接的关键字是CROSS JOIN,返回笛卡尔积。例:
(2)等值连接、非等值连接用关键字:[INNER] JOIN,并且用ON代替WHERE指定连接条件及其他查询限定条件;
等值连接可以使用USING子句指定用于等值连接的字段(参照字段)。
自然连接的关键字是NATURAL [INNER] JOIN,基于两个表中的全部同名字段建立等值连接。如果类型不一致会出错。
注意:USING和NATURAL不允许在参照字段(包括SELECT列表中出现的参照字段)上使用表名或表别名作为前缀。此外,ON子句的等值连接不会去除查询结果集中的重复字段,但USING或NATURAL中则会自动去掉重复字段。例如:
(3)左外连接(右外连接同理):主表在左,关键字是LEFT [OUTER] JOIN,ON代替WHERE指定连接条件;
相当于前述传统方式中的从表侧加入“(+)”:
全外连接:关键字是FULL [OUTER] JOIN,ON代替WHERE指定连接条件。
ORACLE复杂查询之连接查询的更多相关文章
- 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表
前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...
- MSSQLServer基础05(联合查询,连接查询)
联合结果集union(集合运算符) 集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定.(可以用来连接多个 ...
- Mysql的查询语句(联合查询、连接查询、子查询等)
Mysql的各个查询语句(联合查询.连接查询.子查询等) 一.联合查询 关键字:union 语法形式 select语句1 union[union选项] select 语句2 union[union选项 ...
- mysql查询、子查询、连接查询
mysql查询.子查询.连接查询 一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.gr ...
- mysql 子句、子查询、连接查询
一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count( ...
- 【知识库】-数据库_MySQL之高级数据查询:去重复、组合查询、连接查询、虚拟表
简书作者:seay 文章出处: 关系数据库SQL之高级数据查询:去重复.组合查询.连接查询.虚拟表 回顾:[知识库]-数据库_MySQL之基本数据查询:子查询.分组查询.模糊查询 Learn [已经过 ...
- 图解SQLSERVER联合查询和连接查询的区别
相信很多人都会用SQLSERVER联合查询和连接查询,但是用起来不一定都得心应手,对于其中的原理可能就模糊不清了,要想很牢固地掌握和运用SQL联合查询和连接查询机制,必须对其根本原理有很清晰认识, ...
- mysql的查询、子查询及连接查询
>>>>>>>>>> 一.mysql查询的五种子句 where(条件查询).having(筛选).group by(分组). ...
- SQL 子查询,连接查询复习
use lianxi0720 go --创建部门表 create table bumen ( bcode int primary key,--部门编号 bname ), --部门名称 bceo ), ...
随机推荐
- Ext JS 6开发实例(二) :使用CMD创建应用程序
由于Ext JS 6将原来的Ext JS和Sencha Touch合并为一个框架,因而在使用CMD来创建应用程序前,需要考虑清楚你是要创建一个通用应用程序,还是仅仅只是针对桌面或移动设备的应用程序. ...
- hive中使用case、if:一个region统计业务(hive条件函数case、if、COALESCE语法介绍:CONDITIONAL FUNCTIONS IN HIVE)
前言:Hive ql自己设计总结 1,遇到复杂的查询情况,就分步处理.将一个复杂的逻辑,分成几个简单子步骤处理. 2,但能合在一起的,尽量和在一起的.比如同级别的多个concat函数合并一个selec ...
- 错误:One or more post-processing actions failed. Consult the OPP service log for details
今天在做采购出入库明细报表的时候,有的时候能正常打印,有的时候报 One or more post-processing actions failed. Consult the OPP serv ...
- Linux技巧:一次删除一百万个文件的最快方法
最初的测评 昨天,我看到一个非常有趣的删除一个目录下的海量文件的方法.这个方法来自http://www.quora.com/How-can-someone-rapidly-delete-400-000 ...
- J2EE进阶(十二)SSH框架整合常见问题汇总(三)
在挂失用户时,发现userid值为空,但是在前台输入处理账号22时,通过后台输出可以看出,后台根据前端输入在数据库中查询到结果对象并输出该对象的userid,而且Guashi对象也获取到了其值. 解决 ...
- [Android游戏开发学习笔记]View和SurfaceView
本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在A ...
- 02-Git简单使用
Git安装(windows) https://code.google.com/p/msysgit/downloads/list 我们使用版本Git-1.7.9版本 百度网盘下载:链接:http://p ...
- [GitHub]第七讲:GitHub issues
文章转载自:http://blog.csdn.net/loadsong/article/details/51591701 Github 上的每个项目仓库,都有三套基础设置可供使用:一个是通过 Gith ...
- 【一天一道LeetCode】#71. Simplify Path
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- MinerConfig.java 爬取配置类
MinerConfig.java 爬取配置类 package com.iteye.injavawetrust.miner; import java.util.List; /** * 爬取配置类 * @ ...