mysql多表查询练习

mysql多表查询练习**

  1. 查询科目对应的代课老师姓名(内,左,右连接查询)
#隐式内连接
SELECT
	co.cname,
	te.tname
FROM
	course as co,
	teacher as te
WHERE
co.teacher_id = te.tid

#显式内连接
SELECT
	co.cname,
	te.tname 
FROM
	course as co
	INNER JOIN teacher as te ON co.teacher_id = te.tid;

#左外连接
SELECT
	co.cname,
	te.tname 
FROM
	course as co
	LEFT JOIN 	teacher as te ON co.teacher_id = te.tid;
	
	-- 右外连接
SELECT
	co.cname,
	te.tname
FROM
	teacher as te
	RIGHT JOIN 	course as co ON te.tid =co.teacher_id;
	

在这里插入图片描述

  1. 查询物理成绩100分的姓名,班级,科目 ,成绩
SELECT 
	student.sname,
	class.caption,
	course.cname,
	score.num

FROM
course
JOIN  student
JOIN class
JOIN score on course.cid=score.course_id and student.sid=student_id and student.class_id=class.cid


WHERE

num=100 and cname='物理'

在这里插入图片描述
3.查询男女生人数

SELECT 
gender,
count(*) gender
FROM
student
	
GROUP BY
gender

在这里插入图片描述
4.查询平均成绩大于八十分的同学的姓名和平均成绩

SELECT
	* 
FROM
	(
SELECT
	student.sname,
	student.gender,
	class.caption,
	avg( score.num ) AS avg_score_num 
FROM
	score
	JOIN class
	JOIN student ON student.sid = score.student_id 
	AND student.class_id = class.cid 
GROUP BY
	student_id 
	) AS avg_score_num_list 
WHERE
	avg_score_num_list.avg_score_num >= 80

在这里插入图片描述

SELECT
	sname,
	avg_num 
FROM
	student
	JOIN ( SELECT student_id, avg( num ) avg_num FROM score GROUP BY student_id HAVING avg( num ) > 80 ) AS t2 ON sid = t2.student_id;

在这里插入图片描述
5. 查询所有学生的学号,姓名,选课数,总成绩

SELECT
	student.sid,
	student.sname,
	student.gender,
	class.caption,
	count( * ) AS course_num,
	SUM( score.num ) AS score_num 
FROM
	score
	JOIN class
	JOIN student ON student.sid = score.student_id 
	AND class.cid = student.class_id 
GROUP BY
	student_id

在这里插入图片描述

SELECT
	student.sid,
	sname,
	course_num,
	total_mark 
FROM
	student
	JOIN ( SELECT student_id, count( * ) course_num, sum( num ) total_mark FROM score GROUP BY student_id ) AS t ON sid = student_id;

在这里插入图片描述
6. 查询姓李老师

SELECT 
*
FROM
teacher
WHERE
tname like"李%"

在这里插入图片描述
7.显示聚合汇总所有表格

SELECT 
student.sid,
student.sname,
student.gender,
class.caption,
course.cname,
score.num,
teacher.tname
FROM
student
JOIN class
JOIN score
JOIN course 
JOIN teacher on course.cid=score.course_id and course.teacher_id=teacher.tid and student.sid=score.student_id and class.cid=student.class_id

在这里插入图片描述
8.查询没有报李平老师课的学生姓名

SELECT
	* 
FROM
	student 
WHERE
	student.sid NOT IN (
SELECT
	score.student_id 
FROM
	score 
WHERE
	score.course_id IN ( SELECT course.cid FROM course WHERE course.teacher_id IN ( SELECT teacher.tid FROM teacher WHERE teacher.tname = '李平老师' ) ) 
	)

在这里插入图片描述

  1. 查询物理课程比生物课程高的学生的学号
SELECT 
*
FROM 
(SELECT
sw.sid as id,
wl.num as wlnum,
sw.num as swnum

FROM 
(	SELECT
*
FROM
score
WHERE
	score.course_id = (SELECT cid FROM course WHERE cname = '生物') ) as sw
	JOIN (SELECT
*
FROM
score
WHERE
	course_id = ( SELECT cid FROM course WHERE cname = '物理' ) ) as wl on sw.student_id=wl.student_id
	)  as wl_sw_num
	WHERE
	wl_sw_num.wlnum>=wl_sw_num.swnum

在这里插入图片描述
10. 查询没有同时选修物理课程和体育课程的学生姓名

SELECT
* 
FROM 
student 
WHERE 
student.sid not in (SELECT 
wl_form.student_id
FROM 
(SELECT 
score.student_id
FROM
score
WHERE
score.course_id=(SELECT cid FROM course WHERE course.cname='体育')
) as ty_form
JOIN (SELECT 
score.student_id
FROM
score
WHERE
score.course_id=(SELECT cid FROM course WHERE course.cname='物理')) as wl_form  on wl_form.student_id=ty_form.student_id )



在这里插入图片描述

新建表

/*
 数据导入:
 Navicat Premium Data Transfer
 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 50624
 Source Host           : localhost
 Source Database       : sqlexam
 Target Server Type    : MySQL
 Target Server Version : 50624
 File Encoding         : utf-8
 Date: 10/21/2016 06:46:46 AM
*/
 
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
 
-- ----------------------------
--  Table structure for `class`
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `caption` varchar(32) NOT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
 
-- ----------------------------
--  Records of `class`
-- ----------------------------
BEGIN;
INSERT INTO `class` VALUES ('1', '三年二班'), ('2', '三年三班'), ('3', '一年二班'), ('4', '二年九班');
COMMIT;
 
-- ----------------------------
--  Table structure for `course`
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(32) NOT NULL,
  `teacher_id` int(11) NOT NULL,
  PRIMARY KEY (`cid`),
  KEY `fk_course_teacher` (`teacher_id`),
  CONSTRAINT `fk_course_teacher` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
 
-- ----------------------------
--  Records of `course`
-- ----------------------------
BEGIN;
INSERT INTO `course` VALUES ('1', '生物', '1'), ('2', '物理', '2'), ('3', '体育', '3'), ('4', '美术', '2');
COMMIT;
 
-- ----------------------------
--  Table structure for `score`
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `student_id` int(11) NOT NULL,
  `course_id` int(11) NOT NULL,
  `num` int(11) NOT NULL,
  PRIMARY KEY (`sid`),
  KEY `fk_score_student` (`student_id`),
  KEY `fk_score_course` (`course_id`),
  CONSTRAINT `fk_score_course` FOREIGN KEY (`course_id`) REFERENCES `course` (`cid`),
  CONSTRAINT `fk_score_student` FOREIGN KEY (`student_id`) REFERENCES `student` (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8;
 
-- ----------------------------
--  Records of `score`
-- ----------------------------
BEGIN;
INSERT INTO `score` VALUES ('1', '1', '1', '10'), ('2', '1', '2', '9'), ('5', '1', '4', '66'), ('6', '2', '1', '8'), ('8', '2', '3', '68'), ('9', '2', '4', '99'), ('10', '3', '1', '77'), ('11', '3', '2', '66'), ('12', '3', '3', '87'), ('13', '3', '4', '99'), ('14', '4', '1', '79'), ('15', '4', '2', '11'), ('16', '4', '3', '67'), ('17', '4', '4', '100'), ('18', '5', '1', '79'), ('19', '5', '2', '11'), ('20', '5', '3', '67'), ('21', '5', '4', '100'), ('22', '6', '1', '9'), ('23', '6', '2', '100'), ('24', '6', '3', '67'), ('25', '6', '4', '100'), ('26', '7', '1', '9'), ('27', '7', '2', '100'), ('28', '7', '3', '67'), ('29', '7', '4', '88'), ('30', '8', '1', '9'), ('31', '8', '2', '100'), ('32', '8', '3', '67'), ('33', '8', '4', '88'), ('34', '9', '1', '91'), ('35', '9', '2', '88'), ('36', '9', '3', '67'), ('37', '9', '4', '22'), ('38', '10', '1', '90'), ('39', '10', '2', '77'), ('40', '10', '3', '43'), ('41', '10', '4', '87'), ('42', '11', '1', '90'), ('43', '11', '2', '77'), ('44', '11', '3', '43'), ('45', '11', '4', '87'), ('46', '12', '1', '90'), ('47', '12', '2', '77'), ('48', '12', '3', '43'), ('49', '12', '4', '87'), ('52', '13', '3', '87');
COMMIT;
 
-- ----------------------------
--  Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `gender` char(1) NOT NULL,
  `class_id` int(11) NOT NULL,
  `sname` varchar(32) NOT NULL,
  PRIMARY KEY (`sid`),
  KEY `fk_class` (`class_id`),
  CONSTRAINT `fk_class` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;
 
-- ----------------------------
--  Records of `student`
-- ----------------------------
BEGIN;
INSERT INTO `student` VALUES ('1', '男', '1', '理解'), ('2', '女', '1', '钢蛋'), ('3', '男', '1', '张三'), ('4', '男', '1', '张一'), ('5', '女', '1', '张二'), ('6', '男', '1', '张四'), ('7', '女', '2', '铁锤'), ('8', '男', '2', '李三'), ('9', '男', '2', '李一'), ('10', '女', '2', '李二'), ('11', '男', '2', '李四'), ('12', '女', '3', '如花'), ('13', '男', '3', '刘三'), ('14', '男', '3', '刘一'), ('15', '女', '3', '刘二'), ('16', '男', '3', '刘四');
COMMIT;
 
-- ----------------------------
--  Table structure for `teacher`
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
  `tid` int(11) NOT NULL AUTO_INCREMENT,
  `tname` varchar(32) NOT NULL,
  PRIMARY KEY (`tid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
 
-- ----------------------------
--  Records of `teacher`
-- ----------------------------
BEGIN;
INSERT INTO `teacher` VALUES ('1', '张磊老师'), ('2', '李平老师'), ('3', '刘海燕老师'), ('4', '朱云海老师'), ('5', '李杰老师');
COMMIT;
 
SET FOREIGN_KEY_CHECKS = 1;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值