MySql多表查询练习(1)

版权声明: https://blog.csdn.net/pbrlovejava/article/details/82500747

目录

一、需求

二、解题思路

三、小结


本篇文章作为前面四篇基础文章的回顾,从某公司的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函数,来统计其出现的次数,通常需要使用子查询

猜你喜欢

转载自blog.csdn.net/pbrlovejava/article/details/82500747
今日推荐