回顾

多表关联查询的方式

 内连接

  根据AB表关联的条件进行过滤查询,只保留满足条件数据

  1.     Select * from a,b where a.xxx=b.xxx;
  2.  
  3.     Select * from a inner join b on a.xxx=b.xxxx
  4.  
  5.     inner join c on a.xxxx=c.xxxx

 外连接

  左外连接

  以左表为驱动表,根据AB表关联的条件进行过滤查询,保留满足条件的数据,以及左边表的所有记录显示

  1.     Select * from a left join b on a.xxx=b.xxxx
  2.  
  3.     Inner join c on b.xxxx=c.xxxx
  4.  
  5.     Select * from a, b(+);

  右外连接

  和左外连接正好相反 

  1. Select * from a right join b on a.xxxx=b.xxxx

等同于: select * from b left join a on a.xxxx=b.xxxx

  特殊关联查询

  全外连接

    左外连接结果+右外连接结果-重复的数据

  1.     Select * from a full join b on a.xxxx=b.xxxx

  笛卡尔集

  两张表或多张表的乘积

  1. Select * from a,b
  2. Select * from a inner join b on 1=1

  自连接(A表连接A表进行查询)

  1. Select * from a,a
    Select * from a t1 inner join a t2 on t1.xxxx=t2.xxxx

  合并查询(union union all)

    可以把不同表的结果集合并成一个结果集

  (两张表选择列的数量和类型必须保持一致)

  1. SQL1
  2. Union [all]
  3. SQL2

  通过union实现全外连接

  1. Select * from a left join b on a.xxxx=b.xxxx
  2.   Union
  3. Select * from a right join b on a.xxxx=b.xxxx

索引

  对数据库中表的一列或多列进行排序的一种结构,

  使用索引可以快速访问数据库中的特定信息

  (空间换时间)

语法

  1. Create [unique] index 索引名 on 表名 (字段1,[字段2])

  例如: create index idx_student_name on t_student (student_name);

  • 索引也是一种约束

优势

  1. 确保每一行数据的唯一性
  2. 加快检索速度
  3. 加快多表关联查询的速度
  4. 加快分组和排序的查询速度

劣势

  1. 创建和维护索引要耗用时间
  2. 索引占用数据以外的物理空间,随数量量的增加而增加
  3. 当对表中的数据进行增删改,索引也需要更新

视图

视图是从一个或几个基本表中导出的虚拟表。

  • 视图可以把多表关联查询的结果作为一张虚拟表来查询。

  可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。

  对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。

语法

  1. Create view 视图名称 as 关联查询的SQL语句

 优势

  1. 简化SQL语句
  2. 提高重要数据的安全性
  3. 逻辑数据独立性

 劣势

  增加维护成本

一般运用到的

  不希望访问者获取整个表的信息,只暴露部分字段给访问者。

  查询的数据来源于不同的表,而查询者希望以统一的方式查询。

内置函数

  行转列

  列转行

需求

  

1. 通过 decode()函数实现

  • 实现类似if else的功能
  • 思路:分组利用聚合函数扩展字段

语法:  decode(字段,条件的值, 当条件成立返回的值,当条件不成立返回的值)

   

2.Case when语法

  列转行 

  思路:使用union扩展记录数

自定义函数

  什么是数据库函数

  封装了完成某些特定功能的SQL语句,经过编译后保存在数据库中的一个特殊对象

 语法:

  1. create [or replace] function 函数名称(参数1,参数2

存储过程

  类似函数,封装了某些特定功能的SQL语句集,经过编译保存在数据库中的一个特殊对象,存储过程不能出现在SQL中。

  存储过程的创建
    Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。

1)无参存储过程语法

  1.  create or replaceprocedureNoParPro
  2.   as //声明
  3.    ;
  4.    begin //执行
  5.    ;
  6.   exception//存储过程异常
  7.   ;
  8.    end;

 2)带参存储过程实例

  1. create or replaceprocedure queryempname(sfindno emp.empno%type)
  2.   as
  3.   sName emp.ename%type;
  4.    sjobemp.job%type;
  5.   begin
  6. ....
  7.   exception
  8. ....
  9.   end;

  3)带参数存储过程含赋值方式

应用场景:

    统计每月的考勤数据

游标

就在pl中的一个特殊对象,在存储过程中遍历SQL结果集时,可以通过游标来指向结果集每一条记录。

游标的使用可以让用户想操作数组一样操作查询出来的数据集,实际上,它提供了一种从集合性质的结果中提取单挑记录的手段。

游标的种类:

  显示游标

  隐式游标

触发器

  应用场景:主键自增

  触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。

触发器是数据库中的一个特殊的存储过程,由事件触发,当用户对数据进行增删改操作的时候,可以触发该存储过程的执行。

  触发器可以分为语句级触发器和行级触发器。

触发器的语法:

  1. create [or replace] tigger 触发器名 触发时间 触发事件
  2. on 表名
  3. [for each row]
  4. begin
  5. pl/sql语句
  6. end

oracle高级部分的更多相关文章

  1. oracle 高级分组

    oracle 高级分组 博客分类: 数据库基础 oraclesql  10.高级分组 本章目标: 对于增强的group by需要掌握: 1.使用rollup(也就是roll up累计的意思)操作产生s ...

  2. oracle高级查询(实例基于scott用户四张表)

    oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...

  3. oracle 高级函数2

    原 oracle 高级函数 2017年08月17日 16:44:19 阅读数:1731 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013278 ...

  4. oracle 高级函数

    原 oracle 高级函数 2017年08月17日 16:44:19 阅读数:1731 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013278 ...

  5. Oracle高级查询之OVER

    注释:为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的 oracel的高级用法:rank()/dense_rank() over(partition by ...orde ...

  6. [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)

    原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...

  7. Oracle高级函数

    http://www.cnblogs.com/chen1388/archive/2010/07/06/1771919.html decode函数: decode(aa, 1, 'xs', 2, 'ps ...

  8. Oracle高级查询,over 用法

    注:标题中的红色order by是说明在使用该方法的时候必须要带上order by. 一.rank()/dense_rank() over(partition by ...order by ...) ...

  9. oracle高级分组

    基本group by用法 create table test_table(a varchar(20),b varchar(20),c varchar(20)) insert into test_tab ...

  10. Oracle 高级排序函数 和 高级分组函数

    高级排序函数: [ ROW_NUMBER()| RANK() | DENSE_RANK ] OVER (partition by xx order by xx) 1.row_number() 连续且递 ...

随机推荐

  1. 洛谷 P5564: [Celeste-B]Say Goodbye

    题目传送门:洛谷 P5564. 题意简述: 有 \(n\) 个点,染 \(m\) 种颜色,第 \(i\) 种颜色染恰好 \(cnt_i\) 个节点,满足 \(cnt_1+cnt_2+\cdots+cn ...

  2. ppm

    PPM图像格式是由Jef Poskanzer 在1991年所创造的. PPM(Portable Pixmap Format)还有两位兄长,大哥名叫「PBM」,二哥人称「PGM」,他们三兄弟各有所长,下 ...

  3. 在浏览器输入URL回车之后发生了什么?(超详细版)

    前言 这个问题已经是老生常谈了,更是经常被作为面试的压轴题出现,网上也有很多文章,但最近闲的无聊,然后就自己做了一篇笔记,感觉比之前理解更透彻了. 这篇笔记是我这两天看了数十篇文章总结出来的,所以相对 ...

  4. 201871010112-梁丽珍《面向对象程序设计(java)》第十四周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  5. 201871010111-刘佳华《面向对象程序设计(java)》第四周学习总结

    201871010111-刘佳华<面向对象程序设计(java)>第四周学习总结 实验时间 2019-9-20 第一部分:总结第四章理论知识 4.1:类与对象的概念. 类:类是构造对象的模板 ...

  6. 第十二周博客作业 <西北师范大学| 周安伟>

    第十二周作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求链接https://www.cnblogs.com/nwnu-daizh/p/10831971 ...

  7. k8s集群搭建 2019

    参考,https://github.com/qxl1231/2019-k8s-centos 事实上k8s集群的搭建很简单,笔者在搭建的过程中遇到的主要问题是镜像无法下载的问题. 如果发现教程中提供的镜 ...

  8. LeetCode 154. Find Minimum in Rotated Sorted Array II寻找旋转排序数组中的最小值 II (C++)

    题目: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. ( ...

  9. LG2272/BZOJ1093 「ZJOI2007」最大半连通子图 Tarjan缩点+DAG求最长链

    问题描述 LG2272 BZOJ1093 题解 观察半联通的定义,发现图中的一些结点,构成的链一定是一个半联通子图. 此时存在的环可能会干扰求解,于是\(\mathrm{Tarjan}\)缩点. 于是 ...

  10. mark-杭州互联网公司分布-位置信息

    项目内容: 在智联招聘上爬取杭州市互联网公司的位置信息,属于哪个区: 如果公司信息内不含区信息,则通过百度地图接口获取所属区信息 scrapy+pycharm