Oracle学习————【子查询和集合运算】

本文深入解析SQL中的子查询与集合运算,涵盖子查询的类型、操作符及注意事项,集合运算的概念、规则与优化技巧,是数据库操作的重要指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 子查询

  • 子查询所要解决的问题:不能一步求解

1.1 子查询的类型

单行子查询:查询只返回一条记录。
多行子查询:查询返回多条记录。

1.1.1 写子查询的时候需要注意的问题

  1. 括号不能省略
  2. 要有合理的书写风格
  3. 可以在主查询的where、select、having、from 后面使用子查询。(select后只能使用单行子查询)
  4. 不可以在group by后使用子查询。
  5. 强调from后面的子查询
  6. 主查询和子查询可以不是同一张表;只要子查询返回的结果 主查询可以使用即可。
  7. 一般不在子查询中排序;但在top-n分析问题中 必须对子查询排序
  8. 一般先执行子查询,再执行主查询;但相关子查询例外。
  9. 单行子查询只能使用单行操作符,多行子查询只能使用多行操作符。
  10. 子查询中的null

SQL优化:在多表查询和子查询都能实现某个结果时,尽量使用多表查询,因为多表查询只select了一次,而子查询往往要select两次

1.2 单行操作符

在这里插入图片描述

1.3 多行操作符

在这里插入图片描述

1.3.1 in

下面是in的实例:
在这里插入图片描述

  • 如果是使用not in的话,子查询集合中不能有null值。

1.3.2 any

下面是any的使用实例
在这里插入图片描述

1.3.3 all

下面是all的使用实例。
在这里插入图片描述

2 集合运算

先看一个需求:
在这里插入图片描述

2.1 什么是集合运算?

在这里插入图片描述

  • 注意:这里的UNION和UNION ALL并不完全相等,UNION ALL是当A集和B集有相同的交集时,AB会都采用相同的那部分,交集部分就包含了两份。而UNION的话就只会维护一份共同集即可。

所以上面“查询10号和20号部门的员工”的SQL我们可以像以下这么写。
在这里插入图片描述

2.2 集合运算需要注意的问题

  1. 参与运算的各个集合必须列数相同且类型一致。
  2. 采用第一个集合作为最后的表头。
  3. order by永远放最后集合中写
  4. 集合运算的顺序可以使用括号来定。

在这里插入图片描述
SQL优化:尽量不要使用集合运算

2.3 SQL执行时间

SQL执行时间怎样来查看呢?
通过执行set timing on来将开关打开。再执行SQL就会显示执行时间了。

如果想关掉则执行set timing off。

内容概要:本文档主要展示了C语言中关于字符串处理、指针操作以及动态内存分配的相关代码示例。首先介绍了如何实现键值对(“key=value”)字符串的解析,包括去除多余空格根据键获取对应值的功能,并提供了相应的测试用例。接着演示了从给定字符串中分离出奇偶位置字符的方法,并将结果分别存储到两个不同的缓冲区中。此外,还探讨了常量(const)修饰符在变量指针中的应用规则,解释了不同类型指针的区别及其使用场景。最后,详细讲解了如何动态分配二维字符数组,并实现了对这类数组的排序与释放操作。 适合人群:具有C语言基础的程序员或计算机科学相关专业的学生,尤其是那些希望深入理解字符串处理、指针操作以及动态内存管理机制的学习者。 使用场景及目标:①掌握如何高效地解析键值对字符串并去除其中的空白字符;②学会编写能够正确处理奇偶索引字符的函数;③理解const修饰符的作用范围及其对程序逻辑的影响;④熟悉动态分配二维字符数组的技术,并能对其进行有效的排序清理。 阅读建议:由于本资源涉及较多底层概念技术细节,建议读者先复习C语言基础知识,特别是指针内存管理部分。在学习过程中,可以尝试动手编写类似的代码片段,以便更好地理解掌握文中所介绍的各种技巧。同时,注意观察代码注释,它们对于理解复杂逻辑非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值