本篇文章的参考文献:
PART 1:字符串拼接问题
mysql 实现字符串的拼接_SmileTimLi的博客-CSDN博客blog.csdn.netPART 2:有疑问的问题的网上解答(待询问助教/老师)
查询本周过生日的学生_qq_20144193的博客-CSDN博客blog.csdn.net练习题来源:
Mysql_45道练习题www.jianshu.com- 在数据库中建数据表:
--1.学生表 Student(SId,Sname,Sage,Ssex)
SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
--2.课程表 Course(CId,Cname,TId)
CId 课程编号,Cname 课程名称,TId 教师编号
--3.教师表 Teacher(TId,Tname)
TId 教师编号,Tname 教师姓名
--4.成绩表 SC(SId,CId,score)
SId 学生编号,CId 课程编号,score 分数
创建测试数据
学生表 Student:
导入数据方法:将以下 mysql 语句,完整复制到 workbench 语句窗口(或者是 mysql 的黑窗口),然后运行即可导入,不需要另外创建表,下面表的操作一样。这些语句第一条是创建表(create table),后面都是插入数据到表中(insert into table )。
create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙风' , '1990-05-20' , '男');
insert into Student values('04' , '李云' , '1990-08-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吴兰' , '1992-03-01' , '女');
insert into Student values('07' , '郑竹' , '1989-07-01' , '女');
insert into Student values('09' , '张三' , '2017-12-20' , '女');
insert into Student values('10' , '李四' , '2017-12-25' , '女');
insert into Student values('11' , '李四' , '2017-12-30' , '女');
insert into Student values('12' , '赵六' , '2017-01-01' , '女');
insert into Student values('13' , '孙七' , '2018-01-01' , '女');
科目表 Course
create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));
insert into Course values('01' , '语文' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');
教师表 Teacher
create table Teacher(TId varchar(10),Tname varchar(10));
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');
成绩表 SC
create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 80);
insert into SC values('03' , '03' , 80);
insert into SC values('04' , '01' , 50);
insert into SC values('04' , '02' , 30);
insert into SC values('04' , '03' , 20);
insert into SC values('05' , '01' , 76);
insert into SC values('05' , '02' , 87);
insert into SC values('06' , '01' , 31);
insert into SC values('06' , '03' , 34);
insert into SC values('07' , '02' , 89);
insert into SC values('07' , '03' , 98);
2.时间函数相关的练习题
题目:
1、查询各学生的年龄,只按年份来算
2、按照出生日期来算,当前月日 < 出生年月的月日则,年龄减
3、查询本周过生日的学生
我的答案:
-- 1、查询各学生的年龄,只按年份来算
select *,year(now())-year(sage) as age
from student;
-- 2、按照出生日期来算,当前月日 < 出生年月的月日则,年龄减1
select *, timestampdiff(year,sage,now()) as age
from student;
-- 3、查询本周过生日的学生
select *
from student
where week(date(concat_ws("-",year(now()),SUBSTR(sage,6,5))))=week(now());
-- *******考虑出生年所在周,可能与本年不同的情况。
参考答案:
1、查询各学生的年龄,只按年份来算
select
*,
year(now())-year(sage) as age
from student;
2、按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一
使用year提取年份进行计算:
select
*,
case when substr(sage,6,5)<substr(now(),6,5) then year(now())-year(sage)
when substr(sage,6,5)>=substr(now(),6,5) then year(now())-year(sage)-1 end as age
from student;
使用 timestampdiff 函数:
select
student.SId as 学生编号,
student.Sname as 学生姓名,
TIMESTAMPDIFF(YEAR,student.Sage,CURDATE()) as 学生年龄
from student
3、查询本周过生日的学生
select
*,
week(sage) as sweek,
yearweek(sage) as yweek,
EXTRACT(week FROM Sage) as eweek,
EXTRACT(week FROM now()) as nweek
from student
where EXTRACT(week FROM Sage)=EXTRACT(week FROM now());