SQL经典50题总结

news2024/11/24 2:09:33

SQL经典50题总结

  • SQL经典50题总结
  • 1.数据准备
  • 50题
    • 1.查询"01" 课程比 "02" 课程成绩高的学生的信息及课程分数
    • 2.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
    • 3.查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
    • 4.查询姓“张”的老师个数
    • 5.查询没学过张三老师课的学生的学号和姓名
    • 6.查询学过张三老师所教的所有课程的同学的学号和姓名
    • 7.查询学过01课程并且学过02课程的学生
    • 8.查询学过02课程的总成绩
    • 9.查询所有课程成绩小于60的学生
    • 10.查询没有学全所有课的学生学号、姓名
    • 11.查询至少有一门课与学号为“01”的学生所学课程相同的学生学号、姓名
    • 12.查询和“01”学号学生所学课程完全相同的学生学号
    • 13.查询没学过"张三"老师讲授的任一门课程的学生姓名
    • 15.查询两门及其以上不及格的同学的学号、姓名和平均成绩
    • 16.(略)检索01课程分数小于60 ,按课程分数[降序排列](https://so.csdn.net/so/search?q=降序排列&spm=1001.2101.3001.7020)学生信息
    • 17.按平均成绩从高到低显示所有学生的所有课程的成绩和平均成绩
    • 18.查询各科成绩最高分、最低分、平均分、及格率、中等率、优良率、优秀率
    • 19.按各科成绩进行排序,并显示排名
    • 20.查询学生的总成绩并进行排名
    • 21.查询不同老师所教不同课程平均分从高到低展示
    • 22.查询所有课程的成绩第2名到第3名的学生信息及该课程成绩
    • 23.使用分段来统计各科成绩,分别统计各分数段人数:课程ID和课程名称
    • 24.查询学生平均成绩以及排名
    • 25.查询各科成绩前三名的记录(不考虑成绩并列情况)
    • 26.查询每门课程被选修的学生数
    • 27.查询出只有两门课程的全部学生的学号和姓名
    • 28.查询男生、女生人数
    • 29. **查询名字中含有"三"字的学生信息**
    • 31.**查询1990年出生的学生名单**
    • 32.查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩
    • **33.查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列**
    • 34.(略)查询课程名称为"数学",且分数低于60的学生姓名和分数
    • 35.查询所有学生的课程及分数情况
    • 36.查询任何一门课程成绩在70分以上的姓名、课程名称和分数
    • 37.(略)查询不及格的课程并按课程号从大到小排列
    • 38.查询课程编号为03且课程成绩在80分以上的学生的学号和姓名
    • 39.求每门课程的学生人数
    • 40.查询选修“张三”老师所授课程的学生中成绩最高的学生姓名及其成绩
    • 41.查询某个不同课程但成绩相同的学生编号、课程编号、学生成绩
    • 42.查询每一门课程最好的前两名
    • 43.统计每门课程的学生选修人数(超过5人的课程才统计)。
    • 44.检索至少选修两门课程的学生学号
    • 45.查询选修了全部课程的学生信息
    • 46.(略)查询各学生的年龄
    • 47.(略)查询本周过生日的学生
    • 48.查询下周过生日的学生
    • 49.(略)查询本月过生日的学生
    • 50.查询下月过生日的学生

SQL经典50题总结

1.数据准备

/*
 Navicat Premium Data Transfer

 Source Server         : localhost_3306
 Source Server Type    : MySQL
 Source Server Version : 50730
 Source Host           : localhost:3306
 Source Schema         : sql50

 Target Server Type    : MySQL
 Target Server Version : 50730
 File Encoding         : 65001

 Date: 05/07/2022 18:15:43
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course`  (
  `CId` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `Cname` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `TId` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES ('01', '语⽂', '02');
INSERT INTO `course` VALUES ('02', '数学', '01');
INSERT INTO `course` VALUES ('03', '英语', '03');

-- ----------------------------
-- Table structure for sc
-- ----------------------------
DROP TABLE IF EXISTS `sc`;
CREATE TABLE `sc`  (
  `SId` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `CId` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `score` decimal(18, 1) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of sc
-- ----------------------------
INSERT INTO `sc` VALUES ('01', '01', 80.0);
INSERT INTO `sc` VALUES ('01', '02', 90.0);
INSERT INTO `sc` VALUES ('01', '03', 99.0);
INSERT INTO `sc` VALUES ('02', '01', 70.0);
INSERT INTO `sc` VALUES ('02', '02', 60.0);
INSERT INTO `sc` VALUES ('02', '03', 80.0);
INSERT INTO `sc` VALUES ('03', '01', 80.0);
INSERT INTO `sc` VALUES ('03', '02', 80.0);
INSERT INTO `sc` VALUES ('03', '03', 80.0);
INSERT INTO `sc` VALUES ('04', '01', 50.0);
INSERT INTO `sc` VALUES ('04', '02', 30.0);
INSERT INTO `sc` VALUES ('04', '03', 20.0);
INSERT INTO `sc` VALUES ('05', '01', 76.0);
INSERT INTO `sc` VALUES ('05', '02', 87.0);
INSERT INTO `sc` VALUES ('06', '01', 31.0);
INSERT INTO `sc` VALUES ('06', '03', 34.0);
INSERT INTO `sc` VALUES ('07', '02', 89.0);
INSERT INTO `sc` VALUES ('07', '03', 98.0);

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `SId` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `Sname` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `Sage` datetime(0) NULL DEFAULT NULL,
  `Ssex` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('01', '赵雷', '1990-01-01 00:00:00', '男');
INSERT INTO `student` VALUES ('02', '钱电', '1990-12-21 00:00:00', '男');
INSERT INTO `student` VALUES ('03', '孙⻛', '1990-12-20 00:00:00', '男');
INSERT INTO `student` VALUES ('04', '李云', '1990-12-06 00:00:00', '男');
INSERT INTO `student` VALUES ('05', '周梅', '1991-12-01 00:00:00', '⼥');
INSERT INTO `student` VALUES ('06', '吴兰', '1992-01-01 00:00:00', '⼥');
INSERT INTO `student` VALUES ('07', '郑⽵', '1989-01-01 00:00:00', '⼥');
INSERT INTO `student` VALUES ('09', '张三', '2017-12-20 00:00:00', '⼥');
INSERT INTO `student` VALUES ('10', '李四', '2017-12-25 00:00:00', '⼥');
INSERT INTO `student` VALUES ('11', '李四', '2012-06-06 00:00:00', '⼥');
INSERT INTO `student` VALUES ('12', '赵六', '2013-06-13 00:00:00', '⼥');
INSERT INTO `student` VALUES ('13', '孙七', '2014-06-01 00:00:00', '⼥');

-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher`  (
  `TId` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `Tname` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('01', '张三');
INSERT INTO `teacher` VALUES ('02', '李四');
INSERT INTO `teacher` VALUES ('03', '王五');

SET FOREIGN_KEY_CHECKS = 1;

库表结构

在这里插入图片描述

学生表 student

教师表 teacher

课程信息表 course

成绩表 sc

50题

有些例题比较简单直接略过!

1.查询"01" 课程比 “02” 课程成绩高的学生的信息及课程分数

考点总结:考察联表语句应用,多表联表。

SELECT
	A.*,
	sc1.sc1_core,
	sc2.sc2_core 
FROM
	student AS A
	LEFT JOIN ( SELECT SId, score AS sc1_core FROM sc WHERE CId = '01' ) AS sc1 ON A.SId = sc1.SId
	LEFT JOIN ( SELECT SId, score AS sc2_core FROM sc WHERE CId = '02' ) AS sc2 ON A.SId = sc2.SId 
WHERE
	sc1_core > sc2_core
SId	Sname	Sage	Ssex	sc1_core	sc2_core
02	钱电	1990-12-21 00:00:00	男	70.0	60.0
04	李云	1990-12-06 00:00:00	男	50.0	30.0

2.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩

考点总结:

1.考察having的使用,跟函数有关的条件语句要用having不能用where

2.group by的使用 通过sid分组而计算平均值

SELECT
	SId,
	avg( score ) AS avgcore 
FROM
	sc 
GROUP BY
	SId 
HAVING
	avgcore > 60

3.查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩

考点总结:

1.考察ifnull 函数使用

2.考察 sum 函数和case when语句的使用,注意case when 后边要加end

3.count函数的使用

SELECT
	a.Sid,
	a.Sname,
	count( sc.Cid ),
	IFNULL( sum( sc.score ), 0 ) --如果为null则赋值为0
  -- sum( CASE WHEN sc.score IS NULL THEN 0 ELSE sc.score END )
FROM
	student AS a
	LEFT JOIN sc ON sc.SId = a.Sid 
GROUP BY
	a.Sid,a.Sname

4.查询姓“张”的老师个数

select count(*) from teacher where Tname like '张%'

5.查询没学过张三老师课的学生的学号和姓名

SELECT
	SId,
	Sname 
FROM
	student 
WHERE
	SId NOT IN (
	SELECT DISTINCT
		a.SId 
	FROM
		student a
		LEFT JOIN sc b ON a.SId = b.SId
		LEFT JOIN course c ON b.CId = c.CId
		LEFT JOIN teacher d ON c.TId = d.TId 
	WHERE
	d.Tname = '张三' 
	)

6.查询学过张三老师所教的所有课程的同学的学号和姓名

SELECT
	a.SId,
	a.Sname 
FROM
	student a
	LEFT JOIN sc b ON a.SId = b.SId
	LEFT JOIN course c ON b.CId = c.CId
	LEFT JOIN teacher d ON c.TId = d.TId 
WHERE
	d.Tname = '张三'

7.查询学过01课程并且学过02课程的学生

方法一 直接用条件查询

方法二联表晒出交集 注意这就涉及了join 的八种变换,详细见总结过的联表变换

数据库总结之八种常用join变化

-- 方法一
select SId,Sname from student where SId in 
(select SId from sc WHERE CId = '01')
and SId  in 
(select SId from sc where CId = '02')

-- 方法二
SELECT
	* 
FROM
	student 
WHERE
	student.sid IN (
	SELECT
		a.sid 
	FROM
		( SELECT sid FROM sc WHERE sc.CId = '01' ) AS a
	INNER JOIN ( SELECT sid FROM sc WHERE sc.CId = '02' ) AS b ON a.sid = b.sid 
	)
 

8.查询学过02课程的总成绩

SELECT sum(score) from sc where CId = '02'

9.查询所有课程成绩小于60的学生

用不及格的科目数等于所有科目数来判断所有科都不及格。

SELECT
	a.sid,
	student.sname
FROM
	( SELECT sc.sid, count( sc.CId ) AS acount FROM sc WHERE sc.score < 60 GROUP BY sc.sid )
	AS a
	INNER JOIN 
	( SELECT sc.sid, count( sc.CId ) AS bcount FROM sc GROUP BY sc.sid ) 
	AS b ON a.sid = b.sid 
	inner join student on student.sid = a.sid
WHERE
	a.acount = b.bcount

10.查询没有学全所有课的学生学号、姓名

SELECT
	a.SId,
	a.Sname 
FROM
	student a
	LEFT JOIN sc b ON a.SId = b.SId 
GROUP BY
	a.SId,
	a.Sname 
HAVING
	count(DISTINCT b.cid ) < (
	SELECT
		count( cid ) 
	FROM
	course 
	)

11.查询至少有一门课与学号为“01”的学生所学课程相同的学生学号、姓名

SELECT
	student.sid,
	student.sname 
FROM
	student
	INNER JOIN (
	SELECT DISTINCT
		sc.SId 
	FROM
		sc 
	WHERE
		sc.CId IN ( SELECT sc.cid FROM sc WHERE sc.SId = '01' ) 
	AND sc.SId != '01' 
	) AS a ON a.SId = student.sid

12.查询和“01”学号学生所学课程完全相同的学生学号

SELECT
	* 
FROM
	student 
WHERE
	SId IN (SELECT SId 
			FROM
		(SELECT	* FROM	sc a WHERE CId IN ( SELECT CId FROM sc WHERE SId = 01 )) b 
	GROUP BY SId 
	HAVING
		count( CId ) =(SELECT count( CId ) FROM sc c WHERE SId = 01 )) 
	AND SId != 01
	

13.查询没学过"张三"老师讲授的任一门课程的学生姓名

SELECT
	student.sid,
	student.sname 
FROM
	student 
WHERE
	student.sid NOT IN (
	SELECT
		sc.sid 
	FROM
		sc
		INNER JOIN course ON sc.CId = course.CId
		INNER JOIN teacher ON course.tid = teacher.TId 
	AND teacher.Tname = '张三' 
	)

15.查询两门及其以上不及格的同学的学号、姓名和平均成绩

SELECT
	sc.sid,
	student.sname,
	avg( sc.score ) 
FROM
	sc
	INNER JOIN student ON student.sid = sc.sid 
WHERE
	sc.score < 60 GROUP BY sid HAVING count( DISTINCT sc.cid ) >=2

16.(略)检索01课程分数小于60 ,按课程分数降序排列学生信息

SELECT
	student.sid,
	student.sname 
FROM
	sc
	INNER JOIN student ON sc.sid = student.sid 
WHERE
	sc.cid = '01' 
	AND sc.score < 60 
ORDER BY
	sc.score DESC

17.按平均成绩从高到低显示所有学生的所有课程的成绩和平均成绩

SELECT
	sc.sid,
	max( CASE WHEN sc.cid = '01' THEN sc.score ELSE NULL END ) '语文',
	max( CASE WHEN sc.cid = '02' THEN sc.score ELSE NULL END ) '数学',
	max( CASE WHEN sc.cid = '03' THEN sc.score ELSE NULL END ) '英语',
	avg( sc.score ) 
FROM
	sc 
GROUP BY
	sc.sid 
ORDER BY
	avg( sc.score ) DESC

18.查询各科成绩最高分、最低分、平均分、及格率、中等率、优良率、优秀率

及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90

SELECT
	course.cid,
	course.Cname,
	max( sc.score ) '最高分',
	min( sc.score ) '最低分',
	avg( sc.score ) '平均分',
	sum( CASE WHEN sc.score >= 60 THEN 1 ELSE 0 END )/ count( sc.SId ) '及格',
	sum( CASE WHEN sc.score >= 70 AND sc.score < 80 THEN 1 ELSE 0 END )/ count( sc.SId ) '中等',
	sum( CASE WHEN sc.score >= 80 AND sc.score < 90 THEN 1 ELSE 0 END )/ count( sc.SId ) '良好',
	sum( CASE WHEN sc.score >= 90 THEN 1 ELSE 0 END )/ count( sc.SId ) '优秀' 
FROM
	course
	INNER JOIN sc ON sc.cid = course.cid 
GROUP BY
	course.cid

19.按各科成绩进行排序,并显示排名

SELECT
	sc.sid,
	sc.cid,
	sc.score,
	ROW_NUMBER() over ( ORDER BY sc.score DESC ) 
FROM
	sc

20.查询学生的总成绩并进行排名

SELECT
	sc.SId,
	sum( sc.score ) 
FROM
	sc 
GROUP BY
	sc.sid 
ORDER BY
	sum( sc.score ) DESC

21.查询不同老师所教不同课程平均分从高到低展示

SELECT
	teacher.Tname,
	course.Cname,
	avg( sc.score ) 
FROM
	teacher
	INNER JOIN course ON teacher.TId = course.tid
	INNER JOIN sc ON course.cid = sc.cid 
GROUP BY
	sc.cid 
ORDER BY
	avg( sc.score ) DESC

22.查询所有课程的成绩第2名到第3名的学生信息及该课程成绩

-- 窗口函数
SELECT
	* 
FROM
	(
	SELECT
		*,
		ROW_NUMBER() over ( PARTITION BY sc.cid ORDER BY sc.score DESC ) m 
	FROM
		sc
		INNER JOIN student stu ON stu.sid = sc.sid 
	) a 
WHERE
	m IN ( 2, 3 )

23.使用分段来统计各科成绩,分别统计各分数段人数:课程ID和课程名称

SELECT
	course.cid,
	course.Cname,
	count( CASE WHEN sc.score >= 60 THEN 1 ELSE NULL END ) '及格',
	count( CASE WHEN sc.score >= 70 AND sc.score < 80 THEN 1 ELSE NULL END ) '中等',
	count( CASE WHEN sc.score >= 80 AND sc.score < 90 THEN 1 ELSE NULL END ) '良好',
	count( CASE WHEN sc.score >= 90 THEN 1 ELSE NULL END ) '优秀' 
FROM
	course
	INNER JOIN sc ON sc.cid = course.cid 
GROUP BY
	course.cid

24.查询学生平均成绩以及排名

-- 窗口函数
SELECT
	sc.sid,
	avg(sc.score),
	ROW_NUMBER() over ( ORDER BY avg(sc.score) DESC ) 
FROM
	sc

25.查询各科成绩前三名的记录(不考虑成绩并列情况)

-- 窗口函数
SELECT
	* 
FROM
	(
	SELECT
		*,
		ROW_NUMBER() over ( PARTITION BY sc.cid ORDER BY sc.score DESC ) m 
	FROM
		sc
		INNER JOIN student stu ON stu.sid = sc.sid 
	) a 
WHERE
	m IN ( 1,2, 3 )

26.查询每门课程被选修的学生数

SELECT
	course.cid,
	count( sc.sid ) 
FROM
	sc
	INNER JOIN course ON sc.CId = course.cid 
GROUP BY
	course.cid

27.查询出只有两门课程的全部学生的学号和姓名

SELECT
	student.sid,
	student.sname 
FROM
	student
	INNER JOIN sc ON student.sid = sc.sid 
GROUP BY
	sc.sid 
HAVING
	count( sc.cid )=2

28.查询男生、女生人数

SELECT
	student.ssex,
	count( student.sid ) 
FROM
	student 
GROUP BY
	student.ssex

29. 查询名字中含有"三"字的学生信息

SELECT
	student.sid,
	student.sname 
FROM
	student 
WHERE
	student.sname LIKE '%三%'

31.查询1990年出生的学生名单

SELECT
	student.sid,
	student.sname 
FROM
	student 
WHERE
	YEAR(sage) =1990
-- 或者是用like
SELECT
	student.sid,
	student.sname 
FROM
	student 
WHERE
	student.sage like '1990%'

32.查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩

SELECT
	student.sid,
	student.sname,
	avg( sc.score ) 
FROM
	sc
	INNER JOIN student ON sc.sid = student.sid 
GROUP BY
	sc.sid 
HAVING
	avg(sc.score )

33.查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列

SELECT
	sc.cid,
	avg( sc.score ) 
FROM
	sc 
GROUP BY
	sc.cid 
ORDER BY
	avg( sc.score ) ASC,
	sc.cid DESC

34.(略)查询课程名称为"数学",且分数低于60的学生姓名和分数

SELECT
	student.sid,
	student.sname,
	sc.score 
FROM
	sc
	INNER JOIN student ON student.sid = sc.sid
	INNER JOIN course ON course.cid = sc.CId AND course.cname = '数学' 
WHERE
	sc.score < 60

35.查询所有学生的课程及分数情况

SELECT
	student.sid,
	student.sname,
	max( CASE WHEN course.cname = '语文' THEN sc.score ELSE NULL END ) '语文',
	max( CASE WHEN course.cname = '数学' THEN sc.score ELSE NULL END ) '数学',
	max( CASE WHEN course.cname = '英语' THEN sc.score ELSE NULL END ) '英语' 
FROM
	student
	INNER JOIN sc ON sc.sid = student.sid
	INNER JOIN course ON sc.CId = course.CId 
GROUP BY
	student.sid

36.查询任何一门课程成绩在70分以上的姓名、课程名称和分数

SELECT
	student.sname,
	course.cname,
	sc.score 
FROM
	sc
	INNER JOIN student ON student.sid = sc.sid
	INNER JOIN course ON sc.cid = course.cid 
WHERE
	sc.score > 70

37.(略)查询不及格的课程并按课程号从大到小排列

SELECT
	student.sid,
	student.sname,
	course.cname,
	sc.cid,
	sc.score 
FROM
	sc
	INNER JOIN course ON course.cid = sc.cid
	INNER JOIN student ON student.sid = sc.SId 
WHERE
	sc.score < 60 
ORDER BY
	sc.cid DESC

38.查询课程编号为03且课程成绩在80分以上的学生的学号和姓名

SELECT
	student.sname,
	sc.score 
FROM
	sc
	INNER JOIN student ON student.sid = sc.SId 
WHERE
	sc.CId = '03' 
	AND sc.score > 80

39.求每门课程的学生人数

SELECT
  course.cid,
	count( distinct course.sid ) 
FROM
	course
	INNER JOIN sc ON sc.CId = course.cid 
GROUP BY
	course.cid

40.查询选修“张三”老师所授课程的学生中成绩最高的学生姓名及其成绩

SELECT
	student.sname,
	sc.score 
FROM
	sc
	INNER JOIN student ON sc.sid = student.sid
	INNER JOIN course ON sc.cid = course.cid
	INNER JOIN teacher ON teacher.tid = course.TId 
	AND teacher.Tname = '张三' 
ORDER BY
	sc.score DESC 
	LIMIT 1

41.查询某个不同课程但成绩相同的学生编号、课程编号、学生成绩

SELECT
	sid 
FROM
	(SELECT b.sid,b.score 
	 FROM sc AS b
	 INNER JOIN ( SELECT sid FROM sc GROUP BY sid HAVING count( DISTINCT cid )> 1 ) AS c ON b.sid = c.sid 
	GROUP BY
		b.sid,
		b.score 
	) AS a 
GROUP BY sid HAVING	count( sid )=1

42.查询每一门课程最好的前两名

SELECT
	sc.cid,
	COUNT( 1 ) cnt 
FROM
	sc 
GROUP BY
	sc.cid 
HAVING
	count( 1 )> 5 
ORDER BY
	cnt DESC,cid ASC

43.统计每门课程的学生选修人数(超过5人的课程才统计)。


44.检索至少选修两门课程的学生学号

SELECT
	student.sid,
	student.sname 
FROM
	student
	INNER JOIN sc ON student.sid = sc.sid 
GROUP BY
	sc.sid 
HAVING
	count( sc.cid )>=2

45.查询选修了全部课程的学生信息

SELECT
	student.sid,
	student.sname,
	count( sc.cid ) cnt 
FROM
	student
	INNER JOIN sc ON sc.sid = student.sid 
GROUP BY
	sc.sid 
HAVING
	cnt = (SELECT count( cid ) FROM course)

函数描述
NOW()返回当前的日期和时间
CURDATE()返回当前的日期
CURTIME()返回当前的时间
DATE()提取日期或日期/时间表达式的日期部分
EXTRACT()返回日期/时间按的单独部分
DATE_ADD()给日期添加指定的时间间隔
DATE_SUB()从日期减去指定的时间间隔
DATEDIFF()返回两个日期之间的天数
DATE_FORMAT()用不同的格式显示日期/时间

46.(略)查询各学生的年龄

SELECT
	Sname,
IF
	(
		m.MONTH != 0,
		CONCAT( m.YEAR, "岁", m.MONTH, "个月" ),
	CONCAT( m.YEAR, "岁" )) "年龄" 
FROM
	(
	SELECT
		Sname,
		FLOOR( DATEDIFF( CURRENT_DATE, Sage ) / 365 ) YEAR,
		ROUND(( DATEDIFF( CURRENT_DATE, Sage ) % 365 ) / 30 ) MONTH 
	FROM
	Student 
	) m
	
	-- 不精确到月的话
SELECT
	sname,
	TIMESTAMPDIFF(YEAR,sage,CURDATE()) 
FROM
	student

47.(略)查询本周过生日的学生

SELECT
	* 
FROM
	student 
WHERE
	WEEK ( sage, 1 )= WEEK ( CURDATE(), 1 );

48.查询下周过生日的学生

SELECT
	* 
FROM
	student 
WHERE
	WEEK ( sage, 1 )= WEEK ( CURDATE(), 1 ) + 1;

49.(略)查询本月过生日的学生

SELECT
	* 
FROM
	student 
WHERE
	month ( sage)= month (CURDATE());

50.查询下月过生日的学生

SELECT
	* 
FROM
	student 
WHERE
CASE
		
		WHEN MONTH ( sage )= 12 THEN
	MONTH ( sage )= 1 ELSE MONTH ( sage )= MONTH (
	CURDATE())+ 1 END;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐一个开源的区块链开发者工具网站

开源区块链开发者工具箱 https://ChainTool.tech 今天可以正式上线了。ChainTool 使用完全开源的方式编写一些开发者日常经常使用的工具。 关于 ChainToolDAO 大约在两个月前&#xff0c; ChainToolDAO 成立了&#xff0c;成立 ChainToolDAO 的来由是这样的&#xff1a;我是一…

Python模块练习题-测试你的Python技能。

练习题&#xff1a; 1.logging模块有几个日志级别&#xff1f;2.请配置logging模块&#xff0c;使其在屏幕和文件里同时打印以下格式的日志3.json、pickle、shelve三个区别是什么&#xff1f;4.json的作用是什么&#xff1f;5.subprocess执行命令方法有几种&#xff1f;6.为什么…

idea 2023版本创建maven管理的Scala项目教程

目录 1、创建项目1.1、创建项目名及简单配置1、2 刚开始创建好后的项目是这样的1、3 进行相关设置1&#xff09;增加maven管理2&#xff09;增加scala目录&#xff0c;并设置成resource目录 注意&#xff1a; 本项目写得教程是基于您得Java jdk、Scala jdk、maven这些都是安装配…

汽车充电桩检测设备TK4860C交流充电桩检定装置

TK4860C是一款在交流充电桩充电过程中实时检测充电电量的标准仪器&#xff0c;仪器以新能源车为负载&#xff0c;结合宽动态范围测量技术、电能ms级高速刷新等技术&#xff0c;TK4860C实现充电全过程的累积电能精准计量&#xff0c;相比于传统的预设检定点的稳态计量&#xff0…

PyQt5、Pyside2学习---02

1.界面布局 我们最常用的 Layout布局 有4种&#xff0c;分别是 QHBoxLayout 水平布局QVBoxLayout 垂直布局QGridLayout 表格布局QFormLayout 表单布局 2.调整控件位置和大小 调整layout中控件的大小比例: 可以通过设定控件的sizePolicy来调整&#xff0c; 调整控件间距: …

kafka多用户访问权限配置指导

一、场景描述 现场业务由于多厂商集成,共享数据需要,需对接当前kafka集群,为做到类似租户隔离的功能,需要开启kafka的权限控制和动态用户管理功能,实现不同厂商访问被授权的合法资源,消费者账号只能消费数据,生产者账号只能生产数据。 二、控制方式 Kafka 有三种认证模…

VSCode查看和编辑远程服务器的代码

在嵌入式开发过程中&#xff0c;很多时候代码都是放在编译服务器上&#xff0c;并给每个项目成员分配一个账号。这时候访问代码&#xff0c;可以通过 Samba 服务器将代码目录挂载到本地&#xff0c;再通过 VSCode 去打开服务器的代码。 但是&#xff0c;这时候我经常碰到通过 …

vue项目 解决el-table自适应高度,vue页面不显示多条滚动条,超出的部分让el-table内部出现滚动条

一、需求 后台管理系统&#xff1a;最常见的页面都是由—>左侧菜单、头部tabView页签、主体数据渲染页面&#xff08;AppMain&#xff09;&#xff1b;而一般AppMain页面又分为&#xff1a; 搜索区域、table数据&#xff08;分页&#xff09;&#xff0c;可能也会存在底部&a…

编译原理实验1——词法分析器的Java实现

一、 实验目的 设计并实现一个PL/0语言(或其它语言的子集,如C语言的子集)的词法分析程序&#xff0c;加深对词法分析原理的理解。 二、实验原理 词法分析是从左向右扫描每行源程序的符号&#xff0c;拼成单词&#xff0c;换成统一的机内表示形式——TOKEN字&#xff0c;送给…

由浅入深MFC学习摘记--第四部分上

目录 第八章 Document-View结构为什么使用Document-View结构DocumentviewDocumentFrameDocumentTemplateCDocTemplate、CDocument、CView、CFrameWnd 之间的关系 Document - 数据结构设计容器选用范例修改线条与点 View-重绘与编辑代码修改View 的重绘鼠标消息处理类向导 Seria…

手推FlinkML2.2(三)

SQLTransformer&#xff08;SQL转换器&#xff09;是一种数据预处理方法&#xff0c;允许您使用SQL语句对数据进行转换和操作。SQL转换器通常用于数据清洗、特征工程和数据聚合等任务&#xff0c;以提高数据分析和机器学习模型的性能。它可以与各种数据处理和存储系统&#xff…

后端大厂面试总结大全六

目录&#xff1a; 1、Transactional注解控制事务有哪些不生效的场景2、MySQL的优化 1、Transactional注解控制事务有哪些不生效的场景 数据库引擎不支持事务数据源没有配置事务管理器没有被spring管理方法不是public的同一个类中方法调用&#xff0c;导致Transactional失效 举…

2023云数据库技术沙龙MySQL x ClickHouse专场成功举办

4月22日&#xff0c;2023首届云数据库技术沙龙 MySQL x ClickHouse 专场&#xff0c;在杭州市海智中心成功举办。本次沙龙由玖章算术、菜根发展、良仓太炎共创联合主办。围绕“技术进化&#xff0c;让数据更智能”为主题&#xff0c;汇聚字节跳动、阿里云、玖章算术、华为云、腾…

gitee教程

二、安装git 要使用gitee&#xff0c;需要先安装git工具。git工具下载&#xff1a;Git - Downloadshttps://git-scm.com/downloads 下载好后,检查是否真的下载了&#xff1a; 三、登录gitee 我们先在 gitee上注册账号并登录。gitee官网&#xff1a;Gitee - 企业级 DevOps 研…

LINUX SVN 新建项目

从第三方代码创建代码库&#xff1a; 1、通过客户端进入服务端 2、在对应的目录创建新的项目/目录 在对应的目录右击 &#xff1a;creat folder... 例&#xff1a;创建testSvn 3、在客户端checkout(co) testSvn 4、将第三方源码(srcTest)拷贝到客户端下的对应路径 防止L…

Redis缓存更新策略

缓存更新是redis为了节约内存而设计出来的一个东西&#xff0c;主要是因为内存数据宝贵&#xff0c;当我们向redis插入太多数据&#xff0c;此时就可能会导致缓存中的数据过多&#xff0c;所以redis会对部分数据进行更新&#xff0c;或者把他叫为淘汰更合适。 1.缓存更新三种策…

Windows 自带环境变量

目录 Windows自带环境变量说明Windows自带环境变量总结 所谓 Windows 环境变量&#xff0c;指的是 Windows 指定操作系统工作环境的一些设置选项或属性参数&#xff0c;比方说指定系统文件夹或临时文件夹的位置等。与常量相比&#xff0c;一个环境变量往往由变量名称和变量值组…

深入了解Android系统中的音视频编解码器:MediaCodec

Media内核源码 Media内核是Android系统中负责音视频处理的核心模块&#xff0c;包括音视频采集、编解码、传输、播放等功能。Media内核源码位于Android源码树的/frameworks/av目录下&#xff0c;主要包括以下模块&#xff1a; media/libstagefright&#xff1a;包含了Media F…

设计模式——组件协作模式之策略模式

文章目录 前言一、“组件协作” 模式二、Strategy 策略模式1、动机2、模式定义3、代码示例4、结构 要点总结 前言 一、“组件协作” 模式 现代软件专业分工之后的第一个结果是 “框架与应用程序的划分”&#xff0c;“组件协作” 模式通过晚期绑定&#xff0c;来实现框架与应用…

【内网】WebStorm搭建Vue环境

文章目录 安装node.js和npm1、 Node.js和npm简介2、下载Node.js3、安装Node.js4、检查是否安装成功5、环境配置&#xff08;很重要&#xff01;&#xff09;6、配置内网离线库 安装WebStorm并运行Vue项目1、新建项目2、测试 安装node.js和npm 1、 Node.js和npm简介 简单的说 …