表結構,創建原表的代碼在最后
-- cid課程id; tid老師id; sid學生id;
select * from t_mysql_course;
select * from t_mysql_score;
select * from t_mysql_student;
select * from t_mysql_teacher;
1.?查詢" 01 “課程比” 02 "課程成績高的學生的信息及課程分數
-- 查詢" 01 “課程比” 02 "課程成績高的學生的信息及課程分數
-- 把課程01和課程02單獨拉出來,再進行對比,為了確保能對應成功,需要s1.sid = s.sid這個條件
-- 為了確保對比的是同一個人,需要有s1.sid = s2.sid
select s.*,s1.score a, s2.score b
from
t_mysql_student s,
(select * from t_mysql_score where cid = "01") s1,
(select * from t_mysql_score where cid = "02") s2
where
s1.sid = s2.sid and
s1.sid = s.sid and
s1.score > s2.score;
2.?查詢同時存在 " 01 “課程和” 02 "課程的情況 SELECT
-- 查詢同時存在 " 01 “課程和” 02 "課程的情況
select s1.sid from
(select * from t_mysql_score where cid = "01") as s1
inner join
(select * from t_mysql_score where cid = "02") as s2
where s1.sid = s2.sid;
3.?查詢存在 " 01 “課程但可能不存在” 02 "課程的情況 ( 不存在時顯示為 NULL )?
-- 查詢不存在" 01 “課程但存在” 02 "課程的情況
select s.* from t_mysql_score s where sid
not in (select sid from t_mysql_score where cid = "01") and s.cid = "02";
4.?查詢平均成績大于等于 60 分的同學的學生編號和學生姓名和平均成績
-- 查詢平均成績大于等于 60 分的同學的學生編號和學生姓名和平均成績
select s.sid,s.sname,s2.score from t_mysql_student s
, (select sid,avg(score) as score from t_mysql_score group by sid) as s2
where s.sid = s2.sid and s2.score >= 60;
5.?查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績(沒成績的顯示為 null)
-- 查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績(沒成績的顯示為 null)
select s.sid,s.sname,s2.num_cid,s2.sum_score
from t_mysql_student s,
(select s1.sid,count(cid) as num_cid,sum(score) as sum_score from t_mysql_score s1 group by sid) as s2
where s.sid = s2.sid;
6.?查詢學過「張三」老師授課的同學的信息
-- 查詢學過「張三」老師授課的同學的信息select st.sid,st.sname,st.sage,st.ssex from t_mysql_student st,
t_mysql_course co,
t_mysql_score sc,
t_mysql_teacher te
where te.tname like '張三' and
te.tid = co.tid and
co.cid = sc.cid and
sc.sid = st.sid;
7.?查詢沒有學全所有課程的同學的信息
-- 查詢沒有學全所有課程的同學的信息
select s.*, COUNT(sc.cid) as count_cid
from t_mysql_student s
join t_mysql_score sc
on s.sid = sc.sid
group by sc.sid
having
COUNT(sc.cid) < (select count(*) from t_mysql_course);
8.?查詢沒學過"張三"老師講授的任一門課程的學生姓名
-- 查詢沒學過"張三"老師講授的任一門課程的學生姓名
select * from t_mysql_student where sid
not in
(select sc.sid from t_mysql_course co, t_mysql_score sc, t_mysql_teacher te
where te.tname like '張三' and te.tid = co.tid and co.cid = sc.cid);
9.?查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績
-- 查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績
select s.sid,s.sname,round(avg(sc.score),2) as score
from t_mysql_student s,t_mysql_score sc
where s.sid = sc.sid
and sc.score < 60 group by sid having count(sc.cid) >= 2;
10.?檢索" 01 "課程分數小于 60,按分數降序排列的學生信息
-- 檢索" 01 "課程分數小于 60,按分數降序排列的學生信息
select
s.sid,s.sname,sc.score
from
t_mysql_student s,t_mysql_score sc
where
s.sid = sc.sid
and sc.score < 60
and sc.cid = "01"
order by score desc;
11.?按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績
-- 按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績
select
s.sname,s.sid,round(avg(sc.score),2) as avg_score,
max(CASE WHEN sc.cid = "01" THEN sc.score END )語文,
max(CASE WHEN sc.cid = "02" THEN sc.score END )數學,
max(CASE WHEN sc.cid = "03" THEN sc.score END )英語
from
t_mysql_student s,t_mysql_score sc
where
s.sid = sc.sid
group by s.sid
order by avg(sc.score) desc;
12.?-- 以如下形式顯示:課程 ID,課程 name,最高分,最低分,平均分,及格率,中等率,優良率,優秀率及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90
-- 要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列
-- 以如下形式顯示:課程 ID,課程 name,最高分,最低分,平均分,及格率,中等率,優良率,優秀率及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90
-- 要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列select
co.cid, co.cname, max(sc.score) 最高分, min(sc.score) 最低分, round(avg(sc.score),2) 平均分,
concat(round(sum(if (sc.score > 60, 1,0))/count(sc.score)*100,2),'%') 及格率
from t_mysql_course co,t_mysql_score sc
where co.cid = sc.cid
group by co.cid;
SUM(IF(sc.score > 60, 1, 0)):這部分計算了成績大于 60 分的記錄的數量。
如果某條記錄的成績大于 60 分,那么 IF 函數返回 1,否則返回 0。然后,
SUM 函數將這些值相加,得到及格的記錄數。COUNT(sc.score):這部分計算了總記錄數,無論成績是否及格。sum(...) / count(sc.score):這部分計算及格的記錄數除以總記錄數,得到及格率。ROUND(..., 2):這部分使用 ROUND 函數將計算結果保留兩位小數。CONCAT(..., '%'):最后,CONCAT 函數將計算結果和百分號字符 "%" 連接在一起,
得到一個帶百分號的及格率字符串。
13. 原表
/*Navicat Premium Data TransferSource Server : localhostSource Server Type : MySQLSource Server Version : 80018Source Host : localhost:3306Source Schema : mybatis_ssmTarget Server Type : MySQLTarget Server Version : 80018File Encoding : 65001Date: 04/07/2023 23:53:33
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for t_mysql_course
-- ----------------------------
DROP TABLE IF EXISTS `t_mysql_course`;
CREATE TABLE `t_mysql_course` (`cid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '課程編號',`cname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '課程名稱',`tid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '教師編號',PRIMARY KEY (`cid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '課程信息表' ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of t_mysql_course
-- ----------------------------
INSERT INTO `t_mysql_course` VALUES ('01', '語文', '02');
INSERT INTO `t_mysql_course` VALUES ('02', '數學', '01');
INSERT INTO `t_mysql_course` VALUES ('03', '英語', '03');-- ----------------------------
-- Table structure for t_mysql_score
-- ----------------------------
DROP TABLE IF EXISTS `t_mysql_score`;
CREATE TABLE `t_mysql_score` (`sid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '學生編號,外鍵',`cid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '課程編號,外鍵',`score` float NULL DEFAULT 0 COMMENT '成績',INDEX `sid`(`sid`) USING BTREE,INDEX `cid`(`cid`) USING BTREE,CONSTRAINT `t_mysql_score_ibfk_1` FOREIGN KEY (`sid`) REFERENCES `t_mysql_student` (`sid`) ON DELETE RESTRICT ON UPDATE RESTRICT,CONSTRAINT `t_mysql_score_ibfk_2` FOREIGN KEY (`cid`) REFERENCES `t_mysql_course` (`cid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '成績信息表' ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of t_mysql_score
-- ----------------------------
INSERT INTO `t_mysql_score` VALUES ('01', '01', 80);
INSERT INTO `t_mysql_score` VALUES ('01', '02', 90);
INSERT INTO `t_mysql_score` VALUES ('01', '03', 99);
INSERT INTO `t_mysql_score` VALUES ('02', '01', 70);
INSERT INTO `t_mysql_score` VALUES ('02', '02', 60);
INSERT INTO `t_mysql_score` VALUES ('02', '03', 80);
INSERT INTO `t_mysql_score` VALUES ('03', '01', 80);
INSERT INTO `t_mysql_score` VALUES ('03', '02', 80);
INSERT INTO `t_mysql_score` VALUES ('03', '03', 80);
INSERT INTO `t_mysql_score` VALUES ('04', '01', 50);
INSERT INTO `t_mysql_score` VALUES ('04', '02', 30);
INSERT INTO `t_mysql_score` VALUES ('04', '03', 20);
INSERT INTO `t_mysql_score` VALUES ('05', '01', 76);
INSERT INTO `t_mysql_score` VALUES ('05', '02', 87);
INSERT INTO `t_mysql_score` VALUES ('06', '01', 31);
INSERT INTO `t_mysql_score` VALUES ('06', '03', 34);
INSERT INTO `t_mysql_score` VALUES ('07', '02', 89);
INSERT INTO `t_mysql_score` VALUES ('07', '03', 98);-- ----------------------------
-- Table structure for t_mysql_student
-- ----------------------------
DROP TABLE IF EXISTS `t_mysql_student`;
CREATE TABLE `t_mysql_student` (`sid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '學生編號',`sname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '學生名稱',`sage` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '學生年齡',`ssex` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '學生性別',PRIMARY KEY (`sid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '學生信息表' ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of t_mysql_student
-- ----------------------------
INSERT INTO `t_mysql_student` VALUES ('01', '趙雷', '1990-01-01', '男');
INSERT INTO `t_mysql_student` VALUES ('02', '錢電', '1990-12-21', '男');
INSERT INTO `t_mysql_student` VALUES ('03', '孫風', '1990-12-20', '男');
INSERT INTO `t_mysql_student` VALUES ('04', '李云', '1990-12-06', '男');
INSERT INTO `t_mysql_student` VALUES ('05', '周梅', '1991-12-01', '女');
INSERT INTO `t_mysql_student` VALUES ('06', '吳蘭', '1992-01-01', '女');
INSERT INTO `t_mysql_student` VALUES ('07', '鄭竹', '1989-01-01', '女');
INSERT INTO `t_mysql_student` VALUES ('09', '張三', '2017-12-20', '女');
INSERT INTO `t_mysql_student` VALUES ('10', '李四', '2017-12-25', '女');
INSERT INTO `t_mysql_student` VALUES ('11', '李四', '2012-06-06', '女');
INSERT INTO `t_mysql_student` VALUES ('12', '趙六', '2013-06-13', '女');
INSERT INTO `t_mysql_student` VALUES ('13', '孫七', '2014-06-01', '女');-- ----------------------------
-- Table structure for t_mysql_teacher
-- ----------------------------
DROP TABLE IF EXISTS `t_mysql_teacher`;
CREATE TABLE `t_mysql_teacher` (`tid` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '教師編號',`tname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '教師名稱',PRIMARY KEY (`tid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '教師信息表' ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of t_mysql_teacher
-- ----------------------------
INSERT INTO `t_mysql_teacher` VALUES ('01', '張三');
INSERT INTO `t_mysql_teacher` VALUES ('02', '李四');
INSERT INTO `t_mysql_teacher` VALUES ('03', '王五');SET FOREIGN_KEY_CHECKS = 1;