/*
Navicat Premium Data Transfer
Source Server : dnjs
Source Server Type : MySQL
Source Server Version : 80023
Source Host : localhost:3333
Source Schema : 查询sql练习
Target Server Type : MySQL
Target Server Version : 80023
File Encoding : 65001
Date: 20/04/2021 19:08:09
*/SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS =0;-- ------------------------------ Table structure for class-- ----------------------------DROPTABLEIFEXISTS`class`;CREATETABLE`class`(`cid`int(0)NOTNULLAUTO_INCREMENT,`caption`varchar(15)CHARACTERSET gbk COLLATE gbk_chinese_ci NULLDEFAULTNULL,`grade_id`int(0)NULLDEFAULTNULL,PRIMARYKEY(`cid`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= gbk COLLATE= gbk_chinese_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of class-- ----------------------------INSERTINTO`class`VALUES(1,'一年一班',1);INSERTINTO`class`VALUES(2,'二年一般',2);INSERTINTO`class`VALUES(3,'三年二班',3);INSERTINTO`class`VALUES(4,'一年二班',1);INSERTINTO`class`VALUES(5,'一年三班',1);INSERTINTO`class`VALUES(6,'一年四班',1);INSERTINTO`class`VALUES(7,'一年五班',1);INSERTINTO`class`VALUES(8,'一年六班',1);-- ------------------------------ Table structure for class_grade-- ----------------------------DROPTABLEIFEXISTS`class_grade`;CREATETABLE`class_grade`(`gid`int(0)NOTNULLAUTO_INCREMENT,`gname`varchar(25)CHARACTERSET gbk COLLATE gbk_chinese_ci NULLDEFAULTNULL,PRIMARYKEY(`gid`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= gbk COLLATE= gbk_chinese_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of class_grade-- ----------------------------INSERTINTO`class_grade`VALUES(1,'一年级');INSERTINTO`class_grade`VALUES(2,'二年级');INSERTINTO`class_grade`VALUES(3,'三年级');-- ------------------------------ Table structure for course-- ----------------------------DROPTABLEIFEXISTS`course`;CREATETABLE`course`(`cid`int(0)NOTNULLAUTO_INCREMENT,`cname`varchar(25)CHARACTERSET gbk COLLATE gbk_chinese_ci NULLDEFAULTNULL,`teacher_id`int(0)NULLDEFAULTNULL,PRIMARYKEY(`cid`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= gbk COLLATE= gbk_chinese_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of course-- ----------------------------INSERTINTO`course`VALUES(1,'生物',1);INSERTINTO`course`VALUES(2,'体育',1);INSERTINTO`course`VALUES(3,'物理',2);-- ------------------------------ Table structure for score-- ----------------------------DROPTABLEIFEXISTS`score`;CREATETABLE`score`(`sid`int(0)NOTNULLAUTO_INCREMENT,`student_id`int(0)NULLDEFAULTNULL,`course_id`int(0)NULLDEFAULTNULL,`score`double(8,1)NULLDEFAULTNULL,PRIMARYKEY(`sid`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= gbk COLLATE= gbk_chinese_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of score-- ----------------------------INSERTINTO`score`VALUES(1,1,1,60.0);INSERTINTO`score`VALUES(2,1,2,59.0);INSERTINTO`score`VALUES(3,2,1,99.0);INSERTINTO`score`VALUES(4,2,3,100.0);INSERTINTO`score`VALUES(5,1,3,88.0);INSERTINTO`score`VALUES(6,1,4,46.0);-- ------------------------------ Table structure for student-- ----------------------------DROPTABLEIFEXISTS`student`;CREATETABLE`student`(`sid`int(0)NOTNULL,`sname`varchar(25)CHARACTERSET gbk COLLATE gbk_chinese_ci NULLDEFAULTNULL,`gender`enum('男','女')CHARACTERSET gbk COLLATE gbk_chinese_ci NULLDEFAULTNULL,`class_id`int(0)NULLDEFAULTNULL,PRIMARYKEY(`sid`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= gbk COLLATE= gbk_chinese_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of student-- ----------------------------INSERTINTO`student`VALUES(1,'乔丹','女',1);INSERTINTO`student`VALUES(2,'艾弗森','女',1);INSERTINTO`student`VALUES(3,'科比','男',2);-- ------------------------------ Table structure for teach2cls-- ----------------------------DROPTABLEIFEXISTS`teach2cls`;CREATETABLE`teach2cls`(`tcid`int(0)NOTNULLAUTO_INCREMENT,`tid`int(0)NULLDEFAULTNULL,`cid`int(0)NULLDEFAULTNULL,PRIMARYKEY(`tcid`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= gbk COLLATE= gbk_chinese_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of teach2cls-- ----------------------------INSERTINTO`teach2cls`VALUES(1,1,1);INSERTINTO`teach2cls`VALUES(2,1,2);INSERTINTO`teach2cls`VALUES(3,2,1);INSERTINTO`teach2cls`VALUES(4,3,3);-- ------------------------------ Table structure for teacher-- ----------------------------DROPTABLEIFEXISTS`teacher`;CREATETABLE`teacher`(`tid`int(0)NOTNULL,`tname`varchar(25)CHARACTERSET gbk COLLATE gbk_chinese_ci NULLDEFAULTNULL,PRIMARYKEY(`tid`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= gbk COLLATE= gbk_chinese_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of teacher-- ----------------------------INSERTINTO`teacher`VALUES(1,'张三');INSERTINTO`teacher`VALUES(2,'李四');INSERTINTO`teacher`VALUES(3,'王五');SET FOREIGN_KEY_CHECKS =1;
查询:
#1利用id查询学生总人数。
SELECT
count( sid )
FROM
student;
#2先找出生物和物理的科目 在找出科目大于60分的
SELECT
sid,
sname
FROM
student
WHERE
sid IN ( SELECT student_id FROM score WHERE score >= 60 AND course_id IN ( SELECT cid FROM course WHERE cname = "生物" OR cname = "物理" ) );
#3学生表和class表内连接 在和年级表连接
SELECT
gname,
count( sname ) AS "年级人数"
FROM
student
INNER JOIN class ON student.class_id = class.cid
JOIN class_grade ON class.grade_id = class_grade.gid
GROUP BY
gname;
#4左连接teacher表和teach2cls表 like实现模糊查询
SELECT
count( teacher.tname ) AS '姓李的老师的个数',
count( teach2cls.tid ) AS '带的班级数'
FROM
teacher
LEFT JOIN teach2cls ON teacher.tid = teach2cls.tid
WHERE
teacher.tname LIKE '李%'
GROUP BY
teacher.tname;
#5内连接class和class_gread 表 对grade_id进行分组利用count筛选出小于五的班级数
SELECT
gid,
b.gname AS '年级'
FROM
class a
INNER JOIN class_grade b ON a.grade_id = b.gid
GROUP BY
grade_id
HAVING
count( caption ) < 5;
#6 内连接四张表 学生表/分数表/老师表/课程表 选出"张三",对姓名和id分组 筛选出大于2的学生姓名
SELECT
student.sid,
student.sname
FROM
student
INNER JOIN score ON score.student_id = student.sid
INNER JOIN course ON score.course_id = course.cid
INNER JOIN teacher ON course.teacher_id = teacher.tid
WHERE
teacher.tname = '张三'
GROUP BY
student.sname,
student.sid
HAVING
count( teacher.tname ) >= 2;#6
SELECT
student.sid,
student.sname
FROM
student
RIGHT JOIN score ON student.sid = score.student_id
WHERE
#7.使用右连接将分数表和学生表连接,将where分数表中编号为1,2
SELECT
student.sid,
student.sname
FROM
student
RIGHT JOIN score ON student.sid = score.student_id
WHERE
score.course_id = 1
OR score = 2;
#8没有带过高年级学生的id 左连接 teach2cls和teacher表 让cid不等于3,对tid分组
SELECT
teach2cls.tid,
teacher.tname
FROM
teach2cls
LEFT JOIN teacher ON teach2cls.tid = teacher.tid
WHERE
cid NOT IN ( SELECT cid FROM class WHERE grade_id = 3 )
GROUP BY
tid;