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() 连续且递 ...
随机推荐
- JS高阶---执行上下文栈
大纲: 主体: 注意:*******函数调用时才会产生上下文栈,声明时不会产生********** 顺序: 概念图: 执行上下文栈的顺序---→后进先出 其他概念图: 当前执行的上下文总是在顶部 全局 ...
- 代码审计-strpos数组绕过
<?php $flag = "flag"; if (isset ($_GET['ctf'])) { if (@ereg ("^[1-9]+$", $_GE ...
- JDOJ 1065 打倒苏联修正主义
JDOJ 1065 https://neooj.com/oldoj/problem.php?id=1065 题目描述 [”客观”背景]苏修是苏联修正主义的简称.从1956年到1966年的10年间,过去 ...
- python爬虫之获取页面script里面的内容
这是网页上的script 我要获取的是00914这个数字 直接使用正则表达式即可 运行结果: 源码: import re from bs4 import BeautifulSoup from url ...
- javascript专题系列--尾调用和尾递归
最近在看<冴羽的博客>,讲真,确实受益匪浅,已经看了javascript 深入系列和专题系列的大部分文章,可是现在才想起来做笔记.所以虽然很多以前面试被问得一脸懵逼的问题都被“一语惊醒梦中 ...
- [CODEVS4632][BZOJ4326]运输计划
题目描述 Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P ...
- Python Warning
Python Warning 官方文档 概念 warning是内置的异常类,所有用户的warning应该继承于内置warning异常. 警告控制的两个阶段: 通过异常过滤器控制警告是否触发,通过fil ...
- [LeetCode] 719. Find K-th Smallest Pair Distance 找第K小的数对儿距离
Given an integer array, return the k-th smallest distance among all the pairs. The distance of a pai ...
- [LeetCode] 38. Count and Say 计数和读法
The count-and-say sequence is the sequence of integers with the first five terms as following: 1. 1 ...
- C#原型模式(深拷贝、浅拷贝)
原型模式就是用于创建重复的对象,当想要创建一个新的对象但是开销比较大或者想将对象的当前状态保存下来的时候,我们就可以使用原型模式. 创建原型 public abstract class Base { ...