3.22、3.23、3.24
阿新 • • 發佈:2018-12-22
3.22 不使用unique結構,重寫下面的where子句:
where unique(select title from course)
不使用unique的話,SQL應該如下:
where 1 >= (select count(title) from course)
3.23 考慮查詢:
select course_id, semester, year, sec_id, avg(tot_cred) from takes natural join student where year = 2009 group by course_id, semester, year, sec_id having count(ID) >= 2;
解釋為什麼在from子句中還加上與section的連線不會改變查詢結果。
這個SQL查詢查詢的是“找出在2009年開課的課程段中選修人數達到2人以上的”。
因為takes中的主碼已經包含了課程段中的主碼資訊,所以做不做連線已經沒有必要。除非你需要section中主碼外的其他屬性資訊。
3.24 考慮查詢:
with dept_total(dept_name, value) as (select dept_name, sum(salary) from instructor group by dept_name), dept_total_avg(value) as (select avg(value) from dept_total) select dept_name from dept_total, dept_total_avg where dept_total.value >= dept_total_avg.value;
不使用with結構,重寫此查詢。
這條SQL語句的意思是:查詢那些系工資總和大於全校每個系平均工資的系。
不使用with,重寫SQL:
select dept_name from instructor
group by dept_name
having sum(salary) >= (
select avg(sum_salary) from
(select dept_name, sum(salary)
from instructor
group by dept_name)
as dept_total(dept_name, sum_salary)
);