14、Oracle中的Set运算符

最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。
视频链接:
【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用
如果有侵权,请联系删除,谢谢。

学习目标:

  • 描述 SET 操作符
  • 将多个查询用 SET 操作符连接组成一个新的查询
    • UNION/UNION ALL
    • INTERSECT
    • MINUS
  • 排序:ORDER BY

1、 SET 操作符

1.1、UNION 操作符

UNION 操作符返回两个查询的结果集的并集

UNION 操作示例

SELECT employee_id, job_id
FROM   employees
UNION
SELECT employee_id, job_id
FROM   job_history;

1.2、UNION ALL 操作符

UNION ALL 操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。

UNION ALL操作shili

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;

1.3、INTERSECT 操作符

INTERSECT 操作符返回两个结果集的交集

INTERSECT操作示例

SELECT employee_id, job_id
FROM   employees
INTERSECT
SELECT employee_id, job_id
FROM   job_history;

1.4、MINUS 操作符

MINUS操作符:返回两个结果集的差集

假设有集合A和B,所有属于A且不属于B的元素的集合被称为A与B的差集。

示例:对于集合A = {a, b, c, d}和集合B = {b, c, w},则A与B 的差集为{a, d}

MINUS操作示例

SELECT employee_id,job_id
FROM   employees
MINUS
SELECT employee_id,job_id
FROM   job_history;

1.5、使用 SET 操作符注意事项

  • 在SELECT 列表中的列名和表达式在数量和数据类型上要相对应

  • 括号可以改变执行的顺序

  • ORDER BY 子句:

    • 只能在语句的最后出现
    • 可以使用第一个查询中的列名, 别名或相对位置
  • 除 UNION ALL之外,系统会自动将重复的记录删除

  • 系统将第一个查询的列名显示在输出中

  • 除 UNION ALL之外,系统自动按照第一个查询中的第一个列的升序排列

2、匹配各SELECT 语句举例

SELECT department_id, TO_NUMBER(null) 
       location, hire_date
FROM   employees
UNION
SELECT department_id, location_id,  TO_DATE(null)
FROM   departments;

SELECT employee_id, job_id,salary
FROM   employees
UNION
SELECT employee_id, job_id,0
FROM   job_history;

使用相对位置排序举例

COLUMN a_dummy NOPRINT
SELECT 'sing' AS "My dream", 3 a_dummy
FROM dual
UNION
SELECT 'I`d like to teach', 1
FROM dual
UNION 
SELECT 'the world to', 2
FROM dual
ORDER BY 2;

posted @ 2024-08-10 13:07  画个一样的我  阅读(41)  评论(0编辑  收藏  举报