嵌套、组合、统计查询
作者:互联网
--嵌套查询
--1. 求选修了C语言编程的学生学号和姓名
SELECT studentid,student_name FROM student
WHERE studentid IN (SELECT studentid FROM sc
WHERE courseid IN (SELECT courseid FROM course
WHERE course_name='C语言编程'))
--2. 求C1课程的成绩高于李明的学生学号和成绩
SELECT studentid,grade FROM sc
WHERE courseid='C1' AND grade>(SELECT grade
FROM sc
WHERE courseid='C1' AND studentid=(SELECT studentid FROM student
WHERE student_name='李明'))
--3. 求没有选修C7课程的学生姓名
SELECT student_name FROM student
WHERE NOT EXISTS (SELECT * FROM sc
WHERE student.studentid=studentid AND courseid='C7')
--4. 查询被学生S1选修,但没有被S3选修的课程号
SELECT courseid
FROM sc A
WHERE studentid='S1' and NOT EXISTS (SELECT * FROM sc B
WHERE A.courseid=B.courseid and B.studentid='S3')
--5. 查询与 丁玉 在同一个系学习的学生(可包括丁玉)
SELECT *
FROM student
WHERE department=(SELECT department
FROM student
WHERE student_name='丁玉')
--6. 查询 每个学生超过他 选修课程平均成绩的课程号和学号
SELECT courseid,studentid
FROM sc A
WHERE grade>(SELECT AVG(grade)
FROM sc B
GROUP BY B.studentid
HAVING A.studentid=B.studentid)
--组合查询及统计查询
-- 查询机械工业出版社出版的各类图书的平均定价
select book_type,avg(price) 平均定价
from book
where publisher='机械工业出版社'
group by book_type
-- 查询计算机类或机械工业出版社出版的图书,并对出版社排序
select *
from book
where publisher='机械工业出版社' or book_type='计算机'
order by publisher
--查询同一出版社出版的同名图书
select *
from book A
where exists( select * from book B
where A.publisher=B.publisher and A.book_name=B.book_name and A.bookid <> B.bookid)
-- 查找某种图书类别,要求该类别中最高图书定价不低于每个类别的平均定价
select book_type
from book
group by book_type
having max(price)>=all (select AVG(price)
from book
group by book_type)
-- 查询同一作者在不同出版社出版的图书
select *
from book A
where exists (select * from book B
where A.author=B.author and A.publisher<>B.publisher )
-- 查询读者总人数
select count(*) 总人数
from reader
-- 查询有借书的读者人数
select count(distinct readerid) 借书的读者人数
from borrow
-- 查询不同读者借书的册数
select readerid,count(bookid) 借阅图书册数
from borrow
group by readerid
-- 查询借书数目超过1本的读者编号,姓名
select readerid,reader_name
from reader
where readerid in( select readerid
from borrow
group by readerid
having count(bookid)>1)
--1)查询选修C1课程,并且也选修C2课程的学生学号。
select studentid
from sc
where courseid='C1'
intersect
select studentid
from sc
where courseid='C2'
--2)查询选修了C1课程但没有选修C2课程的学生学号。
select studentid
from sc
where courseid='C1'
except
select studentid
from sc
where courseid='C2'
--3)查询学生的总人数
select count(*) 学生总人数
from student
--4)查询选修了课程的学生人数
select count(distinct studentid) 选修了课程的人数
from sc
--5)查询课程和选修该课程的人数
select courseid,count(studentid) 该课程选修人数
from sc
group by courseid
--6)查询选修课超过3门课的学生学号
select studentid
from sc
group by studentid
having count(courseid)>3
标签:studentid,组合,courseid,--,查询,嵌套,book,sc,select 来源: https://blog.csdn.net/Doctor__Chen/article/details/122309362