数据库系统概念第六版 第三章练习题 12 16

3.12

使用大学模式,用SQL写出如下查询。
数据库系统概念第六版 第三章练习题 12 16_第1张图片

  • a.创建一门课程"CS-001",其名称是"Weekly Seminar",学分为0

    insert into course
    	values('CS-001','Weekly Seminar','Comp.Sci.',0);
    
  • b.创建该课程在2009年秋季的一个课程段,sec_id为1

    insert into section
    	values('CS-001',1,'Autumn',2009,null,null,null);
    
  • c.让Comp. Sci .系的每个学生都选修上述课程

    insert into takes
    	select id,'CS-001',1,'Autumn',2009,null
    	from student
    	where dept_name='Comp.Sci.';
    
  • d.删除名为Chavez 的学生选修上述课程段的信息

    delete from takes
    where course_id='CS-001' and sec_id=1 and semester='Autumn' and year=2009 and id in (select id from student where name='Chavez');
    
  • e.删除课程CS-001。如果在运行此删除语句之前,没有先删除这门课的授课信息(课程段),会发生什么事情?

    delete from course
    where course_id='CS-001';
    

    参考大学数据库模式图可知,section关系中的元素course_id指向course关系,即有外码指向course关系,形成了外码约束。如果直接删除course中的该信息,会导致section中的主码course_id在course关系中找不到关联,违背了参照完整性约束。

  • f.删除课程名称中包含”database“的任意课程的任意课程段所对应的所有takes元组,在课程名匹配中忽略大小写

    delete from takes
    where course_id in (select course_id from course where lower(title) like '%database%' );
    

3.16

数据库系统概念第六版 第三章练习题 12 16_第2张图片
考虑雇员数据库,其中加下划线的是主码。给出下面每个查询对应的SQL表达式:

  • a.找出所有名为"First Bank Corporation"工作的雇员名字

    select employee_name
    from  works
    where company_name='First Bank Corporation';
    
  • b.找出所有数据库中所有居住城市和公司所在城市相同的雇员

    select employee_name
    from employee as E join works using (employee_name) join company as C using (company_name)
    where E.city = C.city;
    
  • c.找出数据库中所有居住的街道和城市与其经理相同的雇员

    select employee_name
    from employee A,employee R,managers M
    where A.employee_name=M.employee_name and M.manager_name=B.employee_name and A.street=B.street and A.city=B.city
    
  • d.找出工资高于其所在公司雇员平均工资的所有雇员

    with avg_salary(company_name, avg_salary) as 
        ( select company_name, avg(salary)
          from works
    	  group by company_name)
    select employee_name
    from works join avg_salary using (company_name) 
    where salary > avg_salary;
    
    
  • e.找出工资总和最小的公司

    with salary_name_sum(company_name, salary_sum) as 
       ( select company_name, sum(salary) 
         from works
    	 group by company_name) 
    select company_name 
    from salary_name_sum 
    where salary_sum=min(salary_sum)
    
    

你可能感兴趣的:(数据库)