MySql多表查詢練習(1)
阿新 • • 發佈:2019-02-15
目錄
本篇文章作為前面四篇基礎文章的回顧,從某公司的Java面試題入手,講解三表查詢的常見需求以及常見查詢方法,夯實MySql的連線查詢、子查詢基礎。
一、需求
有三張表,學生表student,課程course,學生課程表sc,學生可以選修多門課程,一門課程可以被多個學生選修,通過sc 表關聯。
1)寫出建表語句;
2)寫出SQL 語句,查詢選修了所有選修課程的學生;
3)寫出SQL 語句,查詢選修了5 門以上的課程的學生。
二、解題思路
1、這是一種典型的三表查詢,學生表中必須包含有學生id和姓名,課程表必須有課程id和姓名,學生可以選多門課,每門課都能被多個學生選擇,所以兩者是多對多關係,從而衍生出了第三張關係表,這張關係表必須包含學生id和課程id。
CREATE TABLE s(
idINT PRIMARY KEY ,
name VARCHAR(32),
sex CHAR,
age INT
)
CREATE TABLE c(
id INT PRIMARY KEY,
name VARCHAR(32)
)
CREATE TABLE sc(
sid INT REFERENCES s(id),
cid INT REFERENCES c(id),
PRIMARY KEY(sid,cid)
)
2、要查出選修所有課的學生,我們先要知道課程的總數量是什麼,並且要在選課表中查詢該生id對應的課程數量是否和總課程數相等
Select s.name from s s
where
(select count(*) from c) =
(select count(*) from sc1 sc1
where sc1.sid = s.id)
3、選修了五門課以上,那麼說明該學生的id在選課表中出現的次數是5次以上
SELECT s.name FROM s s
WHERE (SELECT COUNT(*) FROM sc sc WHERE
s.id = sc.sid )
> 5
三、小結
形如“XX選的xx數、XX的出現xx數”這樣的問題,幾乎都要用到COUNT函式,來統計其出現的次數,通常需要使用子查詢