oracle中查询结果集的集合操作

  • A+
所属分类:技术

chatGPT账号

-- 使用集合操作符 ----

--4个:union  union all 、intersect、minus

--集合操作就是按照特定的规则,将两个查询的结果集合并成一个

--所有的集合操作必须满足:

--要合并的两个查询的select列表必须在数量上以及相应列的数据类型上保持一致。

 

--1、union

--直接将两个查询的结果集合并在一起

--特点

--1)会去掉两个结果集中的重复行

--2)最终结果集默认以第一个查询的第一个列做升序排序

--查询所有雇员当前的和曾经干过的工作

SELECT employee_id,job_id

FROM employees

UNION

SELECT employee_id,job_id

FROM job_history;

 

--2、union all

--直接将两个查询的结果集合并在一起

--特点:

--1)不会去掉两个结果集中的重复行

--2)最终结果集不排序

--查询所有雇员当前的和曾经干过的工作和部门

SELECT employee_id,job_id,department_id

FROM employees

UNION ALL

SELECT employee_id,job_id,department_id

FROM job_history

order by employee_id;

 

--3、intersect:交集

--返回两个查询结果集中的重复行

--特点:

--1)最终结果集默认以第一个查询的第一个列做升序排序

--查询现在干的工作和曾经换过的某个工作相同的雇员的信息

SELECT employee_id,job_id

FROM employees

intersect

SELECT employee_id,job_id

FROM job_history;

 

--4、minus:减

--从第一个查询的结果集中减去第二个查询结果集中的重复行,第一个查询结果集中剩下的

--行就是所要的

--特点:

--1)最终结果集默认以第一个查询的第一个列做升序排序

--查询从未换过工作的雇员的编号

SELECT employee_id

FROM employees

minus

SELECT employee_id

FROM job_history;

 

-- 手工匹配select列表 ---

--问题:以下两个查询能否直接合并?

SELECT location_id,department_name

from departments;

 

SELECT location_id,state_province

FROM locations;

--不能直接合并。因为department_name和state_province列的业务含义不一样,

--直接合并在一起显示,会造成混淆。

 

--解决办法:把业务含义不一样的列错开,在原来的位置上补字面量null或者0(根据

--列的数据类型)

SELECT location_id,department_name,to_char(null) state_province

FROM departments

union

SELECT location_id, to_char(null) ,state_province

FROM locations;

 

--注意:最终结果集的列标题是由第一个查询的select列表决定的,和第二个查询的

--列名没有任何关系

 

--使用order by子句--

--只能写在最后面的查询中。

本文由 知点 首发于【知点网http://www.zhidnet.com)】未经允许不得以任何方式转载,违者必将追究法律责任。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的电报
  • 这是我的电报扫一扫
  • weinxin
chatGPT账号
知点

发表评论

您必须登录才能发表评论!