SQL的集合操作和完整性约束

一、集合操作

(一)集合运算符

union/union all          并

intersect                    交

minus                        差

集合运算要求两个select语句是同构的,即列的个数和数据类型必须一致

union的结果集为两个查询结果的并集,是去掉重复值的

union all的结果集为两个查询结果的并集,是包含重复值的

intersect的结果集为两个查询结果的交集,不包含重复值

minus的结果集为属于第一个查询的结果集,但不属于第二个查询的结果集即从第一个查询的结果集中减去他们的交集,不包含重复值

(1)union all

select worker.ename,manager.ename
from emp worker join emp manager
on worker.mgr=manager.empno
union all
select ename,'boss'
from emp
where mgr is null;
(2)union

select job from emp where deptno=20
union(all)
select job from emp where deptno=10;
二、完整性约束

1.保证数据的一致性

2.通过数据库的特性或应用程序完成

3.数据库约束

主键(primary key)、唯一键(unique key)、外键(foreign key)、非空(not null)、检查(check)

类型                        描述

实体完整性             主键值的任意部分不为空并且主键值唯一

引用完整性             外键的取值必须是已存在的主键值或为空

列值                        列的取值必须满足数据类型的定义

用户自定义             取值必须遵守业务规则

unique key可以为空
(一)主键约束(pk)

1.每张表都应该创建主键而且只能有一个主键

2.强制列值的唯一性

3.主键任意部分的取值不能为空

4.有列级约束和表级约束两种形式

5.若主键列上没建索引,系统会自动创建唯一性索引

查表中的约束条件:

select constraint_name,constraint_type
from user_constraints
where table_name='STUDENT_YI';

创建约束条件,如果创建的约束条件没有命名,由系统建立在列级上自动命名(如SYS_C数字)


创建主键约束:

(1)建表时创建,可以建立在列级或者表级

(2)在建表后创建,建立在表级

例1:创建约束条件,建立在列级

create table student_yi(
id number primary key,
name varchar2(20));
例2:创建约束条件,建立在表级

create table student_yi2(
id number,
name varchar2(2),
constraint stuyi_id_pk primary key(id));
例3:建表后,创建主键约束

create table student_yi(
id number,
name varchar2(20));

alter table student_yi
add constraint stuyi_id_pk primary key(id);


主键约束条件的作用:

insert into student_yi(id,name)
values(1234,'peter');
重复执行上述语句,报ORA-00001违反唯一约束(插入了重复值)


insert into student_yi(name)
values('peer');
不提供主键值,将出现‘id不能为空’这种错误


删除表:

drop table student_yi;

(二)非空约束(NOT NULL)

创建非空约束只能建立在列级

create table student_yi(
id number primary key,
name varchar2(20) not null);
要求此列上必须有值,错误的sql:insert into student_yi(id) values(1);


(三)唯一约束

create table student_yi(
id number primary key,
name varchar2(20),
nickname varchar2(20),
email varchar2(30) unique,
constraint stuyi_nickname_uk unique(nickname));
其中,email的唯一约束建立在列级,nickname的唯一约束建立在表级







猜你喜欢

转载自blog.csdn.net/u014596135/article/details/55222927