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. 数据测试001:利用python连接数据库插入excel数据

    数据测试001:利用python连接数据库插入excel数据 最近在做数据测试,主要是做报表系统,需要往数据库插入数据验证服务逻辑,本次介绍如何利用python脚本插入Oracle和Mysql库中: ...

  2. 【Adobe Air程序开发】用Adobe Flex3开发AIR应用程序–入门指南

    1 安装Adobe AIR 运行时,和java的JVM类似.Adobe AIR 运行时允许在桌面运行AIR应用程序,脱离游览器的束缚.下载安装文件http://labs.adobe.com/downl ...

  3. 【VS开发】程序员对内存的理解

    程序员对内存的理解 在C和C++语言开发中,指针.内存一直是学习的重点.因为C语言作为一种偏底层的中低级语言,提供了大量的内存直接操作的方法,这一方面使程序的灵活度最大化,同时也为bug埋下很多隐患. ...

  4. 内存块是一种数据结构,内核对象&句柄

    内核对象&句柄 目录 1 内核对象的概念 2 内核对象的使用计数 3 句柄 4 句柄表   项目工程代码中设计句柄的使用,一时不知句柄是何物,通过查阅自学之后,对句柄及其使用有一个初步的了解. ...

  5. day20 logging模块、re模块

    今日内容: 1.logging模块 2.re模块 1.logging模块 -- 什么是logging模块 -- logging模块是用来进行记录日志的模块,主要作用是将想要输出的日志进行分级,然后以不 ...

  6. java23种设计模式之五:代理模式

    一.代理模式介绍 代理模式的定义:就是为一个接品(对象)提供一个代理的对象,并由这个代理对象控制对原对象的访问流程 其中代理又分为:静态代理和动态代理 静态代理:指的是自己要写一个代理类,或者用工具生 ...

  7. H2内嵌数据库的使用

    H2内嵌数据库的使用 H2是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制. 同时H2提供了一个十分方便的web控制台用于操作和管理数据库内容. H2还提供兼容模式,可以兼容一些主流 ...

  8. 跑跑卡丁车(dp)

    题意:https://www.nitacm.com/problem_show.php?pid=1470 #define IOS ios_base::sync_with_stdio(0); cin.ti ...

  9. PHPstorm配置同步服务器文件

    一.配置服务器 1.连接配置 打开菜单栏 Tools -> Deployment -> Configuration 点击 + 选择 SFTP,并填写相关服务器信息: Type:连接类型,这 ...

  10. 【div】给div添加滚动条

    <div class="infomation" style=" max-height: 500px; overflow: auto;"> style ...