zoukankan      html  css  js  c++  java
  • SQL语句复习【专题九】

    SQL语句复习【专题九】

    视图:View
    视图的概念:视图是从若干基本表或其他视图构造出来的表。
    在创建一个视图时,只是存放的视图的定义,也即是动态检索数据的查询语句,而并不存放视图对应的数据
    在用户使用视图时才去求相对应的数据。所以视图被称作“虚表”。
    --创建视图 replace 是可选的。
    --创建视图需要比较高的权限,给scott 授予 dba 权限
    grant dba to scott
    --创建视图,如果已经存在则替换
    create or replace view view_emp as (
    select empno,ename,job,sal,deptno from emp
    )
    --使用视图
    select * from view_emp
    通过视图去操作基本表--只能操作视图可以访问的数据。
    修改的是基本表,视图本质上是一个sql语句。不会修改。
    insert into view_emp values('7777','林徽因','ANALYST',10000,10)
    select * from emp
    delete from view_emp where empno='7777'

    --设置视图为只读视图【read only】
    --对基本表的保护,通过视图设置为只读视图,只能对基本表的某些字段的数据进行访问,只能读取,不能修改。
    create or replace view view_emp as (
    select empno,ename,job,sal,deptno from emp
    ) with read only

    简化比较复杂的查询,,通常设置为只读视图
    ---查询20号部门的员工的编号,姓名、薪水,部门名称 、薪水等级。
    --sql 92
    select e.deptno,e.ename,e.sal,d.dname,s.grade
    from emp e, dept d, salgrade s
    where d.deptno=20 and e.deptno=d.deptno and e.sal between s.losal and s.hisal
    --sql 99
    select e.deptno,e.ename,e.sal,d.dname,s.grade
    from emp e join dept d
    on e.deptno=d.deptno
    join salgrade s
    on e.sal between s.losal and s.hisal
    where d.deptno=20

    --create
    create or replace view view_emp_dept_salgrade as(
    select e.deptno,e.ename,e.sal,d.dname,s.grade
    from emp e join dept d
    on e.deptno=d.deptno
    join salgrade s
    on e.sal between s.losal and s.hisal
    where d.deptno=20
    ) with read only;
    select * from view_emp_dept_salgrade
    --删除视图
    drop view view_emp

    事务
    概念:是一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位。
    作用:事务是为了保证数据库的完整性
    --模拟转账
    select * from t_account
    insert into t_account values('000001','张三','123456',10000);
    insert into t_account values('000002','张三媳妇','123456',0);
    --张三给张三媳妇 转账1000
    update t_account set money = money-1000 where aid='000001';
    update t_account set money = money+1000 where aid='000002';
    rollback
    commit

    在oracle中,没有事务开始的语句。一个Transaction起始于一条DML(Insert、Update和Delete )语句,结束于以下的几种情况:
    --用户显式执行Commit语句提交操作或Rollback语句回退。
    --当执行DDL(Create、Alter、Drop)语句事务自动提交。
    --用户正常断开连接时,Transaction自动提交。
    --系统崩溃或断电时事务自动回退。

    --提交或回滚前数据的状态
    --以前的数据可恢复
    --当前的用户可以看到DML操作的结果
    --其他用户不能看到DML操作的结果
    --被操作的数据被锁住,其他用户不能修改这些数据
    --提交后数据的状态
    --数据的修改被永久写在数据库中.
    --数据以前的状态永久性丢失.
    --所有的用户都能看到操作后的结果.
    --记录锁被释放,其他用户可操作这些记录.
    --回滚后数据的状态
    --语句将放弃所有的数据修改
    --修改的数据被回退.
    --恢复数据以前的状态.
    --行级锁被释放.

    rowid rownum 分页查询
    --rowid:每一个rowid 都对应着 一条记录。当一条记录被插入数据库的时候,数据库会针对该条记录生成对应的rowid
    --所有对数据的访问,最终都是通过 rowid 来完成的。rowid 数据库自己维护,程序员不需要维护和控制。
    一个rowid 对应着磁盘的一个位置。
    select * from emp where rowid='AAAE9KAAEAAAAFlAAB'

    rownum:针对查询结果的每一条记录的一个逻辑编号 顺序的从 1开始。不是真实存在的。称之为 伪列。
    select rownum,empno,ename,sal from emp
    --显式 emp 表中的前5条数据。
    select rownum, e.* from emp e where rownum < = 5
    --6-10--rownum 是在查询到数据,然后添加的编号。
    select rownum ,e.* from emp e where rownum between 6 and 10
    --rownum 只能使用小于等于,小于,不能使用大于,大于等于

    --rownum 是在 from 之后 where 之前添加
    select rownum ,e.* from emp e order by e.sal
    ---排序之后的前5条数据
    select rownum, T.*
    from (
    select e.*
    from emp e
    order by e.sal
    )T
    where rownum <= 10

    --查询6-10
    select rownum, P.*
    from (
    select rownum row_num, T.*---必须给rownum 加别名才能使用。
    from (
    select e.*
    from emp e
    order by e.sal
    )T
    where rownum <= 10--page*count
    ) P
    where P.row_num between 6 and 10---(page-1)*count + 1 ---- page*count
    ---page 查询第几页 每页显式 count 个

    什么是范式(NF= NormalForm)
    范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

    第一范式:简单说就是要确保每列保持原子性
    第二范式:需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。即在一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
    第三范式:确保数据表中的每一列数据都和主键直接相关,而不能间接相关

    优点
    结构合理
    冗余较小
    尽量避免插入删除修改异常
    缺点
    性能降低
    多表查询比单表查询速度慢

    数据库的设计应该根据当前情况和需求做出灵活的处理。
    在实际设计中,要整体遵循范式理论。
    如果在某些特定的情况下还死死遵循范式也是不可取的,因为可能降低数据库的效率,此时可以适当增加冗余而提高性能。

    第一范式:字段不能再分
    第二范式:不存在局部依赖
    第三范式:不含传递依赖(间接依赖)
    使用范式可以减少冗余,但是会降低性能
    特定表的的设计可以违反第三范式,增加冗余提高性能

  • 相关阅读:
    window
    pages
    百度小程序 配置 app.json 文件
    JavaScript Cookie
    jQuery ajax
    jQuery ajax
    jQuery ajax
    jQuery
    jQuery
    jQuery
  • 原文地址:https://www.cnblogs.com/cao-yin/p/10503009.html
Copyright © 2011-2022 走看看