oracle sql学习四

来源:互联网 发布:mac剪切图片 编辑:程序博客网 时间:2024/05/29 02:17

约束:

描述约束
创建和维护约束

什么是约束


约束是表级的强制规定
有以下五种约束:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
如果不指定约束名 ,Oracle server自动按照SYS_Cn的格式指定约束名
创建修改约束:
建表的同时
建表之后
可以在表级列级定义约束
可以通过数据字典视图查看约束

表级约束和列级约束:
作用范围

  列级约束只能作用在一个列上

  表级约束可以作用在多个列上(当然表级约束也  

       可以作用在一个列上)

定义方式:列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。
非空(not null)约束只能定义在列上

create table emp3(
id number(10) constraint emp3_id_nn not null,--创建约束用constraint,emp3_id_nn 是约束的名字
name varchar2(20) not null,--没有名字的约束,oracle自动给名字。
salary number(10,2)

)

not null 只能在列级。

check constraints 里面可以查看某个表的约束。

create table emp4(
id number(10) constraint emp4_id_uk unique,--unique唯一约束
name varchar2(20) not null,
salary number(10,2)
)


create table emp4(
id number(10) constraint emp4_id_uk unique,--列级约束
name varchar2(20) not null,
salary number(10,2),
email varchar2(20),
constraint emp4_email_uk unique(email)--表级约束
)

唯一约束,允许出现多个空值:NULL


create table emp4(
id number(10) constraint emp4_id_pk primary key,--主键约束 列级
name varchar2(20) not null,
salary number(10,2),
email varchar2(20),
--constraint emp4_id_pk primary key(id)表级
)

主键要求非空不重复(not null 和unique同时满足)


外键约束:

constraint emp4_deptid_fk foreign key(dept_id) references departments(id)--表级

dept_id number(10) constraint emp4_id_fk foreign key references departments(id)--列级

dept_id指向departments表的id

ON DELETE CASCADE(级联删除):当父表中的列被删除时,子表中相对应的列也被删除
ON DELETE SET NULL(级联置空):子表中相应的列置空
如果是级联删除,departments表的列被删除时,当前表中相应的列被删除,级联置空,就是相应的列被置空

check约束:
salary number(10,2) check(salary>0 and salary<10000),--没有名字的check约束
salary number(10,2)  constraint emp4_sal_ck check(salary>0 and salary<10000),--有名字的check约束

视图:

目  标:

l描述视图
l创建和修改视图的定义,删除视图
l从视图中查询数据
l通过视图插入, 修改和删除数据
l使用“Top-N” 分析

视图是一种虚表。
视图建立在已有表的基础上, 视图赖以建立的这些表称为基表
向视图提供数据内容的语句为 SELECT语句, 可以将视图理解为存储起来的SELECT 语句.
视图向用户提供基表数据的另一种表现形式

对视图中数据进行增删改,基表中的数据也会有同样的变化。(简单视图)
使用create or replace view 视图名称,可以创建或者修改视图。
可以使用 WITH READ ONLY选项屏蔽对视图的DML 操作,在创建视图的语句最后加上with read only 表示只读。

没有使用组函数的视图是简单视图,使用了组函数的视图是复杂视图。
简单视图可以进行增删改,并且基表中的数据会变化。
复杂视图不可以进行增删改。

删除视图,用drop view 视图名。

Top-N分析

SELECT [column_list],ROWNUM 

FROM   (SELECT [column_list]

        FROM table

        ORDER BY Top-N_column)

WHERE  ROWNUM <=  N;

例子:
查询工资最高的三名员工:

SELECT   ROWNUM as RANK, last_name, salary

FROM  (SELECT last_name,salary FROM employees

       ORDER BY salary DESC)

WHERE   ROWNUM <= 3;

先把排序过的结果当做一个表,然后再用rownum去加where条件。

注意:

ROWNUM 只能使用 < <=, 而用 =, >, >= 都将不能返回任何数据。


工资从高到低,查询第四十到五十的数据?

rownum不可以用=,>,>=,我们可以把查询出来的rownum这一列,起个别名,然后当做具体的一列来用。


select *
  from (select rownum rn, employee_id, salary
          from (select employee_id, salary, last_name
                  from employees
                 order by salary desc))
 where rn <= 50
   and rn > 40




0 0
原创粉丝点击