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() 连续且递 ...
随机推荐
- 201871010106-丁宣元 《面向对象程序设计(java)》第十四周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第十四周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nw ...
- eth0: ERROR while getting interface flags: No such device的解决方法、Linux怎么修改IP以及ping不通的处理方法
首先输入ifconfig命令查看当前的ip信息 发现没有eth0这个网卡设备,有ens33 接着输入命令:ifconfig ens33 192.168.2.110 -- 修改临时ip地址,系统 ...
- LG2512/BZOJ1045 「HAOI2008」糖果传递 中位数
问题描述 LG2512 BZOJ1045 题解 这是一个链状问题的环状版本. 问题最终变为给定数轴上的\(n\)个点,找出一个到他们的距离之和尽量小的点,而这个点就是这些数中的中位数. 网络流24题的 ...
- 每天一道Rust-LeetCode(2019-06-11)
每天一道Rust-LeetCode(2019-06-02) Z 字形变换 坚持每天一道题,刷题学习Rust. 题目描述 全排列 II 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输 ...
- .NET三种异步模式(APM、EAP、TAP)
APM模式: .net 1.0时期就提出的一种异步模式,并且基于IAsyncResult接口实现BeginXXX和EndXXX类似的方法. .net中有很多类实现了该模式(比如HttpWebReque ...
- 牛客CSP-S提高组赛前集训营2 ———— 2019.10.31
比赛链接 期望得分:100+20+20 实际得分:40+20+30 awa cccc T1 :基于贪心的思路,然后开始爆搜(雾 那必然是会死的,好吧他就是死了 #include<iostrea ...
- 【转】spring的AOP原理,使用场景是什么?
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...
- MySQL实战45讲学习笔记:第二十九讲
一.引子 我在第25和27篇文章中,和你介绍了主备切换流程.通过这些内容的讲解,你应该已经很清楚了:在一主一备的双 M 架构里,主备切换只需要把客户端流量切到备库:而在一主多从架构里,主备切换除了要把 ...
- Oracle 的 连接
select a.alert_id, b.alert_id from a inner join b on a.alert_id = b.alert_id ; 上面和下面是一样的,都是 内连接 sele ...
- Hibernate 连接MySQL/SQLServer/Oracle数据库的hibernate.cfg.xml文件
用Hibernate配置连接数据库可以方便我们对POJO的操作,节省了很多时间和代码.下面就分别说明连接不同数据库需要在hibernate.cfg.xml做的配置. 需要数据库驱动包可以点击这里下载: ...