学生表,教师表,教师课程表,学生课程成绩表。
一个老是带一门课。一个学生可选,多选,不选课程。
-- 导出 nero_sql_practice 的数据库结构
CREATE DATABASE IF NOT EXISTS `nero_sql_practice` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `nero_sql_practice`;
-- 导出 表 nero_sql_practice.course 结构
CREATE TABLE IF NOT EXISTS `course` (
`CId` varchar(10) DEFAULT NULL,
`Cname` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`TId` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 导出 表 nero_sql_practice.sc 结构
CREATE TABLE IF NOT EXISTS `sc` (
`SId` varchar(10) DEFAULT NULL,
`CId` varchar(10) DEFAULT NULL,
`score` decimal(18,1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 导出 表 nero_sql_practice.student 结构
CREATE TABLE IF NOT EXISTS `student` (
`SId` varchar(10) DEFAULT NULL,
`Sname` varchar(10) DEFAULT NULL,
`Sage` datetime DEFAULT NULL,
`Ssex` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 导出 表 nero_sql_practice.teacher 结构
CREATE TABLE IF NOT EXISTS `teacher` (
`TId` varchar(10) DEFAULT NULL,
`Tname` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 正在导出表 nero_sql_practice.course 的数据:~3 rows (大约)
/*!40000 ALTER TABLE `course` DISABLE KEYS */;
INSERT INTO `course` (`CId`, `Cname`, `TId`) VALUES
('01', '语文', '02'),
('02', '数学', '01'),
('03', '英语', '03');
/*!40000 ALTER TABLE `course` ENABLE KEYS */;
-- 正在导出表 nero_sql_practice.sc 的数据:~18 rows (大约)
/*!40000 ALTER TABLE `sc` DISABLE KEYS */;
INSERT INTO `sc` (`SId`, `CId`, `score`) VALUES
('01', '01', 80.0),
('01', '02', 90.0),
('01', '03', 99.0),
('02', '01', 70.0),
('02', '02', 60.0),
('02', '03', 80.0),
('03', '01', 80.0),
('03', '02', 80.0),
('03', '03', 80.0),
('04', '01', 50.0),
('04', '02', 30.0),
('04', '03', 20.0),
('05', '01', 76.0),
('05', '02', 87.0),
('06', '01', 31.0),
('06', '03', 34.0),
('07', '02', 89.0),
('07', '03', 98.0);
/*!40000 ALTER TABLE `sc` ENABLE KEYS */;
-- 正在导出表 nero_sql_practice.student 的数据:~12 rows (大约)
/*!40000 ALTER TABLE `student` DISABLE KEYS */;
INSERT INTO `student` (`SId`, `Sname`, `Sage`, `Ssex`) VALUES
('01', '赵雷', '1990-01-01 00:00:00', '男'),
('02', '钱电', '1990-12-21 00:00:00', '男'),
('03', '孙风', '1990-12-20 00:00:00', '男'),
('04', '李云', '1990-12-06 00:00:00', '男'),
('05', '周梅', '1991-12-01 00:00:00', '女'),
('06', '吴兰', '1992-01-01 00:00:00', '女'),
('07', '郑竹', '1989-01-01 00:00:00', '女'),
('09', '张三', '2017-12-20 00:00:00', '女'),
('10', '李四', '2017-12-25 00:00:00', '女'),
('11', '李四', '2012-06-06 00:00:00', '女'),
('12', '赵六', '2013-06-13 00:00:00', '女'),
('13', '孙七', '2014-07-09 00:00:00', '女');
/*!40000 ALTER TABLE `student` ENABLE KEYS */;
-- 正在导出表 nero_sql_practice.teacher 的数据:~3 rows (大约)
/*!40000 ALTER TABLE `teacher` DISABLE KEYS */;
INSERT INTO `teacher` (`TId`, `Tname`) VALUES
('01', '张三'),
('02', '李四'),
('03', '王五');
SELECT t1.Sid, t1.Cid AS cid01, t1.Score AS score01, t2.Cid AS cid02, t2.Score AS score02
FROM (SELECT * FROM sc WHERE sc.CId = '01') AS t1 INNER JOIN (SELECT * FROM sc WHERE sc.CId = '02') AS t2
ON t1.Sid = t2.Sid;
SELECT student.*, temp1and2.score01, temp1and2.score02 FROM
(SELECT t1.Sid, t1.Cid AS cid01, t1.Score AS score01, t2.Cid AS cid02, t2.Score AS score02
FROM (SELECT * FROM sc WHERE sc.CId = '01') AS t1 INNER JOIN (SELECT * FROM sc WHERE sc.CId = '02') AS t2
ON t1.Sid = t2.Sid) AS temp1and2
LEFT JOIN student ON temp1and2.SId = student.SId;
SELECT student.*, temp1and2.score01, temp1and2.score02 FROM
(SELECT t1.Sid, t1.Cid AS cid01, t1.Score AS score01, t2.Cid AS cid02, t2.Score AS score02
FROM (SELECT * FROM sc WHERE sc.CId = '01') AS t1 LEFT JOIN (SELECT * FROM sc WHERE sc.CId = '02') AS t2
ON t1.Sid = t2.Sid) AS temp1and2
LEFT JOIN student ON temp1and2.SId = student.SId;
SELECT student.*, temp1and2.score01, temp1and2.score02 FROM
(SELECT t1.Sid, t1.Cid AS cid01, t1.Score AS score01, t2.Cid AS cid02, t2.Score AS score02
FROM (SELECT * FROM sc WHERE sc.CId = '01') AS t1 RIGHT JOIN (SELECT * FROM sc WHERE sc.CId = '02') AS t2
ON t1.Sid = t2.Sid) AS temp1and2
LEFT JOIN student ON temp1and2.SId = student.SId;
SELECT SId, AVG(score) AS avgScore FROM sc GROUP BY Sid;
SELECT student.*, t1.avgScore FROM (SELECT SId AS SId, AVG(score) AS avgScore FROM sc GROUP BY Sid) AS t1 INNER JOIN student ON t1.SId = student.SId;
SELECT student.* FROM student INNER JOIN sc ON student.SId = sc.SId;
SELECT student.* FROM student LEFT JOIN sc ON student.SId = sc.SId;
SELECT student.* FROM student RIGHT JOIN sc ON student.SId = sc.SId;
SELECT student.* FROM student INNER JOIN sc ON sc.SId = student.SId;
SELECT student.* FROM student LEFT JOIN sc ON sc.SId = student.SId;
SELECT student.* FROM student RIGHT JOIN sc ON sc.SId = student.SId;
SELECT student.*, sc.* FROM student INNER JOIN sc ON student.SId = sc.SId;
SELECT student.*, sc.* FROM student LEFT JOIN sc ON student.SId = sc.SId;
SELECT student.*, sc.* FROM student RIGHT JOIN sc ON student.SId = sc.SId;
SELECT student.*, sc.* FROM student INNER JOIN sc ON sc.SId = student.SId;
SELECT student.*, sc.* FROM student LEFT JOIN sc ON sc.SId = student.SId;
SELECT student.*, sc.* FROM student RIGHT JOIN sc ON sc.SId = student.SId;
SELECT student.* FROM student INNER JOIN (SELECT * FROM sc GROUP BY SId) AS t1 ON student.SId = t1.SId;
SELECT student.* FROM student WHERE SId IN (SELECT SId FROM sc);
SELECT sc.*, COUNT(1) AS classCount, SUM(score) AS totalScore FROM sc GROUP BY SId;
SELECT student.*, t1.classCount, t1.totalScore FROM student LEFT JOIN (SELECT sc.SId AS SId, COUNT(1) AS classCount, SUM(score) AS totalScore FROM sc GROUP BY SId) AS t1 ON student.SId = t1.SId;
SELECT student.* FROM student WHERE SId IN (SELECT SId FROM sc);
SELECT COUNT(1) FROM teacher WHERE teacher.Tname LIKE '李%';
SELECT TId FROM teacher WHERE Tname = '张三';
SELECT CId FROM course WHERE TId = '01';
SELECT SId FROM sc WHERE CId = '02';
SELECT * FROM student WHERE SId IN (
SELECT SId FROM sc WHERE CId IN (
SELECT CId FROM course WHERE TId IN (
SELECT TId FROM teacher WHERE Tname = '张三'
)
)
);
SELECT COUNT(1) FROM course;
SELECT sc.`*`, COUNT(1) AS count FROM sc GROUP BY SId;
SELECT SId FROM (SELECT sc.`*`, COUNT(1) AS totalCount FROM sc GROUP BY SId) AS t1 WHERE t1.totalCount < (SELECT COUNT(1) FROM course);
SELECT * FROM student WHERE SId IN (
SELECT SId FROM (
SELECT sc.* , COUNT(1) AS totalCount FROM sc GROUP BY SId
) AS t1 WHERE t1.totalCount < (SELECT COUNT(1) FROM course)
);
SELECT CId FROM sc WHERE SId = '01';
SELECT SId FROM sc WHERE CId IN (SELECT CId FROM sc WHERE SId = '01') AND SId != '01';
SELECT * FROM student WHERE SId IN (SELECT SId FROM sc WHERE CId IN (SELECT CId FROM sc WHERE SId = '01') AND SId != '01');
SELECT SId, COUNT(1) AS totalCount FROM sc WHERE SId != '01' GROUP BY SId HAVING totalCount = 3;
SELECT * FROM student WHERE SId IN (SELECT SId FROM ( SELECT SId, COUNT(1) AS totalCount FROM sc WHERE SId != '01' GROUP BY SId HAVING totalCount = 3) AS t1);
SELECT * FROM student WHERE SId IN (SELECT SId FROM sc WHERE SId != '01' GROUP BY SId HAVING COUNT(1) = 3);
SELECT TId FROM teacher WHERE Tname = '张三';
SELECT CId FROM course WHERE TId IN (SELECT TId FROM teacher WHERE Tname = '张三');
SELECT SId FROM sc WHERE Cid IN (SELECT CId FROM course WHERE TId IN (SELECT TId FROM teacher WHERE Tname = '张三'));
SELECT * FROM student WHERE SId NOT IN (SELECT SId FROM sc WHERE Cid IN (SELECT CId FROM course WHERE TId IN (SELECT TId FROM teacher WHERE Tname = '张三')));
SELECT SId, AVG(score) AS avgScore FROM sc WHERE score < 60 GROUP BY SId HAVING COUNT(1) >= 2 ;
SELECT SId, AVG(score) AS avgScore FROM sc WHERE SId IN (SELECT SId FROM sc WHERE score < 60 GROUP BY SId HAVING COUNT(1) >= 2) GROUP BY SId;
SELECT student.*, t1.avgScore FROM student INNER JOIN (SELECT SId, AVG(score) AS avgScore FROM sc WHERE SId IN (SELECT SId FROM sc WHERE score < 60 GROUP BY SId HAVING COUNT(1) >= 2) GROUP BY SId) AS t1 ON student.SId = t1.SId;
SELECT * FROM sc WHERE CId = '01' AND score < 60;
SELECT student.*, t1.score FROM student INNER JOIN (SELECT * FROM sc WHERE CId = '01' AND score < 60) AS t1 ON student.SId = t1.SId ORDER BY t1.score DESC;
SELECT sc.SId, SUM(score) AS totalScore, AVG(score) AS avgScore FROM sc GROUP BY SId ORDER BY avgScore DESC;
SELECT student.`*`, t1.totalScore, t1.avgScore FROM student LEFT JOIN (SELECT sc.SId, SUM(score) AS totalScore, AVG(score) AS avgScore FROM sc GROUP BY SId) AS t1 ON student.SId = t1.SId ORDER BY avgScore DESC;
以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
SELECT CId, MAX(score) AS maxScore, MIN(score) AS minScore, AVG(score) AS avgScore, COUNT(1) AS studentCount FROM sc GROUP BY CId ORDER BY studentCount DESC , CId ASC;
SELECT CId, COUNT(1) AS studentCount, SUM(if(score >= 90, 1, 0)) AS a, SUM(if(score >= 90, 1, 0)) / COUNT(1) AS aPrecent FROM sc GROUP BY CId ORDER BY studentCount DESC , CId ASC;
SELECT CId, MAX(score) AS maxScore, MIN(score) AS minScore, AVG(score) AS avgScore, COUNT(1) AS studentCount,
SUM(IF(score >= 90, 1, 0)) AS a, SUM(IF(score >= 90, 1, 0)) / COUNT(1) AS aPrecent,
SUM(IF(score < 90, IF(score >= 80, 1, 0), 0)) AS b, SUM(IF(score < 90, IF(score >= 80, 1, 0), 0)) / COUNT(1) AS bPrecent,
SUM(IF(score < 80, IF(score >= 70, 1, 0), 0)) AS c, SUM(IF(score < 80, IF(score >= 70, 1, 0), 0)) / COUNT(1) AS cPrecent,
SUM(IF(score < 70, IF(score >= 60, 1, 0), 0)) AS d, SUM(IF(score < 70, IF(score >= 60, 1, 0), 0)) / COUNT(1) AS dPrecent,
SUM(IF(score < 60, 1, 0)) AS e, SUM(IF(score < 60, 1, 0)) / COUNT(1) AS ePrecent
FROM sc GROUP BY CId ORDER BY studentCount DESC , CId ASC;
SELECT course.Cname, t1.* FROM course INNER JOIN (
SELECT CId, MAX(score) AS maxScore, MIN(score) AS minScore, AVG(score) AS avgScore, COUNT(1) AS studentCount,
SUM(IF(score >= 90, 1, 0)) AS a, SUM(IF(score >= 90, 1, 0)) / COUNT(1) AS aPrecent,
SUM(IF(score < 90, IF(score >= 80, 1, 0), 0)) AS b, SUM(IF(score < 90, IF(score >= 80, 1, 0), 0)) / COUNT(1) AS bPrecent,
SUM(IF(score < 80, IF(score >= 70, 1, 0), 0)) AS c, SUM(IF(score < 80, IF(score >= 70, 1, 0), 0)) / COUNT(1) AS cPrecent,
SUM(IF(score < 70, IF(score >= 60, 1, 0), 0)) AS d, SUM(IF(score < 70, IF(score >= 60, 1, 0), 0)) / COUNT(1) AS dPrecent,
SUM(IF(score < 60, 1, 0)) AS e, SUM(IF(score < 60, 1, 0)) / COUNT(1) AS ePrecent
FROM sc GROUP BY CId ORDER BY studentCount DESC , CId ASC
) AS t1 ON course.CId = t1.CId;
SELECT *, RANK() OVER(ORDER BY score DESC) AS ranking FROM sc;
SELECT *, DENSE_RANK() OVER(ORDER BY score DESC) AS ranking FROM sc;
SELECT *, RANK() OVER(PARTITION BY CId ORDER BY score DESC) AS ranking FROM sc ORDER BY CId DESC;
SELECT *, DENSE_RANK() OVER(PARTITION BY CId ORDER BY score DESC) AS ranking FROM sc ORDER BY CId DESC;
SELECT *, SUM(score) AS totalScore FROM sc GROUP BY SId;
SELECT *, RANK() OVER(ORDER BY totalScore DESC) FROM (SELECT *, SUM(score) AS totalScore FROM sc GROUP BY SId) AS t1 ORDER BY t1.totalScore DESC;
SELECT *, DENSE_RANK() OVER(ORDER BY totalScore DESC) FROM (SELECT *, SUM(score) AS totalScore FROM sc GROUP BY SId) AS t1 ORDER BY t1.totalScore DESC;
课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分比
SELECT course.Cname, t1.* FROM course INNER JOIN (
SELECT CId, MAX(score) AS maxScore, MIN(score) AS minScore, AVG(score) AS avgScore, COUNT(1) AS studentCount,
SUM(IF(score >= 90, 1, 0)) AS a, SUM(IF(score >= 90, 1, 0)) / COUNT(1) AS aPrecent,
SUM(IF(score < 90, IF(score >= 80, 1, 0), 0)) AS b, SUM(IF(score < 90, IF(score >= 80, 1, 0), 0)) / COUNT(1) AS bPrecent,
SUM(IF(score < 80, IF(score >= 70, 1, 0), 0)) AS c, SUM(IF(score < 80, IF(score >= 70, 1, 0), 0)) / COUNT(1) AS cPrecent,
SUM(IF(score < 70, IF(score >= 60, 1, 0), 0)) AS d, SUM(IF(score < 70, IF(score >= 60, 1, 0), 0)) / COUNT(1) AS dPrecent,
SUM(IF(score < 60, 1, 0)) AS e, SUM(IF(score < 60, 1, 0)) / COUNT(1) AS ePrecent
FROM sc GROUP BY CId ORDER BY studentCount DESC , CId ASC
) AS t1 ON course.CId = t1.CId;
SELECT *, DENSE_RANK() OVER(PARTITION BY CId ORDER BY score DESC) AS ranking FROM sc ORDER BY CId DESC;
SELECT * FROM (SELECT *, DENSE_RANK() OVER(PARTITION BY CId ORDER BY score DESC) AS ranking FROM sc ORDER BY CId DESC) AS t1 WHERE t1.ranking <= 3;
SELECT CId, COUNT(1) AS totalCount FROM sc GROUP BY CId;
SELECT Sid FROM sc GROUP BY SId HAVING COUNT(1) = 2;
SELECT * FROM student WHERE SId IN(SELECT Sid FROM sc GROUP BY SId HAVING COUNT(1) = 2);
SELECT SUM(IF(Ssex = '男', 1, 0)) AS male, SUM(IF(Ssex = '女', 1, 0)) AS female FROM student;
SELECT * FROM student WHERE Sname LIKE '%风%';
SELECT * FROM student AS t1 INNER JOIN student AS t2 ON t1.Sname = t2.Sname AND t1.SId != t2.Sid;
SELECT COUNT(1) AS totalCount, Sname FROM student GROUP BY Sname HAVING COUNT(1) > 1;
SELECT * FROM student WHERE Sage >= '1990-01-01' AND sage <= '1990-12-31';
SELECT CId, AVG(score) AS avgScore FROM sc GROUP BY CId ORDER BY AVG(score) DESC, CId ASC;
SELECT SId, AVG(score) AS avgScore FROM sc GROUP BY SId HAVING AVG(score) >= 85;
SELECT student.*, t1.avgScore FROM student INNER JOIN (SELECT SId, AVG(score) AS avgScore FROM sc GROUP BY SId HAVING AVG(score) >= 85) AS t1 ON student.SId = t1.SId;
SELECT CId FROM course WHERE Cname = '数学';
SELECT SId, score FROM sc WHERE CId IN(SELECT CId FROM course WHERE Cname = '数学') AND score < 60;
SELECT student.*, t1.score FROM student INNER JOIN (SELECT SId, score FROM sc WHERE CId IN(SELECT CId FROM course WHERE Cname = '数学') AND score < 60) AS t1 ON student.SId = t1.SId;
SELECT t1.SId, t1.score, t2.Cname FROM sc AS t1 INNER JOIN course AS t2 ON t1.CId = t2.CId;
SELECT t1.*, t2.Cname, t2.score FROM student AS t1 LEFT JOIN (SELECT t1.SId, t1.score, t2.Cname FROM sc AS t1 INNER JOIN course AS t2 ON t1.CId = t2.CId) AS t2 ON t1.SId = t2.SId;
SELECT t1.*, t2.Cname, t2.score FROM student AS t1 INNER JOIN (SELECT t1.SId, t1.score, t2.Cname FROM sc AS t1 INNER JOIN course AS t2 ON t1.CId = t2.CId WHERE t1.score >= 70) AS t2 ON t1.SId = t2.SId;
SELECT t1.*, t2.Cname, t2.score FROM student AS t1 INNER JOIN (SELECT t1.SId, t1.score, t2.Cname FROM sc AS t1 INNER JOIN course AS t2 ON t1.CId = t2.CId WHERE t1.score < 60) AS t2 ON t1.SId = t2.SId;
SELECT * FROM student WHERE SId IN (SELECT SId FROM sc WHERE CId = '01' AND score >= 80);
SELECT CId, COUNT(1) AS totalCount FROM sc GROUP BY CId;
SELECT TId FROM teacher WHERE Tname = '张三';
SELECT CId FROM course WHERE TId = (SELECT TId FROM teacher WHERE Tname = '张三');
SELECT * FROM sc WHERE CId = (SELECT CId FROM course WHERE TId = (SELECT TId FROM teacher WHERE Tname = '张三'));
SELECT *, RANK() OVER(ORDER BY score DESC) AS ranking FROM sc WHERE CId = (SELECT CId FROM course WHERE TId = (SELECT TId FROM teacher WHERE Tname = '张三'));
SELECT SId, score FROM (
SELECT *, RANK() OVER(ORDER BY score DESC) AS ranking FROM sc WHERE CId = (SELECT CId FROM course WHERE TId = (SELECT TId FROM teacher WHERE Tname = '张三'))
) AS t1 WHERE ranking = 1;
SELECT s.*, t2.* FROM student AS s INNER JOIN (
SELECT SId, score FROM (
SELECT *, RANK() OVER(ORDER BY score DESC) AS ranking FROM sc WHERE CId = (SELECT CId FROM course WHERE TId = (SELECT TId FROM teacher WHERE Tname = '张三'))
) AS t1 WHERE ranking = 1
) AS t2 ON s.SId = t2.SId;
SELECT *, DENSE_RANK() OVER(ORDER BY score DESC) AS ranking FROM sc WHERE CId = (SELECT CId FROM course WHERE TId = (SELECT TId FROM teacher WHERE Tname = '张三'));
SELECT SId, score FROM (
SELECT *, DENSE_RANK() OVER(ORDER BY score DESC) AS ranking FROM sc WHERE CId = (SELECT CId FROM course WHERE TId = (SELECT TId FROM teacher WHERE Tname = '张三'))
) AS t1 WHERE ranking = 1;
SELECT s.*, t2.* FROM student AS s INNER JOIN (
SELECT SId, score FROM (
SELECT *, DENSE_RANK() OVER(ORDER BY score DESC) AS ranking FROM sc WHERE CId = (SELECT CId FROM course WHERE TId = (SELECT TId FROM teacher WHERE Tname = '张三'))
) AS t1 WHERE ranking = 1
) AS t2 ON s.SId = t2.SId;
SELECT * FROM sc;
SELECT s1.*, s2.* FROM sc AS s1 INNER JOIN sc AS s2 ON s1.score = s2.score ORDER BY s1.CId DESC, s1.SId ASC;
SELECT s1.*, s2.* FROM sc AS s1 INNER JOIN sc AS s2 ON s1.score = s2.score AND s1.SId != s2.SId AND s1.CId != s2.CId ORDER BY s1.CId DESC, s1.SId ASC;
SELECT *, DENSE_RANK() OVER (PARTITION BY CId ORDER BY score DESC) AS ranking FROM sc ORDER BY CId ASC, SCORE DESC;
SELECT * FROM (SELECT *, DENSE_RANK() OVER (PARTITION BY CId ORDER BY score DESC) AS ranking FROM sc ORDER BY CId ASC, SCORE DESC) AS t WHERE t.ranking <= 2;
SELECT CId FROM sc GROUP BY CId HAVING COUNT(1) > 5;
SELECT COUNT(1) AS counting, CId FROM sc GROUP BY CId HAVING counting > 5;
SELECT SId FROM sc GROUP BY SId HAVING COUNT(1) >= 2;
SELECT COUNT(1) AS counting, SId FROM sc GROUP BY SId HAVING counting >= 2;
SELECT SUM(1) FROM course;
SELECT SId FROM sc GROUP BY SId HAVING COUNT(1) >= 3;
SELECT SId FROM sc GROUP BY SId HAVING COUNT(1) = (SELECT SUM(1) FROM course);
SELECT * FROM student WHERE SId IN(SELECT SId FROM sc GROUP BY SId HAVING COUNT(1) = (SELECT SUM(1) FROM course));
SELECT *, YEAR(Sage) AS birthYear FROM student;
SELECT *, YEAR(Sage) AS birthYear , YEAR(NOW()) AS nowYear FROM student;
SELECT *, YEAR(Sage) AS birthYear , YEAR(NOW()) AS nowYear, (YEAR(NOW()) - YEAR(Sage)) AS studentAge FROM student;
SELECT *, YEAR(Sage) AS birthYear, YEAR(NOW()) AS nowYear, (YEAR(NOW()) - YEAR(Sage)) AS studentAge, NOW() AS nowDate FROM student;
SELECT *, DATE_ADD(Sage, INTERVAL studentAge YEAR) AS nowBirthday FROM (
SELECT *, YEAR(Sage) AS birthYear, YEAR(NOW()) AS nowYear, (YEAR(NOW()) - YEAR(Sage)) AS studentAge, NOW() AS nowDate FROM student
) AS t1;
SELECT *, IF(nowDate < nowBirthday, studentAge - 1, studentAge) AS realStudentAge FROM (
SELECT *, DATE_ADD(Sage, INTERVAL studentAge YEAR) AS nowBirthday FROM (
SELECT *, YEAR(Sage) AS birthYear, YEAR(NOW()) AS nowYear, (YEAR(NOW()) - YEAR(Sage)) AS studentAge, NOW() AS nowDate FROM student
) AS t1
) AS t2;
SELECT * FROM student WHERE YEARWEEK(DATE_ADD(Sage, INTERVAL (YEAR(NOW()) - YEAR(Sage)) YEAR)) = YEARWEEK(NOW());
SELECT * FROM student WHERE YEARWEEK(DATE_ADD(Sage, INTERVAL (YEAR(NOW()) - YEAR(Sage)) YEAR)) = (YEARWEEK(NOW()) + 1);
SELECT * FROM student WHERE MONTH(Sage) = MONTH(NOW());
SELECT * FROM student WHERE MONTH(Sage) = (MONTH(NOW()) + 1);