学习主题:SQL
学习目标:
- 掌握约束
- 掌握视图
修改表名与删除表
删除表中的列语句的语法结构是什么?
答:delete 表名from table where ;
删除表中的列语句的语法结构是什么?
答:delete 表名from table where ;
截断表的语句是什么?
答:truncate table 表名;
删除表的语句是什么?
答:drop table 表名;
截断表与删除的区别是什么?
答:
截断:截断表中的所有的数据,但是保留表结构,在截断表时不能给定条件(即无where)
删除:删除表中所有数据包括表结构,删除指定的where条件。
定义约束原则
答:
创建一个约束:在创建表的同时,或者在创建表之后都可以定义约束。可以给约束起名 字,但是约束名不能相同,必须是唯一的。如果没有为约束起名字,Oracle 服务器将用默 认格式 SYS_Cn 产生一个名字,这里 n 是一个唯一的整数,所以约束名是唯一的。
定义非空约束
数据库中的约束有哪些类型?
答:
非空约束(NOTNULL)
唯一性约束(UNIQUE)
主键约束(PRIMARYKEY)
外键约束(FOREIGNKEY)
用户自定义约束(CHECK)
每个约束的含义是什么?
答:
主键约束:键列必须具有唯一性,且不能为空,一个表只能含有一个主键
唯一约束:键列具有唯一性,但可以有多个null
非空约束:强制键列必须有值,不能为空
外键约束:外键约束定义在具有父子关系的表中,外键约束的子表中的列和对应父表中的列数据类型必须相同。
检查约束:根据情况为列指定条件,当条件为真时,才能插入数据
定义约束的原则是什么?
答:
创建一个约束:在创建表的同时,或者在创建表之后都可以定义表约束。可以给约束起名字,但是约束名不能相同,必须是唯一的。如果没有为约束起名字,Oracle服务器将用默认格式SYS_Cn产生一个名字,n是一个唯一的整数,所以约束名是唯一的。
定义唯一性约束
创建dept90表,包含如下列:id number具备唯一性约束、name varchar2(20)。
答:create table dept90 (id number constraint dept90_uk unique,name varchear2(20));
定义主键约束
创建dept70表,包含如下列:id number具备主键约束。
答:create table dept70(id number constraint dept70_pk primary key);
定义外键约束
创建dept40表,包含如下列:id number、d_id number并为d_id列分配键列约束参照DEPT60表的id列。
答:create table dept40(id number,d_id number ,constraint dept40_fk foreign key(d_id) references dept60(id) );
定义检查约束
创建dept30表,包含如下列:id number、salary number(8,2)。为salary分配检查约束检查条件为salary>1000。
答:create table dept30(id number,salary number(8,2) constraint dept30_ck check key(salary>1000));
禁用与启用约束
在Oracle中查看约束的数据字典表叫什么名字?
答:user_constraints
禁用约束语句的语法结构是什么?
答:alter table 表名 disable constraint 约束;
级联禁用约束语句的语法结构是什么?
答:alter table 表名 disable constraint 约束[cascade];
启用约束语句的语法结构是什么?
答:alter table 表名 enable constraint 约束;
什么是视图
什么是视图?
答:
可以通过创建表的视图来表现数据的逻辑子集或数据的组合。视图是基于表或另一个视图的逻辑表,一个视图并不包含它自己的数据,它像一个窗口,通过该窗口可以查看或改变表中的数据。视图基于其上的表称为基表。
视图的优越性是什么?
答:
视图限制数据的访问,因为视图能够选择性的显示表中的列。
视图可以用来构成简单的查询以取回复杂查询的结果。
视图对特别的用户和应用程序提供数据独立性,一个视图可以从几个表中取回数据。
视图分为几种类型?
答:
简单视图、复杂视图
不同类型的视图的区别是什么?
答:
简单视图:数据仅来自一个表,不包含函数或数据分组,能通过视图执行DML操作
复杂视图:数据来自多个表,包含函数或数据分组,不允许通过视图执行DML操作
创建简单视图
创建简单视图的语法结构是什么?
答:create view 视图名 as 创建视图所查询的语句(查询结果看成一个表);
创建复杂视图
创建一个名为DEPT_NAME的复杂视图,包含每个部门的部门名称,部门最低薪水、部门最高薪水以及部门的平均薪水。
答:create view DEPT_NAME as select d.department_name,min(e.salary) min,max(e.salary) max,avg(e.salary) avg from employees e ,departments d where e.department_id = d.department_id group by d.department_name;
视图中 DML 操作的执行规则
使用DML操作的执行规则是什么?
答;
如果视图中包含下面的部分就不能修改数据:
组函数
Group by子句
Distinct关键字
用表达式定义的列
如何设置视图拒绝DML操作?
答:在创建视图的后面加上with read only 表示当前视图为只读视图
删除视图
如何删除视图?
答:drop view 视图名;
删除视图后数据为什么不会丢失?
答:删视图不会丢失数据,因为视图是基于数据库中的基本表的。
什么是内建视图
什么是内建视图?
答:内建视图是一个带有别名的可以在SQL语句中使用的子查询。
学习主题:SQL
学习目标:
- 掌握分页
- 掌握序列
- 掌握索引
使用内建视图实现TOP-N分析
什么是TOP-N分析?
答:TOP-N查询在需要基于一个条件,从表中显示最前面的n条记录或最后面的n条记录时是有用的。(排序)
从 employees表中显示挣钱最多的 3 个人的名字及其薪水。
答:select rownum,last_name,salary from(select last_name,salary from employees order by salary desc)where rownum<=3;
显示 employees表中4 个资格最老的雇员显示他们的入职时间与名字。
答:select rownum,hire_date,last_name from (select hire_date,last_name from employees order by hire_date) where rownum<=4;
Oracle的分页查询
什么是分页查询?
答:查询数据时不要一次性查询所有数据,每次只查询一部分数据。这样分批次地进行处理,可以呈现出很好的用户体验,对服务器的消耗资源也不大。
查询雇员表中数据,每次只返回10条数据。
答:select * from (select rownum rn,e.* from employees e) em where em.rn between 1 and 10;
什么是序列
什么是Oracle的序列?
答:序列是用户创建的数据库对象,序列会产生唯一的整数。
创建序列的语法结构是什么?
答:create sequence 序列名;
创建序列
创建一个序列名称为:dept_seq,增长间隔为10,从120开始,最大值为9999,不缓存。不循环使用。
答:create sequence dept_seq increment by 10 start with 120 maxvalue 9999 nocache nocycle;
通过PL/SQL Developer创建和dept_seq相同的序列,并命名为dept_seq2。
答:
使用序列
Oracle记录序列的数据字典表叫什么?
答:user_sequences
Oracle的序列中包含多少伪列?每个伪列的特点是什么?
答:
Oracel序列中包含两个伪列
Nextval:返回下一个可用的序列值,它每次返回一个唯一的被引用值,即使对于不同的用户也是如此。
Currval:获得当前的序列值。
在currval获得一个值以前,nextval对该序列必须发布。
修改删除序列
修改序列的语法结构是什么?
答:alter sequence 序列名;
修改序列的原则是什么?
答:
必须是被修改序列的所有者,或者有alter权限。
用alter sequence 语句,只有以后的序列数会受影响。
用alter sequence语句,start with选项不能被改变。为了以不同的数重新开始一个序列,该序列必须被删除和重新创建。
什么是索引
什么是索引?
答:
在关系型数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引有哪些类型?
答:索引有唯一性索引和非唯一性索引。
创建索引的方式有几种?
答:创建索引的方式有两种,自动创建和手动创建。
唯一性索引被系统自动创建,非唯一性索引需要手动创建。
索引的使用
什么情况下创建索引?
答:
一个列包含一个大范围的值
一个列包含很多的空值
一个或多个列经常同时在一个where子句中或一个连接条件中被使用
表很大,并且经常的查询期望取回少于百分之2到4的行。
什么情况下不创建索引?
答:
表很小
不经常在查询中作为条件被使用的列
大多数查询期望取回多于表中百分之2到4的行
表经常被更新
被索引的列作为表达式的一部分被引用
创建索引(单行索引,复合索引,函数索引)
Oracle的非唯一性索引包含哪些类型?
答:单行索引、复合索引、函数索引
创建索引的语法结构是什么?
答:create index 索引名 on 表名(列名);
删除索引的语法结构是什么?
答:drop index 索引名;
学习主题:SQL
学习目标:
- 掌握同义词
- 掌握创建用户,为用户授权
同义词的使用
什么是Oracle的同义词?
答:
同义词可以去除对象名必须带的方案限制,并提供给你一个可替换表名、视图名、序列名和存储过程名或其他对象名。
创建同义词的语法结构是什么?
答:create synonym 别名 for 表名
删除同义词的语法结构是什么?
答:drop synonym 别名;
创建用户
什么是Oracle的用户?
答:Oracle用户是用来连接数据库和访问数据库对象的。
创建用户的语法结构是什么?
答:create user 用户名 identified by 密码;
删除用户的语法结构是什么?
答:drop user 用户名;
删除用户同时删除该用户下的其他对象的语法结构是什么?
答:drop user 用户名 cascade;
授予用户系统权限
数据库控制语言的作用是什么?
答:为用户分配权限。
撤销用户系统权限
撤销权限的句法结构是什么?
答:revok 权限 from 用户;
(授予是 grant to)
通过角色为用户授权
什么是角色?
答:
角色是命名的可以授予用户的相关权限的组,该方法使得授予、撤回和维护权限容易的多。一个用户可以使用几个角色,并且几个用户也可以被指定相同的角色。(权限的集合)
创建角色的语法结构是什么?
答:create role 角色名;
为角色授予权限的语法结构是什么?
答:grant 权限 to 角色名;
为用户授予角色的语法结构是什么?
答;grant 角色名 to 用户名;
撤销用户角色的语法结构是什么?
答:revoke 角色 from 用户名;
学习主题:SQL
学习目标:
- 掌握执行计划的使用
- 掌握数据的导入和导出
什么是执行计划
什么是执行计划?
答: 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。
执行计划中的Cardinality、Bytes、COST、Time字段分别表示什么含义?
答:
Cardinality:基数,Oracle估计的当前操作的返回结果集行数。
Bytes:字节,执行该步骤后返回的字节数。
COST:消耗、CPU消费,Oracle估计的该步骤的执行成本,用于说明SQL执行的代价。
Time:时间,Oracle估计的当前操作所需要的时间。
执行计划中的执行顺序是什么顺序?
答:缩进最多的最先执行;(缩进相同时,最上面的最先执行)
执行计划中的表与索引的访问方式
数据库中的TABLE ACCESS FULL表示什么含义?
答:全表扫描
数据库中的TABLE ACCESS BY INDEX ROWID表示什么含义?
答:通过ROWID的表存取
数据库中的TABLE ACCESS BY INDEX SCAN表示什么含义?
答:索引扫描
执行计划的使用
通过执行计划分析查询employees表中的所有数据的查询语句。
答:
通过执行计划分析查询employees表中employees_id为100的雇员的查询语句。
答:
通过执行计划分析查询雇员名字为Tarloy的雇员的查询语句。
答:
通过执行计划分析查询雇员名字中含有a的雇员的查询语句。通过执行计划分析查询雇员名字中含有a的雇员的查询语句。
答:
Oracle的数据导入与导出
数据库导入导出需要注意什么?
答:
目标数据库要与源数据库有着名称相同的表空间。
目标数据在进行导入时,用户名尽量相同(这样保证用户的权限级别相同)
目标数据库每次在进行导入前,应做好数据备份,以防数据丢失。
弄清是导入导出到相同版本还是不同版本
目标数据导入前,弄清是数据覆盖还是仅插入新数据或替换部分数据表
确定目标数据库磁盘空间是否足够容纳新数据,是否需要扩充表空间
导入导出时注意字符集是否相同,一般Oracle数据库的字符集只有一个,并且固定,一般不改变
确定操作者的账号权限。
导出数据格式有几种?每种的特点是什么?
答:
Dmp格式:.dmp是二进制文件,可跨平台,还能包含权限,效率好
Sql格式:.sql格式的文件,可用文本编辑器查看,通用性比较好,适合小数据量导入导出。尤其注意的是表中不能有大字段,如果有会报错。
Pde格式:.pde格式的文件,.pde为PLSQL Developer自有的文件格式,只能用PLSQL Developer工具导入导出,不能用文本编辑器查看。
exp与imp命令讲解
导出数据的命令格式是什么?
答:exp 用 户 名 / 密 码 @ 连 接 地 址 : 端 口 / 服 务 名 file= 路 径 / 文 件 名 .dmp
导入数据的命令格式是什么?
答:imp 用 户 名 / 密 码 @ 连 接 地 址 : 端 口 / 服 务 名 file= 路 径 / 文 件 名 .dmp