有时候,我们需要把很多表的查询结果给合并在一起显示或者导出,有时候呢我们又需要几张表联合一些条件进行查询,所以我们常会用到join和union语句。

官方说明

包含UNION [ALL], INTERSECT, MINUS三个操作符,具有相同的优先级(可以用(...)进行改变优先级),含有多个的时候,自左至右进行计算。

在每个组成UNION查询的子查询中,其select list(选择列表)必须具有相同的数量和数据组类型。

如果子查询选择的是字符数据,其返回值的数据类型由下决定:所有的子查询选择的char值具有相同的length,返回值就是char(length)。如果查询的值类型分别是char(length1), char(length2)...,其返回值是varchar2(max(length1,length2,...))

如果子查询选择的值都是varchar2,那么返回值就是varchar2。

对于选择的是数值数据:

任何一个查询选择的值是binary_double,其返回值就是binary_double。

任何一个查询选择的值是binary_float,其返回值就是binary_float。

所有查询选择的值是number,其返回值才是number。

使用这几个集操作符的时候,Oracle不会进行隐含的数据类型组之间的转换。所以,如果查询包含number和char类型的话,Oracle返回一个错误。

比如:select '3' from dual

intersect

select 3f from dual;

会返回一个错误。但:select 3 from dual

intersect

select 3f from dual;

则会被在类型组内隐含进行转换成:select to_binary_float(3) from dual

intersect

select 3f from dual;

限制

集操作符服从以下限制:对列类型为BLOB, CLOB, BFILE, VARRAY或者嵌套表无效。

UNION, INTERSECT, MINUS对LONG列无效。

在集操作符前的选择列表包含表达式的话,那么必须得对列设置别名以便后面在order by clause内使用。

不能用for_update_clause共用

在这些操作符的子查询内不能使用order_by_clause

You cannot use these operators in SELECT statements containing TABLE collection expressions.

Example查询中to_char(null)用在当表中没有某列的时候来匹配数据类型。SELECT location_id, department_name "Department",

TO_CHAR(NULL) "Warehouse" FROM departments

UNION

SELECT location_id, TO_CHAR(NULL) "Department", warehouse_name

FROM warehouses;

union操作符联合结果中不重复的结果,union all联合所有的结果。SELECT product_id FROM order_items

UNION

SELECT product_id FROM inventories;

SELECT location_id FROM locations

UNION ALL

SELECT location_id FROM departments;

INTERSECT相交操作符联合子查询中都有的行。SELECT product_id FROM inventories

INTERSECT

SELECT product_id FROM order_items;

MINUS相减操作符联合第一个查询的行并且没有在第二个查询中出现的行(同时会去重)。SELECT product_id FROM inventories

MINUS

SELECT product_id FROM order_items;

JOIN

官方说明

JOIN用来从两或多个表、视图、物化视图中结合数据。在FROM后面的表都会进行一个JOIN操作,这样我们就可以用SELECT语句查询这个JOIN中的任意列。当然,如果这些表中有相同名的列,就要用tbl.col这样的形式来来完整引用列了。

Join Conditions

大多数join查询有一个Join Condition,可能出现在FROM或WHERE语句中,其会比较从不同表中的两列。对Join Contidion为TRUE的行,就把两个表中那一行组合成一行。需要注意的是不能出现在select list中。

对与join三个或以上的表,Oracle首先Join根据Join ConditionJoin前两个表,然后再把表这个结果和新表根据Join Conditon进行Join,直到把所有表都Join完。Oracle的Optimizer了决定Join的顺序。

Equijoins

一个equijoin就是Join Condition包含一个等号,对指定的列具有相等的值的行进行Join。

Self Joins

表本身进行Join。在FROM后出现两次,并且跟随别名。

Cartesian Products(笛卡尔乘积)

如果一个Join查询不包含Join Conditon,那么Oracle返回的就是一个他们的Cartesian product。这个结果一般没有什么用,所以Join的时候最后都指定Join Conditon。

Inner Joins(simple join)

只Join满足的行。

Outer Joins

Outer Join扩展了simple join的结果。一个outer join返回所有满足Join Conditon的行,同时从一个不满足条件的表返回一些或所有行。

LEFT [outer] JOIN

想要Join表 A,B,同时返回A的所有行。在FROM后面使用left [outer] join语句,或者在WHERE语句中的Join Conditon对B的所有列使用outer join operator(+)。对A在B中没有匹配行,在B的列中就会返回NULL。

举个例子

有一个属地代码表md_area(areano, name)。

有一个用户表users(mdn,areano,….)。

我现在要统计users表中各属地的用户数,还要根据代码显示出属地名称,以便更加直观的进行统计。select area, areaname, ct from

(select areano as area, count(*) as ct from users group by areano) t1

left join

(select areano, name as areaname from md_area t2) on t2.areano = t1.area;

Right [outer] Join

接上例,其等于:select area, areaname, ct from

(select areano, name as areaname from md_area t2)

right join

(select areano as area, count(*) as ct from users group by areano) t1

on t2.areano = t1.area;

Antijoins (反连接)

Semijoins (半连接)

oracle union详解,Oracle中的union和join相关推荐

  1. oracle scur,详解Oracle游标的简易用法

    下面看下Oracle游标的简易用法,具体代码如下所示: create or replace procedure NW_DelYW(iOPERATION_ID number, sUserID varch ...

  2. oracle union详解,oracle union用法 oracle中union的用法

    oracle中union的用法 只知道是用来左联接的,还有类似union all,谁有这个例子,要解释详细一点的一生中要有两次冲动,一次奋不顾身的爱情,一次为说走就走的旅行. UNION 指令的目的是 ...

  3. oracle dataguard详解,Oracle 19c 新特性详解:DataGuard 中ADG的自动DML重定向

    Oracle 19c 新特性详解:DataGuard 中ADG的自动DML重定向 在前面的文章<Oracle 19c 十大新特性一览>中,我们曾经提到 Oracle 19c的一个重要增强, ...

  4. 【ORACLE】详解oracle数据库UTL_RAW包各个函数的模拟算法

    前言 这篇文章可能是你至今(2022-02-11)能在互联网看到的,关于utl_raw包的逻辑说得最深入的一篇文章了. 由于最近在复刻oracle中自带的包到其他数据库,因此需要对oracle中的包的 ...

  5. mysql union详解_MySQL 联合查询union详解-Fun言

    一.UNION和UNION ALL的作用和语法 UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行. UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须 ...

  6. oracle union详解,oracle union 及union all用法及差异

    oracle union 及union all用法及区别 union 用法 union指令的目的是将两个sql语句的结果合并起来,可以查看你要的查询结果. 使用uniton需要满足的条件. 1 所有查 ...

  7. oracle recyclebin详解,oracle recyclebin详解

    今天在SOA应用数据库上运用DBMS_REDEFITION包进行在线非分区表转换分区表操作时,本想DROP掉建的临时表cube_scope_temp不小心后面忘记加"temp"直接 ...

  8. oracle dataguard详解,Oracle DataGuard数据备份方案详解

    Oracle DataGuard是一种数据库级别的HA方案,最主要功能是冗灾.数据保护.故障恢复等. 在生产数据库的"事务一致性"时,使用生产库的物理全备份(或物理COPY)创建备 ...

  9. oracle sum详解,oracle sum()聚合函数

    原文链接:https://blog.csdn.net/cizatu5130/article/details/100291347 oracle sum()聚合函数 2016-05-13 20:08:00 ...

最新文章

  1. MSSQL Server 导入/导出到远程服务器
  2. 陈松松:如何锁定细分领域,视频营销才更容易持续做下去
  3. P3810 【模板】三维偏序(陌上花开)
  4. windows 下 安装mysql 出现 “ ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password
  5. linux mysql 共享存储空间_Linux UDEV和为MySQL InnoDB共享表空间配置裸设备
  6. 8 stark组件 展示数据
  7. 冬日圣诞节海报还没灵感?看这里!
  8. 百一测评c语言两个数求和程序,2017计算机二级C语言考前测试题与答案
  9. mysql binlog解析 c_解析MYSQL BINLOG二进制格式(9)--infobin解析binlog帮助文档
  10. CodeForces 689E (离散化+逆元+组合)
  11. RISC-V 能打 50 年!不必期待 RISC-VI —— 对话 RISC-V CTO Mark Himelstein
  12. enclosing type java_Java ResolvedJavaType.getEnclosingType方法代码示例
  13. 大话数据结构 - 串
  14. 高一物理必修第二册公式整理
  15. Vagrant设置局域网访问
  16. Java: Unresolved compilation problem的解决方法
  17. SCI论文写作的学习与总结
  18. 宝塔BT面板专业版(付费)和免费版有什么区别?
  19. css单位vw vh,css3自适应布局单位vw,vh详解
  20. pol点获取及火星坐标系转换

热门文章

  1. java模拟退火程序
  2. 电脑qq文件服务器地址,在电脑上接收QQ地理位置打不开,提示获取不到详细地址...
  3. java.awt.action 命令模式_java设计模式之命令模式
  4. 第6章-一阶多智体系统一致性-->6.1 连续时间多智能体系统一致性
  5. 【DIY】arduino播放音乐方案——TMRpcm
  6. Linux驱动调试中的Debugfs的使用简介
  7. 新建idea加入的一句话,键值对
  8. CSS成长之路----知识点篇
  9. cleanmymac定时清理与垃圾监测
  10. hibernate二级缓存理解