日期函数
now() 当前时间
select now();
year() 年份
- 计算每个同学的年龄
- year(now()) 当前的年份
- year(birthdate) 出生的那年年份
- year(now()) - year(birthdate) 年龄
SELECT id,username,birthdate, (YEAR(NOW()) - YEAR(birthdate)) as age from emps;
unix_timestamp() 时间戳
SELECT (UNIX_TIMESTAMP() - UNIX_TIMESTAMP(birthdate)) as "存活/秒" from emps;
date_format 日期格式化
符号 | 含义 |
---|---|
%Y | 4位数的年份 |
%m | 月份 |
%d | 天 |
%H | 小时 |
%M | 分钟 |
%S | 秒 |
SELECT birthdate, DATE_FORMAT(birthdate,"%Y %m %d") from emps;
查询早上6:00-晚上6:00 之间出生的人;
- 使用 date_format格式化时间
date_format(birthdate,"%H")
select * from emps
where date_format(birthdate,"%H") between 6 and 18;
- 使用 date_format格式化时间
按照出生进行降序排序;
select * from emps
order by birthdate desc;
计算最高薪水salary与最低薪水salary的差距;
select max(salary),min(salary),max(salary)-min(salary) from emps;
datediff() 计算时间差
计算两个时间之间的条件
SELECT DATEDIFF("2017-01-01", "2016-12-24");
select *,DATEDIFF(NOW(),birthdate) from emps;
date_add() 时间换算
- MICROSECOND 微秒
- SECOND 秒
- MINUTE 分钟
- HOUR 小时
- DAY 天
- WEEK 周
- MONTH 月
- QUARTER 季度
YEAR 年
-15 year : 15年前
SELECT DATE_ADD(now(), INTERVAL -15 Year);
20年后
SELECT DATE_ADD(now(), INTERVAL 20 Year);
字符串相关
concat() 拼接
SELECT CONCAT("xiaowang","-",20,"-",75)
- 查询student表,显示数据格式为
张三-男-20-75
select concat(name,"-",sex,"-",age,"-",score) from student;
IFNULL() 如果为空
- 查询学生信息,如果成绩score为null 显示
缺考
```sql select id,name,age,sex,ifnull(score,”缺考”) from student;
select id,name,age,IFNULL(sex,”不详”),IFNULL(score,”缺考”) from student;
![image.png](https://cdn.nlark.com/yuque/0/2021/png/87080/1631957472208-853c4d8b-4acd-4f2a-93d3-97d52b213316.png#clientId=u510e68b4-f5e9-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=272&id=u707499da&margin=%5Bobject%20Object%5D&name=image.png&originHeight=544&originWidth=1000&originalType=binary&ratio=1&rotation=0&showTitle=false&size=169477&status=done&style=none&taskId=ua03210b0-f887-4a77-a03b-ceb8f6f53e8&title=&width=500)
<a name="DQs4t"></a>
# 总结
![Mysql 查询.svg](https://cdn.nlark.com/yuque/0/2021/svg/87080/1631959064246-5d81eb43-66ca-424b-b669-05fde90901cf.svg#clientId=uc217a8b5-cb74-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=uc900e2e9&margin=%5Bobject%20Object%5D&name=Mysql%20%E6%9F%A5%E8%AF%A2.svg&originHeight=924&originWidth=1004&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1416777&status=done&style=none&taskId=ue6d6ef4c-2c4c-4a12-9908-ba8acfa07d9&title=)
<a name="IKdhK"></a>
# 作业
![image.png](https://cdn.nlark.com/yuque/0/2021/png/87080/1631957888134-9197106b-fc65-4bf8-81d4-c9b2e80bb0fd.png#clientId=ufbfda8fc-23f3-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=274&id=u4ff4b345&margin=%5Bobject%20Object%5D&name=image.png&originHeight=548&originWidth=1002&originalType=binary&ratio=1&rotation=0&showTitle=false&size=191254&status=done&style=none&taskId=ufd2077f6-22a9-48ff-839a-12066176f94&title=&width=501)
1. 查询成绩大于60分的同学,并按照年龄升序排序;
1. 年龄最小的同学信息;
1. 年龄第二小的同学信息;
```sql
-- 查询成绩大于60分的同学,并按照年龄升序排序;
SELECT * FROM student
WHERE score > 60 -- 先过滤成绩大于60
ORDER BY age -- 按照年龄排序
-- 年龄最小的同学信息;
-- 1. 先找到最小的年龄
SELECT min(age) FROM student;
-- 2. 根据年龄找到对应的人
SELECT * FROM student
WHERE age=(SELECT min(age) FROM student);
-- 年龄第二小的同学信息; 需要去重
SELECT distinct(age) FROM student ORDER BY age LIMIT 1,1
SELECT * FROM student
WHERE age=(SELECT distinct(age) FROM student ORDER BY age LIMIT 1,1)
- 查询分数,并按照分数进行降序排序,分数一样,按照年龄升序排序;
- 统计sex为null的人员数量;
- 统计张姓人员的总数,总成绩,平均成绩; ```sql — 查询分数,并按照分数进行降序排序,分数一样,按照年龄升序排序; SELECT * FROM student ORDER BY score DESC , age;
— 统计sex为null的人员数量; SELECT COUNT(*) FROM student WHERE sex IS NULL;
— 统计张姓人员的总数,总成绩,平均成绩
SELECT COUNT()总数, SUM(score)总成绩, AVG(score)平均成绩 FROM student WHERE name
LIKE “张%”;
— 注意点: avg在计算的计算的时候会自动去掉Null值。
SELECT COUNT()总数, SUM(score)总成绩, SUM(score)/COUNT(*) 平均成绩 FROM student WHERE name
LIKE “张%”;
7. 查询所有信息,成绩为空显示`缺勤`;
7. 统计男生的人数
7. 统计女生的人数
7. 一条sql语句分别统计男生,女生的人数;(**选做,需要后续知识**);
```sql
-- 查询所有信息,成绩为空显示缺勤;
select id,name,age,sex,ifnull(score,"缺勤") from student
-- 统计男生的人数
select count(*) from student
where sex="男"
-- 统计女生的人数
select count(*) from student
where sex="女"
-- 一条sql语句分别统计男生,女生的人数
select sex,count(*) from student
where sex is not null
group by sex
- 统计emps表中的人数;
- 统计月薪,并将月薪去重之后按照升序排序;
- 计算emps表中的每个人的月薪,年薪(默认12薪); ```sql — 统计emps表中的人数; select COUNT(*) from emps;
— 统计月薪,并将月薪去重之后按照升序排序; select DISTINCT salary from emps ORDER BY salary asc;
— 计算emps表中的每个人的月薪,年薪(默认12薪); select salary ,salary*12 from emps;
4. 计算每个人的年龄,输出姓名(username),年龄;
4. 计算`最大年龄的人`与`最小年龄的人`之间相差的天数;
4. 显示出 `姓名-年龄-月薪-年薪`;
```sql
-- 计算每个人的年龄,输出姓名(username),年龄;
SELECT username,(year(now())-year(birthdate)) as 年龄 FROM emps;
-- 计算最大年龄的人与最小年龄的人之间相差的天数;
SELECT datediff(max(birthdate),min(birthdate)) as 相差天数 from emps;
-- 显示出 姓名-年龄-月薪-年薪;
select concat(username,"-",(year(now())-year(birthdate)),"-",salary,"-",salary*12) as "姓名-年龄-月薪-年薪" from emps;