`
luhantu
  • 浏览: 199712 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle 基础笔记(二)

阅读更多

1. View   就是一个子查询或者就是一张表,视图中的表叫虚表,实际数据依然在实际当中的表里面 .

 

--Grant user to create view
conn sys/oracle as sysdba;
grant create table, create view to kenny;
conn kenny/kenny1

 

--求比普通员工的最高薪水还要高的经理人名称
create view v$_manager_employee_id as select distinct manager_id from hr.employees where manager_id is not null
select * from v$_manager_employee_id;
select first_name,salary from hr.employees where employee_id in 
(select * from v$_manager_employee_id)
and salary > (select max(salary) from hr.employees where salary is not null and employee_id not in 
(select * from v$_manager_employee_id))

 2.Insert 语句

 

---backup table
create table emp as select * from hr.employees;
---insert into 
--第一种形式:不写字段的名字,直接按照字段的顺序挨着排的往里插
insert into emp values('value1','value2','value3');
--第二种形式:指定某些字段往里插,其他不插的字段默认都是空值
insert into emp (empColumn1, empColumn4) values (60, 'game2');
--第三种形式:从其他表中查询插入,但是查询出来的表结构和要插入的表结构要一致
insert into emp select * from hr.employees;

 

3.rownum

/*
当你没有进行排序的时候,它默认的顺序是先导进去的先选出来,后导进去的后显示出来
在Oracle里面有一个尾字段叫-->rownum 它是按照1,2,3...进行排列的,它不显示
*/
--取前5行
select * from emp where rownum < 5 
--取10行以后 不能直接写 where rownum > 10;
select * from ( select rownum r,first_name from emp )where r > 10;
--求薪水最高的前5个人,首先要先排序再查,再取前五个
select salary from (
  select salary from emp where salary is not null order by SALARY desc )where rownum <= 5
--取薪水最高的第6个人---第10个人(重点掌握)--》不论是哪种数据库,这个应用非常广泛
select salary from (
select salary,rownum r from
(select rownum r,salary from emp where salary is not null order by SALARY desc )
) where r >= 6 and r <=10

 

4.DDL语句 - create table,drop table

-- create student table
CREATE TABLE student(
SNO Number(4) NOT NULL PRIMARY KEY,
SNAME VARCHAR(25));
-- create course table
CREATE TABLE course(
CNO Number(4) NOT NULL PRIMARY KEY,
CNAME VARCHAR(25),
CTEACHER VARCHAR(25));
-- create student_course table
CREATE TABLE student_course(
SNO Number(4) NOT NULL,
CNO Number(4) NOT NULL,
SCGRADE Number(4));
--注意最后一个列是没有逗号结束的
-- 删除一张表
drop table student_course;

--列出2门以上(含2门)不及格学生姓名及平均成绩
select stu.sname,stu.sno, t.avgGrade from student stu 
join ( select s.sno,avg(sc.SCGRADE) avgGrade from student s 
join student_course sc on s.sno = sc.sno where s.sno in (
select student.sno from student 
join student_course on student.sno = student_course.sno 
where student_course.SCGRADE < 60 
group by student.sno 
having count(student.sno) >= 2) group by s.sno ) t on stu.sno = t.sno

 

5.constraint 约束

  1)NOT NULL 约束只能在列级定义,不能在表级定义

 

--为约束条件not null起名字为:stu_name_nn
CREATE TABLE student(
SNO Number(4) constraint stu_name_nn NOT NULL,--列级定义也称内敛定义
SNAME VARCHAR(25));

     2)unique 惟一约束列的列值不能重复,但可以为NULL。UNIQUE约束既可以在列级定义,也可以在表级定义

--外部定义"语法要求您指定哪一列(或多列)被约束影响。由于对于列而言不是"内联"的,语句不能够知道您试图约束哪一列,除非在子句中明确将它指定出来。
CREATE TABLE student
 (
    SNO Number(4),
    SNAME VARCHAR(25),
    constraint stu_name_nn2 unique (SNO) --表级定义也称外部定义
 );

  3)PRIMARY KEY  可以理解为: 非空 ,唯一 两个的组合.

主键约束列的列值不仅不能重复,而且也不能为NULL。主键约束既可以在列级定义,也可以在表级定义。一张表最多只能具有一个主键约束,当一个表中的多个列都要为主键是,可以在表级定义.

  

  4) FOREING KEY  要求外部键列的数据必须在主表的主键列(或惟一列)中存在,或者为NULL.FOREING KEY约束既可以在列级定义,也可以在表级定义。

关键字说明:

FOREING KEY:该选项用于指定在表级定义外部键约束。当在表级定义外部键约束时必须指定该选项,在列级定义外部键约束不需要指定该选项

REFERENCES:该选项用于指定主表名及其主键列。当定义外部键约束时,该选项必须指定。

ON DELETE CASCAED:该选项用于指定级联删除选项。如果在定义外部键约束时指定了该选项,那么当删除主表数据时会级联删除从表的相关数据。

ON DELECT SET NULL:该选项用于指定转换相关的外部键值为NULL,如果在定义外部键约束时指定了该选项,那么当删除主表数据时会将从表外部键列的数据设置为NULL。

CREATE TABLE student_course
(
    SNO Number(4),
    CNO Number(4),
    SCGRADE Number(4),
    CONSTRAINT fk_sno_name FOREIGN KEY(SNO) REFERENCES student(SNO),
    CONSTRAINT fk_cno_name FOREIGN KEY(CNO) REFERENCES course(CNO)
);

 5)CHECK 约束既可以在列级定义,也可以在表级定义。CHECK约束允许列为NULL。

 

CREATE TABLE student_course1
(
    SNO Number(4),
    CNO Number(4),
    SCGRADE Number(4),
    CONSTRAINT scgrade_chk CHECK (SCGRADE BETWEEN 0 AND 100)
);

 约束的管理

1. 增加约束

如果增加UNIQUE、PRIMARY KEY、FOREIGN KEY 和CKECK 必须使用ALTER TABLE语句的ADD子句;

如果增加NOT NULL约束,那么必须使用ALTER TABLE语句的MODIFY子句,如:

ALTER TABLE table_name ADD [CONSTRAINT constraint_name] constraint_type (column,...);

ALTER TABLE table_name MODIFY column [CONSTRAINT constraint_name] NOT NULL;

 

2.修改约束名

在同一个方案中,约束名必须惟一,并且约束名也不能与其他对象同名。当用IMPDP工具或者IMP工具导入其他对象时,如发现有同名的对象,将会出错

语法:

ALTER TABLE table_name RENAME CONSTRAINT old_constraint_name TO new_constraint_name;

例:

ALTER TABLE emp01 RENAME CONSTRAINT SYS_C005028 TO ck_emp01_salary;

 

3. 删除约束

当删除特定表的主键约束时,如果该表具有相关的从表,那么在删除主键约束时必须带有CASCAED选项

语法:

ALTER TABLE table_name DROP CONSTRAINT constraint_name | PRIMARY KEY

例1

ALTER TABLE emp01 DROP CONSTRAINT ck_emp01_salary;

例2

ALTER TABLE dept01 DROP PRIMARY KEY CASCAED

 

4. 禁止约束

禁止约束指使约束临时失效。当禁止了约束之后,约束规则将不再生效。在使用SQL*LOADER或INSERT装载数据之前,为了加快数据装载速度,应该首先禁止约束,然后装载数据。

语法:

ALTER TABLE table_name DISABLE CONSTRAINT constaint_name [CASCAED];--CASCAED用于指定级联禁止从表的外部键约束

例:

ALTER TABLE emp05 DISABLE CONSTAINT SYS_C00502;

 

9.3.5 激活约束

语法:

ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;

例:

ALTER TABLE emp05 ENABLE CONSTRAINT SYS_C005022;

 

9.4 显示约束信息

1.USER_CONSTRAINTS

2.USER_CONS_COLUMNS 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics