zoukankan      html  css  js  c++  java
  • 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);

    • 索引也是一种约束

    优势

    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

     

  • 相关阅读:
    MySQL根据出生日期计算年龄的五种方法比较
    用于测试API并生文档的开发人员工具
    【实例】使用Eolinker工具进行接口测试时传递集合参数的方法
    如何克服API测试中的挑战
    关于API网关(一)性能
    为什么需要监控API
    比Swagger2更好用的自动生成文档工具?对比流程说话!
    如何通过3个步骤执行基本的API测试
    【学习】API接口测试用例编写规则
    微信小程序之蓝牙 BLE 踩坑记录
  • 原文地址:https://www.cnblogs.com/lin02/p/11583382.html
Copyright © 2011-2022 走看看