1. 程式人生 > >MySql多表查詢練習(1)

MySql多表查詢練習(1)

目錄

一、需求

三、小結

本篇文章作為前面四篇基礎文章的回顧,從某公司的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函式,來統計其出現的次數,通常需要使用子查詢