5道较难的数据库查询习题(Intermediate SQL)

习题之前,我们先建立了11张表:

create table classroom
    (building     varchar(15),
     room_number      varchar(7),
     capacity     numeric(4,0),
     primarykey (building, room_number)
    );
 
create table department
    (dept_name    varchar(20),
     building     varchar(15),
     budget           numeric(12,2) check (budget > 0),
     primarykey (dept_name)
    );
 
create table course
    (course_id    varchar(8),
     title        varchar(50),
     dept_name    varchar(20),
     credits      numeric(2,0) check (credits > 0),
     primarykey (course_id),
     foreignkey (dept_name) references department
       on deleteset null
    );
 
create table instructor
    (ID        varchar(5),
     name         varchar(20) not null,
     dept_name    varchar(20),
     salary       numeric(8,2) check (salary > 29000),
     primarykey (ID),
     foreignkey (dept_name) references department
       on deleteset null
    );
 
create table section
    (course_id    varchar(8),
         sec_id        varchar(8),
     semester     varchar(6)
       check (semester in('Fall', 'Winter', 'Spring', 'Summer')),
     year         numeric(4,0) check (year > 1701 and year < 2100),
     building     varchar(15),
     room_number      varchar(7),
     time_slot_id     varchar(4),
     primarykey (course_id, sec_id, semester, year),
     foreignkey (course_id) references course
       on deletecascade,
     foreignkey (building, room_number) references classroom
       on deleteset null
    );
 
create table teaches
    (ID        varchar(5),
     course_id    varchar(8),
     sec_id       varchar(8),
     semester     varchar(6),
     year         numeric(4,0),
     primarykey (ID, course_id, sec_id, semester, year),
     foreignkey (course_id,sec_id, semester, year) references section
       on deletecascade,
     foreignkey (ID) references instructor
       on deletecascade
    );
 
create table student
    (ID        varchar(5),
     name         varchar(20) not null,
     dept_name    varchar(20),
     tot_cred     numeric(3,0) check (tot_cred >= 0),
     primarykey (ID),
     foreignkey (dept_name) references department
       on deleteset null
    );
 
create table takes
    (ID        varchar(5),
     course_id    varchar(8),
     sec_id       varchar(8),
     semester     varchar(6),
     year         numeric(4,0),
     grade            varchar(2),
     primarykey (ID, course_id, sec_id, semester, year),
     foreignkey (course_id,sec_id, semester, year) references section
       on deletecascade,
     foreignkey (ID) references student
       on deletecascade
    );
 
create table advisor
    (s_ID         varchar(5),
     i_ID         varchar(5),
     primarykey (s_ID),
     foreignkey (i_ID) references instructor(ID)
       on deleteset null,
     foreignkey (s_ID) references student(ID)
       on deletecascade
    );

接下来我们再往各张表里插入数据(代码略)后,我们来看看11张表的信息:

classroom:                                                                 department:

                            

course:                                                                   instructor:

             

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值