演示 - FOREIGN KEY(外键)约束
1. 演示设置不同的关键约束,对操作有一定的影响。
? ON DELETE SET NULL:将相关外键值转换为空值。
演示 - CHECK约束
1. 用于定义每行都必须满足的一个条件。 2. 以下表达式是不允许出现的:
? 各伪列的引用。
? 对一些内部函数的调用。
练习 - 创建表时增加约束
1. 创建一张学生表hr.student,要求包括学生的学号、姓名、年龄、出生日期、性别、
身份证号、联系电话、住址。约束条件如下:
? ? ? ? ? ?
学号:主键约束 姓名:Not null约束
年龄:check约束必须大于0 性别:check约束必须为男或女 身份证号:UNIQUE约束 出生日期:not null约束
11-3添加约束
1、使用ALTER TABLE可以执行以下任务:
?
添加或删除约束,但不修改它的结构。
2、添加约束语法
ALTER TABLE table
ADD [CONSTRAINT constraint] type (column);
3、删除约束语法
ALTER TABLE table
DROP constraintname | primary key;
演示 - 用ALTER TABLE 添加约束
1. 2. 3. 4.
向表hr.new_emp添加PRIMARY KEY约束。 向表hr.new_emp的salary列添加CHECK约束。 向表hr.new_emp的email列添加UNIQUE约束。 向表hr.new_emp的department_id列添加外键约束
练习 - 使用ALTER TABLE增加约束
1. 创建一张学生表hr.student,要求包括学生的学号、姓名、年龄、出生日期、性别、
身份证号、联系电话、住址。约束条件如下:
o 学号:主键约束 o 姓名:Not null约束
o 年龄:check约束必须大于0 o 性别:check约束必须为男或女 o 身份证号:UNIQUE约束
o 要求:用ALTER TABLE方式来增加约束
12-1视图-概念
1、什么是视图?
通过创建表的视图可以显示数据的逻辑子集或组合。
2、视图的优点:
? 视图能够选择性地显示表中的行,因而可以限制对数据的访问。
? 视图可以用来进行简单的查询,从而检索复杂查询的结果。如用户可以通过视图
查询多个表中的信息,而无需了解如何编写多表联结语句。 ? 视图可以提供数据独立性。 ? 可提供相同数据的不同视图。
3、视图分类:简单视图和复杂视图
简单视图特点:
? 只从一个表中获取数据。 ? 不包含函数或分组。
? 可以通过该视图执行DML操作。 复杂视图特点:
? 从多个表中获取数据。 ? 包含函数或分组
? 不一定能通过该视图执行DML操作。
12-2视图-创建
1、语法
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)] AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]] (ORACLE的语法)
[WITH READ ONLY [CONSTRAINT constraint]](ORACLE的语法);
2、规则:视图的子查询可以包含复杂的SELECT语法,包括联结、分组和子查询。
? 视图的子查询不能包含ORDER BY子句。ORDER BY是在从视图中检索数据时指定
的。
? 可以使用OR REPLACE选项更改视图定义,而不必先删除再重新创建它。
演示 - 创建视图
1. 在子查询中使用别名来创建视图。
2. 创建一个视图,其中包含部门50中每位员工编号、姓名和年薪;员工编号、姓名和
年薪分别使用了别名。
演示 - 修改视图
1. 使用CREATE OR REPLACE VIEW子句修改视图。为每个别名添加一个别名。 2. CREATE VIEW子句中的列别名与子查询中的列排列顺序相同。
演示 - 创建复杂视图
1. 创建包含分组函数的复杂视图以显示两个表中的值。
练习 - 创建简单视图
1. 根据hr.EMPLOYEES表中的员工编号、员工姓名和部门编号,创建名
为hr.EMPLOYEE_VE的视图.将员工的姓名标题更改为EMPLOYEE。
练习 - 创建复杂视图
1. 根据所有员工的员工姓氏、部门名称、薪金和薪金级别,创建一个名为SALARY_VU
的视图。使用hr.EMPLOYEES、hr.DEPARTMENTS和hr.JOBS表。分别将这些
列标记为Employee、Department、Salary和Title。
12-3删除视图
1、可以使用DROP VIEW视图。删除视图不会影响该该视图所基于的表。 2、语法
DROP VIEW view;
演示 - 删除视图
1. 使用DROP VIEW删除视图
12-4执行排序Top-N分析
1、排序Top-N查询结构:
? 子查询用于生成排序的数据列表。子查询可以包含ORDER BY子句。
? 外部查询,用于限制最终结果集的行数。条件包括
- ROWNUM伪例,为子查询返回的每一行指定一个顺序值,值从1开始 - WHERE子句,指定返回n行。使用<或<=运算符
2、语法
SELECT [column_list], ROWNUM FROM (SELECT [column_list] FROM table
ORDER BY Top-N_column) WHERE ROWNUM <= N;
演示 - Top-N
1. 显示hr.EMPLOYEES表中收入最高的三个人的姓名和薪金
13-1索引概念
1、索引的特点:
? 索引是一个数据库里的对象。
? 可以通过访问快速路径访问方法来快速查找数据,从而减少磁盘I/O操作 ? 与它索引的表无关
注:当删除表时,相关的索引也会被删除。
13-2索引创建
1、自动创建
如果在表定义中定义了PRIMARY KEY或UNIQUE约束,则系统会自动创建一个唯一索引。
2、手动创建
用户可以在列上创建非唯一的索引,以加速对行的访问。
建议:为联结创建一个FOREIGN KEY的列创建索引,以提高检索速度。 3、语法
//可在一个或多个列上创建索引 CREATE INDEX index
ON table(column[, column]...);
演示 - 创建索引
1. 提高对表hr.EMPLOYEES的LAST_NAME列的查询访问速度。
练习 - 创建索引
1. 先创建表hr.new_dept,创建代码:
--删除表hr.new_dept DROP TABLE hr.new_dept; --创建表hr.dept
CREATE TABLE hr.new_dept (deptno NUMBER(2), dname VARCHAR(14), loc VARCHAR(13));
2. 给表hr.new_dept的列deptno创建唯一索引。 3.给表hr.new_dept的列dname创建非唯一索引。
13-3什么情况下要创建索引
1、在以下情况,应该创建索引:
? 列包含较大范围的值。 ? 列包含大量空值。
? 在WHERE子句或联结条件中频繁使用一个或多个列。
? 表相当大,但是预计多数的查询检索的行不到总行数的2%-4%。
2、在以下情况,通常不值得创建索引:
? 表比较小。
? 在查询中不经常使用列作为条件。
? 预计多数查询检索的行要超过表中总行数的2%-4%。 ? 表更新比较频繁。
? 被索引的列将作为表达式的一部分进行引用。
演示 - 确认索引
1. 索引创建完成后,可以查看索引是相关信息。每个数据都有专门的方法查看索引。
13-4删除索引
1、使用DROP INDEX命令可以删除索引。
DROP INDEX index;
演示 - 删除索引
1. 删除索引emp_last_name_idx.