当前位置:Gxlcms > 数据库问题 > Oracle学习系列6

Oracle学习系列6

时间:2021-07-01 10:21:17 帮助过:4人阅读

************************************************************************************ 删除约束(重点): 格式: alter table person drop constraint constraint_name ; 创建person表: create table person( UID varchar(18) name varchar(200) not null, //非空约束 age number(3) not null, //非空约束 birthday date, sex varchar(2) default , ) ; /** 主键约束:主键字段_PK 唯一约束:字段_UK 检查约束:字段_CK 外键约束:父字段_子字段_FK */ ex:为表添加若干个约束, 格式: alter table tab_name add constraint constraint_name constraint_type(constrain_colx) ; ex:添加约束 alter table person add constraint person_uid_PK primary key(uid);//增加主键约束 alter talbe person add constraint person_name_UK unique(uid); //增加唯一约束 alter table person add constraint person_age_CK checke(age between 0 and 150) ; alter table person add constraint person_sex_CK check(sex in (,,)) ; ex:删除约束 alter table person drop constraint person_uid_PK ;//删除主键约束 alter talbe person drop constraint person_name_UK ; //删除唯一约束 alter table person drop constraint person_age_CK ; //删除检查约束 alter table person drop constraint person_sex_CK ; //删除检查约束 ************************************************************************************ rownum(重点): rownum: 表示行号,实际上是一个伪列,可在每张表中出现 select rownum, empno, ename ,job,sal,hiredate from emp ; // ROWNUM 采用自动编号的方式呈现 ex: select rownum, empno, ename, job, sal hiredate from emp where rownum <=5 ; ************************************************************************************ 建表、约束、查询综合练习: 题目背景: 有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid, 运动员姓名name, 运动员性别sex, 所属系好department) 项目item (项目编号itemid, 项目名称itemname, 项目比赛地点location) 成绩grade(运动员编号sportid,项目编号itemid, 积分mark) 1建表要求: a,定义各个表的主键外码约束 b,运动员的姓名和所属系别不能为空值 c,积分要么为null,要么为6,420,分别代表第一二三和其他名词的积分 create table sporter( sporterid nummber(4) primary key not null, name varchar2(50) not null, sex varchar2(2) not null, department varchar2(30) not null, constraint sporter_sex_CK check(sex in(,)) ); create table item( itemid varchar2(4) primary key not null, itemname varchar2(50) not null, location varchar2(50) not null ); create table grade( sporterid number(4), itemid varchar2(4), mark number(2), constraint sporter_grade_sporterid_FK foreign key(sporterid) references sporter(sporterid) on delete cascade constraint item_grade_itemid_FK foreign key(itemid) references item(itemid) on delete cascade constraint grade_mark_CK check(mark in (6,4,2,0)) ); 测试数据: insert into sporter(sportid, name, sex, department ) values(1101,黎明,,计算机系); insert into sporter(sportid, name, sex, department ) values(1102,张三,,数学系系); insert into sporter(sportid, name, sex, department ) values(1103,李四,,计算机系); insert into sporter(sportid, name, sex, department ) values(1104,王五,,物理系); insert into sporter(sportid, name, sex, department ) values(1105,李楠,,心理系); insert into sporter(sportid, name, sex, department ) values(1106,孙俪,,艺术系); --------------------------------------------------------- insert into item(itemid ,itemname, location) values(x001,男子五千米,一操场) ; insert into item(itemid ,itemname, location) values(x002,男子标枪,一操场) ; insert into item(itemid ,itemname, location) values(x003,男子跳远,二操场) ; insert into item(itemid ,itemname, location) values(x004,女子跳高,二操场) ; insert into item(itemid ,itemname, location) values(x005,女子三千米,三操场) ; --------------------------------------------------------- insert into grade(sporterid, itemid,mark) values(1001,x001,6); insert into grade(sporterid, itemid,mark) values(1002,x001,4); insert into grade(sporterid, itemid,mark) values(1003,x001,2); insert into grade(sporterid, itemid,mark) values(1004,x003,2); insert into grade(sporterid, itemid,mark) values(1005,x006,6); insert into grade(sporterid, itemid,mark) values(1006,x004,0); insert into grade(sporterid, itemid,mark) values(1003,x005,2); insert into grade(sporterid, itemid,mark) values(1003,x003,4); insert into grade(sporterid, itemid,mark) values(1003,x002,6); 要求: 求出目前总积分最高的系名,及其积分: select * from ( select s.department , sum(g.mark) sum from sporter s, grade g where s.sporterid=g.sporterid group by s.department order by sum desc ) where rownum=1 找出在一操场进行比赛的各项目名称及其冠军的姓名: select i.itemname, s.name, g.mark from item i, grade g,sporter s where i.location=一操场 and i.itemid=g.itemid and s.sporterid=g.sporterid and g.mark=6 ; 找出参加了张三所参加过的项目的其他同学的姓名: select distinct s.name from sporter s, grade g where s.sporterid=g.sporterid and s.name <>张三 and g.itemid IN ( select g.itemid from sporter s ,grade g where s.sporterid=g.sporterid and s.name=张三 ) ; 经查张三使用了违禁药品,其成绩都记0分,请在数据库中做出相依修改: update grade set mark=0 where sporterid =( select sportid from sporter where name =张三 ) ; 经组委会协商,需要删除女子跳高比赛项目: delete from item where itemname=女子跳高------------------------------------------------------------ 删除顺序: //先删子表,再删主表 drop table grade; drop table sporter; drop table item ; ************************************************************************************ 集合操作: 分类: 并(UNION) :将多个查询的结果组合到一个查询结果中,无重复值 //UNIONALL:包含重复值 交(INTERSECT):返回多个查询结果相同的部分 差(MINUS) :返回两个结果的差集 复制emp表,将部门20的雇员信息取出来: create table emp20 as select * from emp where deptno=20 ; 验证UNION: select * from emp union select * from emp20 ; 验证UNIONALL: select * from emp unionall select * from emp20 ; 验证INTERSECT: select * from emp INTERSECT select * from emp20 ; 验证MINUS: select * from emp minus select * from emp20 ; ---------------------------------------------------------------------------------- SQL查询最终格式: //////////////////////////////////////////////////////////////////////////////////////////// select { distinct } * | col1 别名1 col2 别名2 ... from tab1 别名1 , tab2 别名2 , ( select { distinct } * | col1 别名1 col2 别名2 ... from tab1 别名1 , tab2 别名2 , tab3 别名3 ,... {where 条件s } {group by 分组条件 { having 分组条件 } } { order by col1 ASC | DESC , col2 ASC | DESC, ...} ; )别名x tab3 别名3 ,... {where 条件s ( select { distinct } * | col1 别名1 col2 别名2 ... from tab1 别名1 , tab2 别名2 , tab3 别名3 ,... {where 条件s } {group by 分组条件 { having 分组条件 } } { order by col1 ASC | DESC , col2 ASC | DESC, ...} ; ) } {group by 分组条件 { having 分组条件 } } { order by col1 ASC | DESC , col2 ASC | DESC, ...} ; {UNION | INTERSECT |MINUS} select { distinct } * | col1 别名1 col2 别名2 ... from tab1 别名1 , tab2 别名2 , ( select { distinct } * | col1 别名1 col2 别名2 ... from tab1 别名1 , tab2 别名2 , tab3 别名3 ,... {where 条件s } {group by 分组条件 { having 分组条件 } } { order by col1 ASC | DESC , col2 ASC | DESC, ...} ; )别名x tab3 别名3 ,... {where 条件s ( select { distinct } * | col1 别名1 col2 别名2 ... from tab1 别名1 , tab2 别名2 , tab3 别名3 ,... {where 条件s } {group by 分组条件 { having 分组条件 } } { order by col1 ASC | DESC , col2 ASC | DESC, ...} ; ) } {group by 分组条件 { having 分组条件 } } { order by col1 ASC | DESC , col2 ASC | DESC, ...} ; ////////////////////////////////////////////////////////////////////////////////////////////

 

Oracle学习系列6

标签:

人气教程排行