oracle高级部分
回顾
多表关联查询的方式
内连接
根据AB表关联的条件进行过滤查询,只保留满足条件数据
Select * from a,b where a.xxx=b.xxx; Select * from a inner join b on a.xxx=b.xxxx inner join c on a.xxxx=c.xxxx
外连接
左外连接
以左表为驱动表,根据AB表关联的条件进行过滤查询,保留满足条件的数据,以及左边表的所有记录显示
Select * from a left join b on a.xxx=b.xxxx Inner join c on b.xxxx=c.xxxx Select * from a, b(+);
右外连接
和左外连接正好相反
Select * from a right join b on a.xxxx=b.xxxx
等同于: select * from b left join a on a.xxxx=b.xxxx
特殊关联查询
全外连接
左外连接结果+右外连接结果-重复的数据
Select * from a full join b on a.xxxx=b.xxxx
笛卡尔集
两张表或多张表的乘积
Select * from a,b
Select * from a inner join b on 1=1
自连接(A表连接A表进行查询)
Select * from a,a
Select * from a t1 inner join a t2 on t1.xxxx=t2.xxxx
合并查询(union union all)
可以把不同表的结果集合并成一个结果集
(两张表选择列的数量和类型必须保持一致)
SQL1
Union [all]
SQL2
通过union实现全外连接
Select * from a left join b on a.xxxx=b.xxxx
Union
Select * from a right join b on a.xxxx=b.xxxx
索引
对数据库中表的一列或多列进行排序的一种结构,
使用索引可以快速访问数据库中的特定信息
(空间换时间)
语法
Create [unique] index 索引名 on 表名 (字段1,[字段2])
例如: create index idx_student_name on t_student (student_name);
- 索引也是一种约束
优势
- 确保每一行数据的唯一性
- 加快检索速度
- 加快多表关联查询的速度
- 加快分组和排序的查询速度
劣势
- 创建和维护索引要耗用时间
- 索引占用数据以外的物理空间,随数量量的增加而增加
- 当对表中的数据进行增删改,索引也需要更新
视图
视图是从一个或几个基本表中导出的虚拟表。
- 视图可以把多表关联查询的结果作为一张虚拟表来查询。
可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。
对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。
语法
Create view 视图名称 as 关联查询的SQL语句
优势
- 简化SQL语句
- 提高重要数据的安全性
- 逻辑数据独立性
劣势
增加维护成本
一般运用到的
不希望访问者获取整个表的信息,只暴露部分字段给访问者。
查询的数据来源于不同的表,而查询者希望以统一的方式查询。
内置函数
行转列
列转行
需求


1. 通过 decode()函数实现
- 实现类似if else的功能
思路:分组利用聚合函数扩展字段
语法: decode(字段,条件的值, 当条件成立返回的值,当条件不成立返回的值)

2.Case when语法

列转行
思路:使用union扩展记录数

自定义函数
什么是数据库函数
封装了完成某些特定功能的SQL语句,经过编译后保存在数据库中的一个特殊对象
语法:
create [or replace] function 函数名称(参数1,参数2)
存储过程
类似函数,封装了某些特定功能的SQL语句集,经过编译保存在数据库中的一个特殊对象,存储过程不能出现在SQL中。
存储过程的创建
Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。
1)无参存储过程语法
create or replaceprocedureNoParPro
as //声明
;
begin //执行
;
exception//存储过程异常
;
end;
2)带参存储过程实例
create or replaceprocedure queryempname(sfindno emp.empno%type)
as
sName emp.ename%type;
sjobemp.job%type;
begin
....
exception
....
end;
3)带参数存储过程含赋值方式
应用场景:
统计每月的考勤数据
游标
就在pl中的一个特殊对象,在存储过程中遍历SQL结果集时,可以通过游标来指向结果集每一条记录。
游标的使用可以让用户想操作数组一样操作查询出来的数据集,实际上,它提供了一种从集合性质的结果中提取单挑记录的手段。
游标的种类:
显示游标
隐式游标
触发器
应用场景:主键自增
触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。
触发器是数据库中的一个特殊的存储过程,由事件触发,当用户对数据进行增删改操作的时候,可以触发该存储过程的执行。
触发器可以分为语句级触发器和行级触发器。
触发器的语法:
create [or replace] tigger 触发器名 触发时间 触发事件
on 表名
[for each row]
begin
pl/sql语句
end
oracle高级部分的更多相关文章
- oracle 高级分组
oracle 高级分组 博客分类: 数据库基础 oraclesql 10.高级分组 本章目标: 对于增强的group by需要掌握: 1.使用rollup(也就是roll up累计的意思)操作产生s ...
- oracle高级查询(实例基于scott用户四张表)
oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...
- oracle 高级函数2
原 oracle 高级函数 2017年08月17日 16:44:19 阅读数:1731 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013278 ...
- oracle 高级函数
原 oracle 高级函数 2017年08月17日 16:44:19 阅读数:1731 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013278 ...
- Oracle高级查询之OVER
注释:为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的 oracel的高级用法:rank()/dense_rank() over(partition by ...orde ...
- [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)
原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...
- Oracle高级函数
http://www.cnblogs.com/chen1388/archive/2010/07/06/1771919.html decode函数: decode(aa, 1, 'xs', 2, 'ps ...
- Oracle高级查询,over 用法
注:标题中的红色order by是说明在使用该方法的时候必须要带上order by. 一.rank()/dense_rank() over(partition by ...order by ...) ...
- oracle高级分组
基本group by用法 create table test_table(a varchar(20),b varchar(20),c varchar(20)) insert into test_tab ...
- Oracle 高级排序函数 和 高级分组函数
高级排序函数: [ ROW_NUMBER()| RANK() | DENSE_RANK ] OVER (partition by xx order by xx) 1.row_number() 连续且递 ...
随机推荐
- HTML与CSS学习笔记(1)
1.web三大核心技术? HTML CSS JavaScript 2.HTML基本机构和属性 HTML:超文本 标记 语言 超文本:文本内容+非文本内容(图片.视频.音频等) 标记:<单词> ...
- springcloud注解解释
@SpringBootApplication是springboot启动类,包括三个注解,他们的作用分别是: @Configuration:表示将该类作用springboot配置文件类 @Enabl ...
- 通过DatagramSocket实现UDP编程(十三)
原文链接:https://www.cnblogs.com/hysum/p/7533149.html UDP通信: UDP协议(用户数据报协议)是无连接.不可靠.无序的. UDP协议以数据报作为数据传输 ...
- luoguP2260 [清华集训2012]模积和
题意 \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}n\%i*m\%j*[i!=j]\) \(\sum\limits_{i=1}^{n}\sum\limits ...
- [RN] windows7 安装 Realm Studio 后,打开报错 A JavaScript error occurred in the main process
windows7 安装 Realm Studio 后,打开报错 报错如下: A JavaScript error occurred in the main process Uncaught Exce ...
- MySQL实战45讲学习笔记:第十一讲
一.如何在邮箱这样的字段上建立合理的索引 现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题. 假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的 ...
- 关于指针与引用的差别——C++
准备 https://zhuanlan.zhihu.com/p/27974028 开始 int 是int类型变量声明 int * 是int指针声明,指针其实就是地址变量,用来储存地址值的" ...
- 推荐一款手机清理工具App悟空清理
推荐一款手机清理工具App悟空清理 1 介绍 悟空清理是一款完全免费的手机加速与存储空间清理工具软件,强力去除顽固垃圾,使手机运行更畅快. 2 特色功能介绍 悟空在手,清理无忧!悟空清理,人人都在用的 ...
- html5手机web页面底部菜单
一.效果图 二.HTML代码 <header class="text-center">TOP</header> <div id="conte ...
- 修改Yarn的全局安装和缓存位置
在CMD命令行中执行 #1.改变 yarn 全局安装位置 yarn config set global-folder "你的磁盘路径" #2.然后你会在你的用户目录找到 `.yar ...