导航菜单
首页 >  数据库 考试题  > 数据库期末复习(SQL,范式,数据库设计例题)

数据库期末复习(SQL,范式,数据库设计例题)

SQL语句 创表 create table 表名(id number(10) primary key not null, //列名 类型 主键 不为空name varchar(20) not null, //varchar (可变长度,指定最大长度20字节) 不为空mobile varchar(11) check(length(mobile)=11) unique //约束长度等于11 取唯一值constraint 自命名 foreign key(address) references Massage(address) //address是外码,被参照表是Massageconstraint 自命名 primary key(mobile))//常用数据类型// varchar(size) : 存储可变长度字符串, size 规定字符串最大长度// number(m,n) : m 表示总长度,n表示小数位的精度,只有m表示可以存入最大为m位的整数// date : 表示日期和时间,7个字节固定宽度,有7个属性,分别为世纪-年-月-日-小时-分-秒 视图 create view 视图名 as select ....;drop view 视图名;view 和 with as 的区别:view 创建后不删除就一直都还在,with as 执行后就不存在了

例题:建立一个视图V1,显示老师与学生的授课关系,包括年份,学期,课程名称,老师ID,老师姓名,学生ID,学生姓名

create view v1 asselect year,semester,title,a.id i_id,d.namei_name,b.id s_id,c.name s_namefrom takes a join teaches b using(course_id,sec_id,year,semester)join student c on(a.id = c.id)join instructor d on (b.id = d.id)join course using(course_id) 向表中添加或删除约束 // 添加主键约束alter table 表名 add constraint 自定义主键名 primary key(字段)//添加外键约束alter table 表名 add constraint 自定义外键名 foreign key(外键字段) references 表名(字段)//删除主键约束alter table 表名 drop constraint 主键名//删除外键约束alter table 表名 drop constraint 外键名 添加信息 insert into 表名 values(值1,值2,....);insert into 表名(字段1,字段3) values(值1,值3);insert into 表名 select ...;

例题:给“Aufr”同学选上2010年秋季学期的所有课程

insert into takesselect id,course_id,sec_id,semester,year,nullfrom student a,section bwhere a.name='Aufr' and b.year = 2010 and b.semester= 'Fall'; 删除信息 delete from 表名 where 条件;

例题:删除“Comp. Sci.”学院“Ploski”同学,所有成绩为’C-’的选课记录

delete from takes awhere exists(select 1 from student b where a.id=b.idand b.dept_name = 'Comp. Sci.' and b.name ='Ploski')and a.grade = 'C-'; 更新信息 update 表名 set 字段=new字段 where 条件;

例题: 将“Comp. Sci.” 学院所有低于学校平均工资老师的涨薪10%,但是最高不能超过学校平均工资

update instructorset salary =case when salary *1.1 > (select avg(salary) frominstructor) then(select avg(salary) frominstructor)else salary * 1.1endwhere dept_name = 'Comp. Sci.'and salary < (select avg(salary) from instructor); 查询常用函数 avg() :求平均值distinct : 去重max() : 求最大值min() : 求最小值sum() : 求和count() : 求记录的行数count(*) : 包括nullcount(字段) : 该字段中不为null 的行数group by 字段 : 按字段分组order by 字段,字段 : 按字段排序,desc 降序,默认为升序union all 合并不去重//窗口函数//排序rank(),dense_rank(),row_number()// row_number 不存在并列,不会有相同的数字//dense_rank 存在并列,不会跳数字//rank() 存在并列,会出现数字的中断select id,score,row_number() over (order by score desc) as row_number,dense_rank() over (order by score desc) as dense_rank1,rank() over (order by score desc) as rank1from scores//over : 在什么条件之上partition by 字段 : 按字段划分 idscorerow_number1dense_rank1rank1019911103992110288323 例题:使用标量子查询,查询各院开设课程修课人数最多的前三门课程 with ta as(select dept_name,course_id,title,count (distinct id) cnt from course natural join takes group by dept_name,course_id,title),tb as(select dept_name,course_id,title,cnt,rank() over(partition by dept_name order by cnt desc) rkfrom ta)select * from tbwhere rk a.cnt) rkfrom ta a)select * from tb where rk

相关推荐: