练习题补充知识
一、日期函数
DAYOFWEEK ,DAYOFYEAR ,DAYOFMONTH
select now() # 取日期和时间
CURDATE() | 返回当前日期 |
---|---|
CURRENT_DATE() | 返回当前日期 |
CURRENT_TIME | 返回当前时间 |
CURRENT_TIMESTAMP() | 返回当前日期和时间 |
CURTIME() | 返回当前时间 |
符号 | 含义 |
---|---|
%a | 缩写星期名 |
%b | 缩写月名 |
%c | 月,数值 |
%D | 带有英文前缀的月中的天 |
%d | 月的天,数值(00-31) |
%e | 月的天,数值(0-31) |
%f | 微秒 |
%H | 小时 (00-23) |
%h | 小时 (01-12) |
%I | 小时 (01-12) |
%i | 分钟,数值(00-59) |
%j | 年的天 (001-366) |
%k | 小时 (0-23) |
%M | 月名 |
%m | 月,数值(00-12) |
%p | AM 或 PM |
%r | 时间,12-小时(hh:mm:ss AM 或 PM) |
%S | 秒(00-59) |
%T | 时间, 24-小时 (hh:mm:ss) |
%U | 周 (00-53) 星期日是一周的第一天 |
%u | 周 (00-53) 星期一是一周的第一天 |
%V | 周 (01-53) 星期日是一周的第一天,与 %X 使用 |
%v | 周 (01-53) 星期一是一周的第一天,与 %x 使用 |
%W | 星期名 |
%w | 周的天 (0=星期日, 6=星期六) |
%X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
%Y | 年,4 位 |
%y | 年,2 位 |
%l | 小时 (1-12) |
二、练习题
account:
cart:
category:
goods:
1:火腿肠被谁买了?
SELECT goods.goods_name,account.name
FROM account,goods,cart
WHERE goods.good_no=cart.goods_no
AND account.id=cart.account_id
AND goods.goods_name='火腿肠'
2:零食被谁买了?
SELECT goods.goods_name,category.name,account.name
FROM account,cart,category,goods
WHERE goods.good_no=cart.goods_no
AND account.id=cart.account_id
AND goods.category_no=category.no
AND category.name='零食'
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6iDjI1EZ-1690275331186)(https://gitee.com/zhou-ying-ying/images/raw/master/images/image-20230725151458368.png)]
3:张三买了哪些商品?
SELECT goods.goods_name,account.name
FROM goods,account,cart
WHERE account.id=cart.account_id
AND goods.good_no=cart.goods_no
AND account.name='张三'
4:所有用户分别买了多少钱?
SELECT account.name,SUM((goods.price*cart.num)) AS 总价
FROM goods,account,cart
WHERE account.id=cart.account_id
AND cart.goods_no=goods.good_no
GROUP BY account.name
group by 分组
5:假设购物车东西全部销售,周几的营业额最高
SELECT DAYOFWEEK(cart.create_time) AS 星期,SUM(goods.price*cart.num) AS 营业额
FROM goods,cart
WHERE goods.good_no=cart.goods_no
GROUP BY DATE_FORMAT( cart.create_time,'%Y-%m-%d')
ORDER BY SUM(goods.price*cart.num) DESC
LIMIT 0,1
SUM(expression) 返回指定字段的总和
如:计算 OrderDetails 表中字段 Quantity 的总和:
SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;
6:张三在什么时候购物
SELECT account.name,goods.goods_name,TIME(cart.create_time)
FROM account,cart,goods
WHERE account.id=cart.account_id
AND cart.goods_no=goods.good_no
AND account.name='张三'
TIME(expression) 提取传入表达式的时间部分
SELECT TIME("19:30:10");
-> 19:30:10
7:购物车里的商品销售后,赚了多少钱
#分别赚的
SELECT goods.goods_name,goods.price,goods.cost,cart.num,(goods.price-goods.cost)*cart.num AS 盈利
FROM cart,goods
WHERE cart.goods_no=goods.good_no
#共赚
SELECT SUM((goods.price-goods.cost)*cart.num) AS 盈利
FROM cart,goods
WHERE cart.goods_no=goods.good_no
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vIocypSD-1690275331188)(https://gitee.com/zhou-ying-ying/images/raw/master/images/image-20230725154221446.png)]
8:求哪个商品利润率最高
SELECT goods_name,CONCAT(((price-cost)/cost*100),'%') AS 最高利润率
FROM goods
ORDER BY (price-cost)/cost*100 DESC
LIMIT 0,1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6j63N5vk-1690275331188)(https://gitee.com/zhou-ying-ying/images/raw/master/images/image-20230725154622269.png)]
9: 求2023年3月12日前一周上架的商品
SELECT * FROM goods
WHERE DATE_FORMAT(create_time,'%Y-%m-%d') >= DATE_SUB('2023-03-12',INTERVAL 1 WEEK)
AND DATE_FORMAT(create_time,'%Y-%m-%d')<='2023-03-12'
DATE_FORMAT(d,f) 按表达式 f的要求显示日期 d
SELECT DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r')
-> 2011-11-11 11:11:11 AM
select DATE_FORMAT( NOW(),'%Y-%m-%e') # 提取 包含时间的日期 中的日期部分,不要时间部分,格式化时间
DATE_SUB(date,INTERVAL expr type) 函数从日期减去指定的时间间隔。
Orders 表中 OrderDate 字段减去 2 天:
SELECT OrderId,DATE_SUB(OrderDate,INTERVAL 2 DAY) AS OrderPayDate
FROM Orders
三、部分书写顺序和执行循序
1.SQL语句的书写顺序:
- select
- from
- where
- group by
- having
- order by
- limit
2.SQL语句的执行顺序:
- from
- where
- group by
- 聚合
- having
- select
- distinct
- order by
三、部分书写顺序和执行循序
1.SQL语句的书写顺序:
- select
- from
- where
- group by
- having
- order by
- limit
2.SQL语句的执行顺序:
- from
- where
- group by
- 聚合
- having
- select
- distinct
- order by
- limit