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. 转:SpringMVC 4.1 新特性(二)内容协商视图

    SpingMVC的内容协商支持三种方式: 使用后缀,如json.xml后缀和处理类型的关系可以自己定义 前面说的使用Accept头 在访问时request请求的参数,比如每次请求request都会加f ...

  2. .Netcore 2.0 Ocelot Api网关教程(4)- 服务发现

    本文介绍Ocelot中的服务发现(Service Discovery),Ocelot允许指定一个服务发现提供器,之后将从中寻找下游服务的host和port来进行请求路由.关于服务发现的详细介绍请点击. ...

  3. 修改主机名(/etc/hostname和/etc/hosts区别)

    ubuntu永久修改主机名 1.查看主机名 在Ubuntu系统中,快速查看主机名有多种方法:其一,打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后:其二,在终端窗口 ...

  4. 【并行计算-CUDA开发】warp是调度和执行的基本单位而harf-warp为存储器操作基本单位

    1.在用vs运行cuda的一些例子时,在编译阶段会报出很多警告: warning C4819 ...... 解决这个警告的方法是打开出现warning的文件,Ctrl+A全选,然后在文件菜单:file ...

  5. mac 查看占用的端口并关闭进程

    -i 查看某个端口是否被占用,如 lsof -i:8081 显示占用情况 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 12188 a ...

  6. Linux 文件和目录的属性及权限

    一.Linux中的文件 1.1文件属性概述 Linux里一切皆文件! Linux系统中的文件或目录的属性主要包括;索引节点(inode).文件类型.权限属性.链接数.所归属的用户组.最近修改时间等内容 ...

  7. Java判断指定日期是否为工作日

    Java判断指定日期是否为工作日 转自:https://www.jianshu.com/p/966659492f2f 转:https://www.jianshu.com/p/05ccb5783f65转 ...

  8. oracle报:ORA-01034和ORA-27101的解决办法

    出现ORA-01034和ORA-27101的原因是多方面的:主要是oracle当前的服务不可用,shared memory realm does not exist,是因为oracle没有启动或没有正 ...

  9. Android UI组件:布局管理器

    为了更好的管理Android应用的用户界面中的组件,Android提供了布局管理器.通过使用布局管理器,Android应用的图形用户界面具有良好的平台无关性.通常,推荐使用布局管理器来管理组件的分布. ...

  10. static char定义的用法

    static char *p是全局静态变量,char *p是临时变量,static定义的你在其他地方可以调用,而且是通用的,也就是说你在一个地方改了它的值,其他地方也就跟着改了,而char *p只是一 ...