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() 连续且递 ...
随机推荐
- 未加载opencv_world330.pdb
根据设置下载对应的pdb文件. 无法查找或打开pdb文件
- 玩转淘宝SVN
http://guojun2sq.blog.163.com/blog/static/64330861201492965059142/(参考) 三步走: 1.注册账号http://code.taobao ...
- python27期day17:re、logging日志模块、作业。
1.re: 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Python中,并通过 re 模 ...
- VIJOS-P1059 积木城堡
洛谷 P1504 积木城堡 https://www.luogu.org/problem/P1504 JDOJ 1240: VIJOS-P1059 积木城堡 https://neooj.com/oldo ...
- 关于对pei
我现在才开始整理这个不算晚吧...... 望轻喷 学习博客 我们需要四个程序 1.暴力 2.“正解” 3.数据生成器 4.检查程序 暴力: 就是暴力 eg: #include <cstdio&g ...
- [LeetCode] 419. Battleships in a Board 平板上的战船
Given an 2D board, count how many battleships are in it. The battleships are represented with 'X's, ...
- 第04组 团队Git现场编程实战
组员职责分工 组员 分工 林涛(组长) 分配任务.整理数据.写博客 童圣滔 UI界面制作 林红莲 UI界面制作 潘雨佳 测评出福州最受欢迎的商圈 于瀚翔 测评出福州最受欢迎的商圈 覃鸿浩 测评出福州人 ...
- [勘误] Head First Java (2nd edition)中文版勘误
附上英文原版高清pdf:链接: https://pan.baidu.com/s/1X5Aikj6krROnp3oXuTVl8Q 提取码: f6xd 标注本文: 上面的图是中文译本中的错误 下面的图是英 ...
- 【递归】执行过程探究(c)
c语言 递归的执行过程探究 引用<c primer plus>第五版 9.3.1 递归的使用 /* recur.c -- recursion illustration */ #includ ...
- Salesforce 开发整理(十)项目部署总结
项目部署顺序 全局值集 小组 自定义字段-对象-设置(SF1 紧凑布局要和记录类型在这里要一起部署) 邮件模板-静态资源 角色 工作流-流定义(包含进程生成器) 批准过程 开发部署<Apex类, ...