补充的知识

练习题补充知识

一、日期函数

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)
%pAM 或 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:

image-20230725150100655

cart:

image-20230725150020066

category:

image-20230725150123451

goods:

image-20230725151228967

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='火腿肠'

image-20230725151340031

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='张三'

image-20230725152331064

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

image-20230725152130129

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

image-20230725153411916

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='张三'

image-20230725154123881

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)]

image-20230725154350642

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'

image-20230725154801754

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语句的书写顺序:
  1. select
  2. from
  3. where
  4. group by
  5. having
  6. order by
  7. limit
2.SQL语句的执行顺序:
  1. from
  2. where
  3. group by
  4. 聚合
  5. having
  6. select
  7. distinct
  8. order by
    三、部分书写顺序和执行循序
1.SQL语句的书写顺序:
  1. select
  2. from
  3. where
  4. group by
  5. having
  6. order by
  7. limit
2.SQL语句的执行顺序:
  1. from
  2. where
  3. group by
  4. 聚合
  5. having
  6. select
  7. distinct
  8. order by
  9. limit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值