以下仅为个人复习参考
DDL
SQL> create table student(
2 sno char(10) not null primary key,
3 sname varchar(20) not null,
4 sage int,
5 sex char(2) constraint def_sex default 'M',
6 sdept varchar(20)
7 );--其中包含主键约束和缺省约束
SQL> create table course(
2 cno char(10) primary key,
3 cname varchar(20),
4 credit int,
5 snumber int
6 );
SQL> create table sc(
2 sno char(10) not null,
3 cno char(20) not null,
4 grade int,
5 primary key(sno,cno)
6 );
SQL> alter table sc add constraint ref_stu_sno foreign key(sno) references student(sno);
添加约束就相当于修改表结构。检查约束用触发器会更简单一点
create table t as select * from student--复制表
create table t1as select * from student where 1=2--只复制表结构
--以下r表示关系,t表示表,p表示条件
drop table r/t;--删除表,这种删除是不能恢复的
alter table t add A D--增加表中属性
alter table t modify A D--修改表中某列属性
alter table t drop column A --删除某列
DML
insert into t values()
insert into student(sno,sname,sex) values('','','');
delete from t/r where p--只删除关系或表中对应条件的值,不修改表结构
update t set A=new where p
select 语句就不用说了
order by 字句是指定结果集中元组的排列次序,就是按照order by 后的列排序,在嵌套查询中子查询中不使用order by字句,order by只能对最终查询结果进行排序。oracle中的查询顺序是先查询后排序,所以对rownum的使用会有一些影响,rownum是oracle表格中记录逻辑顺序的列,在条件中只能小于某数,不能大于某数,否则将找不到任何记录,所以在某些需要将rownum大于某数的查询中,可以先将rownum查询出来并给与一个名字,在条件中就可以根据这个名字来找出大于某值的
rownum是表格中的逻辑标识,也就是表格的记录顺序变了,rownum也要变,rowid是标识物理位置的,所以针对每一个记录,rowid不变
--查询成绩的前十到前十五的学生学号
select * from (select * from sc order by grade) where rownum<=15 and rownum>=10;--没有用
select * from (select rownum rn,a.* from (select * from sc order by grade desc) a) where rn<=15 and rn>=10;
create view v as <查询语句> [with check option] with check option选项表示对视图更新时必须满足查询语句中的条件
视图名可以出现在任何关系名可以出现的地方
comment语句可以为表,列等添加注释信息
comment on table student is '这是学生表' comment on column student.sno is '这是学号'
可以通过user_tab_comments系统视图来查看表格的注释信息,user_col_comments或describe来查看表中列的注释