回顾

多表关联查询的方式

 内连接

  根据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);

  • 索引也是一种约束

优势

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

劣势

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

视图

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

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

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

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

语法

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

 优势

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

 劣势

  增加维护成本

一般运用到的

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

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

内置函数

  行转列

  列转行

需求

  

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

最新文章

  1. iOS之访问权限以及跳转到系统界面
  2. php 对多维数组排序array_multisort
  3. 如何在Ubuntu下使用TF/SD 卡制作Exynos 4412 u-boot启动盘
  4. LoadRunner 学习笔记(3)基础
  5. 流媒体相关知识介绍 及其 RTP 应用
  6. 【转】对memcached使用的总结和使用场景
  7. vs调试正确显示utf8格式字符串
  8. Selenium自动化测试插件—Katalon的自述
  9. jmeter的各种调用
  10. python 字符串常用操作方法
  11. [daily] 使用diff和patch打补丁
  12. JDK的bin目录下各种工具的使用说明_对不起自己,这么久没写博,抱歉
  13. IDEA 错误:找不到或无法加载主类
  14. mybatis中的增删改查操作
  15. 亲历H5移动端游戏微信支付接入及那些坑(二)——获取Openid和授权
  16. pycharm -- 导入主题(theme) and 修改背景颜色(护眼色)
  17. 为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
  18. 以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题
  19. BFS && DFS
  20. SQL语句往Oracle数据库中插入日期型数据(to_date的用法)

热门文章

  1. python 正则表达式提取返回内容
  2. MySQL内连接、左连接、右连接的使用以及区别
  3. JAVA并发-Executor
  4. LeetCode 654. Maximum Binary Tree最大二叉树 (C++)
  5. [LeetCode] 300. Longest Increasing Subsequence 最长递增子序列
  6. VSCode编写C/C++语言,配置文件和注意事项
  7. icon发展史速览
  8. SCITE设置修改说明
  9. Linux性能优化实战学习笔记:第五十八讲
  10. [报名中] 腾讯技术专家为你揭秘"音视频及融合通信技术"