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)
范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

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

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

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

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

SQL语句复习【专题九】的更多相关文章

  1. SQL语句复习【专题一】

    SQL语句复习[专题一] --创建用户 scott 并设置密码为 tiger create user scott identified by tiger --用户刚刚创建没有任何的权限,连登录的权限都 ...

  2. SQL语句复习【专题二】

    SQL语句复习[专题二] 单行函数(日期.数学.字符串.通用函数.转换函数)多行函数.分组函数.多行数据计算一个结果.一共5个.sum(),avg(),max(),min(),count()分组函数  ...

  3. SQL语句复习【专题三】

    SQL语句复习[专题三] DML 数据操作语言[insert into update delete]创建表 简单的方式[使用查询的结果集来创建一张表]create table temp as sele ...

  4. SQL语句复习【专题四】

    SQL语句复习[专题四] 多表查询 sql 92多表查询 sql92.sql99 标准--查询所有员工的姓名,部门编号,部门名称select * from empselect * from dept- ...

  5. SQL语句复习【专题五】

    SQL语句复习[专题五] 单行子查询:只会得到一个结果的子查询[子查询的内容必须放在小括号中.在查询语句中的查询语句 ]--查询所有比 CLARK 员工 工资高的员工--1.先查询 CLARK 员工的 ...

  6. SQL语句复习【专题六】

    SQL语句复习[专题六] 用户 + 创建表  --创建一个新的用户,然后给新的用户创建一张表,然后给表中添加一些数据.查询表中的数据 --创建用户需要比较大的权限 DBA create user di ...

  7. SQL语句复习【专题七】

    SQL语句复习[专题七] 完整性约束分类1)域完整性约束(非空not null,检查check)2)实体完整性约束(唯一unique,主键primary key)3)参照完整性约束(外键foreign ...

  8. SQL语句复习【专题八】

    SQL语句复习[专题八] 序列 Sequence.数据库对象是 oracle 专有的.作用:可以将某一列的值使用序列,来实现自动增长的功能.访问序列的值.[序列有两个属性 nextval currva ...

  9. sql语句复习(基础-提升-技巧-经典数据开发案例-sql server配置)

    1 基础 1.说明:创建数据库 CREATE DATABASE database-name charset=utf8 2.说明:删除数据库 drop database dbname 3.说明:备份sq ...

随机推荐

  1. C2B电商三种主要模式的分析_数据分析师

    C2B电商三种主要模式的分析_数据分析师 在过去的一年中电商领域血雨腥风,尤其是天猫.京东.苏宁.当当.易讯等B2C电商打得不亦乐乎.而随着B2C领域竞争进入白热化阶段,C2B模式也在天猫" ...

  2. A股委托类型

    上海交易所于2006年8月7日启用了两种类型的市价委托,分别为:“最优五档即时成交剩余撤销”.“最优五档即时成交剩余转限价”. 深圳证券交易所启用了“对手方最优价格委托”.“本方最优价格委托”.“最优 ...

  3. Trie代码学习

    感觉不把这个Trie理解一下,AC自动机的代码看起来有点费劲. 这里代码的学习仿照训练指南209页. 这里如果只是查询单词,感觉用map更好,但是如果查前缀,还是用Trie. 1.Trie查询前缀字符 ...

  4. android破解AndroidManifest.xml文件

     使用java -jar E:\AXMLPrinter2.jar E:\AndroidManifest.xml > E:\manifest.txt 但要先下载AXMLPrinter2.jar(h ...

  5. Java学习笔记-网络编程

    Java提供了网络编程,并且在实际中有着大量运用 网络编程 网络编程概述 网络模型 OSI参考模型 TCP/IP参考模型 网络通讯要素 IP地址 端口号 传输协议 网络参考模型 网络通讯要素 IP地址 ...

  6. Python 筛选前缀文件

    筛选某一文件下内具备某一前缀的文件: for file in files filename = os.path.listdir(file) if 'qianzhui--' in filename: # ...

  7. python装饰器使用详解

    装饰器 '''装饰器:就是闭包(闭包的一个应用场景) -- 把要被装饰的函数作为外层函数的参数通过闭包操作后返回一个替代版函数 优点: -- 丰富了原有函数的功能 -- 提高了程序的可拓展性''' 开 ...

  8. airflow 安装配置celery+rabbitmq celery+redis

    AirFlow的安装可以参考:https://www.cnblogs.com/braveym/p/11378851.html 这里介绍的是AirFlow 安装配置celery+rabbitmq   和 ...

  9. Oracle创建表空间、创建用户,给用户分配表空间以及可操作权限

    创建表空间一共可分为四个步骤 具体脚本如下: 第1步:创建临时表空间 create temporary tablespace yd_temp       tempfile 'D:\oracledata ...

  10. [SDOI2011]消耗战 题解

    题面 虚树的模板题: 虚树的思想是只保留有用的点(在这道题目里面显然是标记点和lca),然后重新构建一棵树,从而使节点大大减少,优化复杂度 我们维护一条链(以1号点为根),这条链左边的所有在虚树上的位 ...