b. ΠID (account ⨝borrower.account_number = account.account_number (σbalance > 6000 account))
c. 不会
6.12
不会
第三章作业
3.1
a.
1 2 3
select title from course where dept_name=’Comp.Sci.’and credits=3
b.
1 2 3 4 5 6 7 8
select dictinct takes.ID from takes,instructor,teaches where takes.course_id = teaches.course_id and takes.sec_id = teaches.sec_id and takes.sem ester = teaches.semester and takes.year = teaches.year and teaches.id = instructor.id and instructor.name ='Einstein'
c.
1 2
selectmax(salary) from instructor
d.
1 2 3
select ID,name from instructor where salary = (selectmax(salary) from instructor)
e.
1 2 3 4 5 6 7 8 9
select takes.course_id, takes.sec_id, count(ID) from section,takes where takes.course_id=section.course_id and takes.sec_id=section.sec_id and takes.semester = section.semester and takes.year=section.year and takes.semester=’Fall’ and takes.year=2017 groupby takes.course_id,takes.sec_id
f.
1 2 3 4 5 6 7 8 9 10
selectmax(enrollment) from (selectcount(ID) as enrollment from section,takes where takes.year=section.year and takes.semester = section.semester and takes.course_id = section.course_id and takes.sec_id = section .sec_.id and tak es.semester ='Fall' and takes.year =2017 groupby tak es.course_id, tak es.sec_.id)
g.
1 2 3 4 5 6 7 8
with sec_enrollment as ( selectta k es.course id, tak es.sec_.id, count( ID) as en rollmentfromsection , tak es wheretakes.year = section.year and takes.semester = section.sem esterand takes.course _id = section.course_idand tak es.sec_id = section.sec_id and takes.semester ='Fall'and tak es.year =2017 groupby tak es.course id , tak es.sec_.id)select course_id , sec_id fromsec_enrollmen t where enrollment = (selectmax( enrollmen t) from sec_enrollmen t)
3.2
a.
1 2 3
selectsum( credits * poin ts)from takes, course, grade _poin ts where tak es.grade = grade_poin ts.grade and tak es.course id = course.course _idand ID ='12345'
b.
1 2 3 4 5
select sum( cred its * poin ts)/sum( cred its) as GPA from tak es, course, grade poin ts where tak es.grade = grade poin ts.gradeand tak es.course id = course.course _idand ID='12345'
c.
1 2 3 4 5 6 7
select ID, sum( credits * poin ts)/sum( cred its) as GPA from tak es,course, grade_poin ts where tak es.grade = grade _poin ts.grade and takes.course_id = course.course_idgroup by ID
3.3
a.
1 2 3
update instructor set salary = salary *1.10 where deptname ='Comp. Sci.'
b.
1 2
deletefrom course where course_id notin( select course_id from section )
c.
1 2 3 4
insertinto instructor select ID, name, dept_name,10000 from student where tot_cred >100
3.4
a.
1 2 3 4 5 6
selectcount (distinct perso n.dr iver_id) from accident, participated, person , owns where accident.repori_number=participated.report_number and owns.driver_id = person.driver_id and owns.license_plate = participated.license-plate andyear=2017
b.
1 2 3 4 5
delete car whereyear=2010and license_plate in ( select license_plate from owns_o where o.driver_id ='12345')
3.5
a.
1 2 3 4 5 6 7 8
select ID, case when score <40then'F’ when score <60 then 'C' when score <80 then 'B’ else'A' end from marks
b.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
with grades as ( selectID, case when score <40then'F’ when score <60 then 'C' when score <80 then 'B’ else'A' endas grade from marks ) select grade, count(ID) from grades groupby grade
3.6
1 2 3
select dep_name from department wherelower(deptname) like'%sci%'
3.7
1 2 3
select p.al from p, r1,r2 where p.al = r1.a1 or p.a1 = r2.a 1
3.8
a.
1 2 3 4 5
(select ID fromdepositor) except (select ID fromborro wer)
b.
1 2 3 4 5
select F.ID from customer as F, customer as S where F.customer street = S.cutomer _street and F.cus tomer_city = S.customer_city and S.cus tomer_id ='12345'
c.
1 2 3 4 5
selectdistinct branch_name from accoun t, deposior, customer where customer.id = depositor.id and depositor.account_number=account.account_number and cus tomer_city ='Harrison'
3.9
a.
1 2 3
select e.ID, e.person_name,cityfrom employee as e, works as w where w.com pany_name ='First Bank Corporation' and w.ID =e.ID
b.
1 2 3 4
select* from employeewhere ID in (select IDfrom works where company name ='First Bank Corporati on'and salary >10000)
c.
1 2 3
select Ip from works where company_name <>'First Bank Corp orati on'
d.
1 2 3 4 5 6
select ID from works where salary >all ( select salary from works where company_name ='Small Bank Corporation')
e.
1 2 3 4 5 6 7 8
select S.com pany_name from company as S wherenotexists (( select city from company where company_name ='Small Bank Corp oration')except ( select city from company as T where S.company_name = Tcom pany name) )
f.
1 2 3 4 5 6
select company_name from works groupby company name havingcount (distinct ID) >=all ( selectcount (distinct ID)from works groupby company name)
g.
1 2 3 4 5 6
select company name from works groupby company_name havingavg (salary) > (selectavg (salary) from works where com pany name ='First Bank Corporation')
3.10
a.
1 2 3
update employee set city ='Newtown' where ID ='12345'
b.
1 2 3 4 5 6 7 8 9 10 11
update works T set T.salary = T.salary *1.03where T.ID in (select manager_id from manages) and Tsalary *1.l >100000 and T.company_name ='First Bank Corporation' update works T set T.salary = T.salary *1.1 where T.ID in (select manager_id from manages) and T.salary *1.l <=100000 and T.company name ='First Bank Corporation'
3.11
a.
1 2 3 4 5 6
SELECTDISTINCT S.ID, S.Name FROM Student S INNERJOIN Takes T ON S.ID = T.ID INNERJOIN Course C ON T.CourseId = C.CourseId WHERE C.DeptName ='Comp. Sci' ORDERBY S.ID;
b.
1 2 3 4 5 6
SELECTDISTINCT S.ID, S.Name FROM Student S LEFTJOIN Takes T ON S.ID = T.ID LEFTJOIN Course C ON T.CourseId = C.CourseId AND C.Year <2017 WHERE T.ID ISNULL ORDERBY S.ID;
c.
1 2 3 4
SELECT DeptName, MAX(Salary) AS MaxSalary FROM Instructor GROUPBY DeptName ORDERBY DeptName;
d.
1 2 3 4 5 6
SELECTMIN(MaxSalary) AS MinSalary FROM ( SELECTMAX(Salary) AS MaxSalary FROM Instructor GROUPBY DeptName ) AS MaxSalaries;
INSERTINTO Takes (ID, CourseId, SecId, Semester, Year, Grade) SELECT S.ID, 'CS-001', 1, 'Fall', 2017, NULL FROM Student S WHERE S.DeptName ='Comp. Sci';
d.
1 2
DELETEFROM Takes WHERE ID ='12345'AND CourseId ='CS-001'AND SecId =1AND Semester ='Fall'ANDYear=2017;
e. 如果在运行DELETE语句之前没有先删除新课程段,那么在删除课程CS-001时,将会出现外键约束错误。 这是因为在大学模式中,Section表中CourseId列是对Course表中的CourseId列的外键引用,用于确保所有课程段的所属课程必须存在于Course表中。 如果先删除了所有与课程CS-001相关的课程段,那么在运行DELETE语句时就不会出现外键约束错误。
f.
1 2 3 4 5 6
DELETEFROM Takes WHERE CourseId IN ( SELECT CourseId FROM Course WHERELOWER(Title) LIKE'%advanced%' );
SELECTCOUNT(*) AS num_accidents FROM person p JOIN owns o ON p.driver_id = o.driver_id JOIN car c ON o.license_plate = c.license_plate JOIN participated pd ON o.license_plate = pd.license_plate AND p.driver_id = pd.driver_id JOIN accident a ON pd.report_number = a.report_number WHERE p.name ='John Smith';
b.
1 2 3 4
UPDATE participated SET damage_amount =3000.00 WHERE report_number ='AR2197' AND license_plate ='AABB2000';
3.15
1 2 3 4 5 6 7 8 9 10
SELECTDISTINCT c.* FROM customer c JOIN account a ON c.customer_id = a.customer_id JOIN branch b ON a.branch_id = b.branch_id WHERE b.city ='Brooklyn' ANDNOTEXISTS ( SELECT1 FROM account a2 WHERE a2.customer_id = c.customer )
3.16
1 2 3 4 5 6 7
SELECT e.employee_id, e.name FROM employee e JOIN works_on w ON e.employee_id = w.employee_id JOIN department d ON w.department_id = d.department_id JOIN address a1 ON e.address_id = a1.address_id JOIN address a2 ON d.address_id = a2.address_id WHERE a1.city = a2.city;
3.17
1 2 3
UPDATE employee SET salary = salary *1.1 WHERE company ='First Bank Corporation';
3.21
a.
1 2 3
select memb_no,name frommember where (select authors from book where authors=’McGraw-Hill’)
3.22
1
WHERE title IN (SELECTDISTINCT title FROM course)
3.23
不会写
3.24
1 2 3 4 5 6 7 8
SELECTDISTINCT DeptName FROM Department WHERE Budget IN ( SELECT Budget FROM Department WHERE DeptName ='physics' ) ORDERBY DeptName;
3.25
1 2 3 4 5 6 7 8
SELECT department.dept_name FROM department WHERE department.budget > ( SELECT department.budget FROM department WHERE department.dept_name ='Philosophy' ) ORDERBY department.dept_name ASC
3.26
1 2 3 4 5 6 7 8 9 10 11
SELECT takes.id, takes.course_id FROM takes WHERE takes.grade ISNULLAND takes.course_id IN ( SELECT takes.course_id FROM takes WHERE takes.grade ISNOTNULL GROUPBY akes.id, takes.course_id HAVINGCOUNT(DISTINCT takes.grade) >=2 ) GROUPBY takes.id, takes.course_id HAVINGCOUNT(*) >=2
3.27
1 2 3 4 5 6 7 8 9 10 11
SELECT takes.id FROM takes WHERE takes.grade ISNULLAND takes.course_id IN ( SELECT takes.course_id FROM takes WHERE takes.grade ISNOTNULL GROUPBY takes.id, takes.course_id HAVINGCOUNT(DISTINCT takes.grade) >=2 ) GROUPBY takes.id HAVINGCOUNT(DISTINCT takes.course_id) >=3
3.28
1 2 3 4 5 6 7 8 9 10 11 12
SELECTDISTINCT instructor.ID, instructor.name FROM instructor JOIN teaches ON instructor.ID = teaches.ID JOIN department ON instructor.dept_name = department.dept_name JOIN course ON teaches.course_id = course.course_id AND course.dept_name = department.dept_name GROUPBY instructor.ID, instructor.name HAVINGCOUNT(DISTINCT teaches.course_id) = ( SELECTCOUNT(*) FROM course WHERE dept_name = instructor.dept_name ) ORDERBY instructor.name
3.29
1 2 3 4 5 6 7 8 9 10
SELECT s.ID, s.name FROM student s WHERE s.dept_name ='History' AND s.name LIKE'D%' ANDNOTEXISTS ( SELECT* FROM takes t, course c WHERE t.course_id = c.course_id AND t.id = s.ID AND c.dept_name ='Music' HAVINGCOUNT(*) >=5 )
3.30
假设我们有以下关系示例,其中有两个教师,一个的薪水是100,另一个的薪水是200:
ID Name Salary 101 John 100 102 Michael 200 使用该查询,我们可以计算出:
SELECTDISTINCT Instructors.id, Instructors.name FROM Instructors LEFTJOIN Teachings ON Instructors.id = Teachings.id LEFTJOIN Enrollments ON Teachings.courseid = Enrollments.courseid AND Teachings.secid = Enrollments.secid AND Teachings.year = Enrollments.year AND Teachings.semester = Enrollments.semester WHERE Enrollments.grade ISNOTNULLAND Enrollments.grade !='A' OR Enrollments.grade ISNULL ORDERBY Instructors.id;
3.32
1 2 3 4 5 6 7 8 9 10
FROM Instructors JOIN Teachings ON Instructors.id = Teachings.id JOIN Enrollments ON Teachings.courseid = Enrollments.courseid AND Teachings.secid = Enrollments.secid AND Teachings.year = Enrollments.year AND Teachings.semester = Enrollments.semester WHERE Enrollments.grade ISNOTNULLAND Enrollments.grade !='A' GROUPBY Instructors.id, Instructors.name HAVINGCOUNT(DISTINCT Enrollments.courseid) >0 ORDERBY Instructors.id;
3.33
1 2 3 4 5 6 7
SELECTDISTINCT Courses.courseid, Courses.coursename FROM Courses JOIN Sections ON Courses.courseid = Sections.courseid JOIN TimeSlots ON Sections.timeid = TimeSlots.timeid WHERE Courses.deptname ='comp.sci' AND (TimeSlots.endtime >='12:00:00' OR TimeSlots.endtime LIKE'%PM') ORDERBY Courses.courseid;
3.34
1 2 3 4 5 6 7
SELECTDISTINCT Courses.courseid, Courses.coursename FROM Courses JOIN Sections ON Courses.courseid = Sections.courseid JOIN TimeSlots ON Sections.timeid = TimeSlots.timeid WHERE Courses.deptname ='comp.sci' AND (TimeSlots.endtime >='12:00:00' OR TimeSlots.endtime LIKE'%PM') ORDERBY Courses.courseid;
3.35
1 2 3 4 5 6 7 8 9
WITH EnrollCount AS ( SELECT courseid, secid, year, semester, COUNT(*) AS num FROM Enrollments GROUPBY courseid, secid, year, semester ) SELECT courseid, secid, year, semester, num FROM EnrollCount WHERE num = (SELECTMAX(num) FROM EnrollCount) ORDERBY courseid, secid, year, semester, num;