sql语句

如何查找一个月内到期的数据?

在这里插入图片描述
查询一个月内到期的学生。
这里需要用到一个DiffDate时间函数。查了一下其功能
在这里插入图片描述
分析问题:
1.一个月内到期的就是到期时间与当前时间天数之差小于等于30天
先把所有的天数差查出来
SELECT DATEDIFF(enddate,NOW()) AS DiffDate,s.* FROM students s
在这里插入图片描述
2.然后条件查询
错误做法:
SELECT DATEDIFF(enddate,NOW()) AS DiffDate,s.* FROM students s WHERE DiffDate BETWEEN 0 AND 30
在这里插入图片描述
这样是不行的,因为DiffDate不是students表里的一个字段
3.可以把查询出来的结果当成一个表,然后再从这个表里查数据
SELECT a.* FROM
(SELECT DATEDIFF(enddate,NOW()) AS DiffDate,s.* FROM students s) AS a //当成a表
WHERE a.DiffDate BETWEEN 0 AND 30
在这里插入图片描述
方法二:今天老师讲了这个,有更简单的sql语句

SELECT * FROM students WHERE  enddate <= (DATE_ADD(NOW(),INTERVAL +1 MONTH))

根据到期日期小于当前日期加上一个月的时间
https://www.w3school.com.cn/sql/func_date_add.asp

如何把两个字段放到一个字段里?

业务:显示一下列表
在这里插入图片描述
student表
在这里插入图片描述
classes表
在这里插入图片描述
stuexpendstime表
在这里插入图片描述
subject表
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210126200912650.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqM
TIzYWI=,size_16,color_FFFFFF,t_70)
无非就是围绕这三个表查询,年级需要连接查询。这里的课程是一个学生报多个课程。课程名是一个学生的所有的课程名,缴费金额是一个学生报课程的所有缴费金额。
这里查询分两步。
1.我们先查询stuexpendstime表和年级表已经学生表

SELECT *,SUM(t.`subjectMoney`) money FROM students s LEFT JOIN classes c ON s.`classesid` = c.`cid` LEFT JOIN stuexpendstime t
ON s.`sid` =  t.`studentid` GROUP BY s.`sid`

在这里插入图片描述
已经把学生信息,年级,缴费总金额查询出来了。
2.查询subject表和stuexpendstime表

SELECT t.`studentid`,GROUP_CONCAT(sub.subjectname) subjectNames FROM stuexpendstime t LEFT JOIN SUBJECT sub ON t.`subjectid` = sub.subjectid
GROUP BY t.`studentid`

3.两表连接查询

SELECT * FROM
(
SELECT *,SUM(t.`subjectMoney`) money FROM students s LEFT JOIN classes c ON s.`classesid` = c.`cid` LEFT JOIN stuexpendstime t
ON s.`sid` =  t.`studentid` GROUP BY s.`sid`
) 
stu LEFT JOIN
(
SELECT t.`studentid`,GROUP_CONCAT(sub.subjectname) subjectNames FROM stuexpendstime t LEFT JOIN SUBJECT sub ON t.`subjectid` = sub.subjectid
GROUP BY t.`studentid`
) sub ON stu.sid = sub.studentid

在这里插入图片描述
查询成功
拓展:
一 concat()函数

1、功能:将多个字符串连接成一个字符串。

2、语法:concat(str1, str2,…)

返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

3、语法:concat(str1, seperator,str2,seperator,…)

返回结果为连接参数产生的字符串并且有分隔符,如果有任何一个参数为null,则返回值为null。

二 concat_ws()函数

1、功能:和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符(concat_ws就是concat with separator)

2、语法:concat_ws(separator, str1, str2, …)

说明:第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。

三 group_concat()函数

1、功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

2、语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )

说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值