SQL查詢的:子查詢和多表查詢

@大愚@發表於2020-11-18
select * from student
--查詢成績大於80分的學生資訊
--方法一:子查詢
select * from student --主幹查詢學生資訊
where sno in 
(
 select sno from sc --只有成績表中有成績所以從成績表中查詢大於80分的學號再與學生表對應
 where grade > 80
)
--方法二:多表查詢
select distinct student.* from student --distinct 去重 因為查詢成績大於80的同學的資訊,但每一同學的成績不止一門但我們只需要一次同學的資訊,所以重複的我們就去重
inner join sc on student.sno = sc.sno
where grade > 80

--查詢資料庫成績大於80的學生資訊
--方法一:子查詢
select * from student
where sno in (
 select sno from sc -- 查詢在課程號和成績的限制下的學號
 where grade > 80 and cno = (
 select cno from course -- 查詢資料庫的課程號
 where cname = '資料庫'
 )

)
--方法二:多表查詢
select student.* from student
inner join sc on student.sno = sc.sno
join course on sc.cno = course.cno
where cname = '資料庫' and grade > 80


--選修10門課的學生學號
--思路:我們要先查出來每名同學選的總門數,再篩選掉
select sno,count(*) 科目數 from sc
group by sno
having COUNT(*) = 10

--選修10門課同學的資訊
select * from student
inner join (select sno from sc group by sno having COUNT(*) = 10) a on student.sno = a.sno --把查詢結果當成新的一張表

相關文章