sql一定要多练习,这学期学校太忙,终于有时间了再把sql基础语句整理一遍,复杂的查询语句大多数都是这些基础语句的组合使用。
###############################基础查询
# 检索列
SELECT order_id,product_id FROM spm_order
# 查找销售人员
select distinct sales_name from spm_order
# 前100行数据
select * from spm_order limit 100
# where语句
select * from spm_order where city in ('北京', '上海', '广州', '深圳', '杭州') and profit > 0 and product_name like '%笔%'
############################## 计算字段
# 平均销售额(销售额/数量)
select *, sales/quantity as '平均销售额' from spm_order
# 拼接字段(concat)
select concat(city, '-', sales_name) as '销售' from spm_order
############################## 分组 过滤 排序
# 分组(group by)
select sales_name, sum(sales), sum(profit) from spm_order where order_date like '2018%' group by sales_name
select sales_name, sum(sales), sum(profit) from spm_order where order_date between '2018-01-01' and '2018-12-31' group by sales_name
# 数据过滤(having)
select sales_name, sum(sales), sum(profit) from spm_order where order_date like '2018%' group by sales_name having sum(profit) > 100000
# 结果排序(order by)
select sales_name, sum(sales), sum(profit) from spm_order where order_date like '2018%' group by sales_name having sum(profit) > 100000 order by sum(sales) desc
############################# 函数
# 数值型函数
-- 求和 sum()
-- 平均值 avg()
-- 最小值 min()
-- 最大值 max()
-- 行数 count(列)
-- 被选行数 count(*)
-- 不同结果的数目 count(distinct 列)
-- 绝对值 abs()
-- 平方 sqrt()
# 表的行数
select count(*) from spm_order
# 产品名称行数
select count(product_id) from spm_order
# 城市数量
select count(distinct city) from spm_order
# 总销售额等等
select sum(sales), sum(profit), avg(quantity), min(profit), max(profit) from spm_order
# 利润与绝对利润
select profit, abs(profit) from spm_order
# 时间日期性型函数
-- 当前日期和时间 now()
-- 当前日期 curdate()
-- 当前时间 curtime()
-- 提取日期或时间表达式的日期部分 date()
-- 按单独部分返回时或日期 extract()
-- 给日期添加指定的时间间隔 date_add()
-- 给日期减去指定的时间间隔 date_sub()
-- 返回两个日期之间的天数 datediff()
-- 用不同格式显示日期时间 date——format()
select
now(), # 当前日期和时间
date(now()), # 日期格式
month(now()),
year(now()),
date_format(now(), '%Y-%m-%d'), # 年月日格式
date_format(now(), '%Y-%m'), # 年月格式 大写为英文 小写为汉字
date_add(now(), interval 1 day), # 日期相加 加一天 一周等等
date_sub(now(), interval 1 day) # 日期相减 减一天 一周等等
# 日期间隔
select datediff('2019-08-31','2019-01-01')
# 现在的日期时间
select now()
# 现在的日期
select curdate()
# 送货天数
select order_date, ship_date, datediff(ship_date, order_date) as '送货天数' from spm_order
# 订单月份
select order_date, month(order_date) as '订单月份' from spm_order
select order_date, date_format(order_date, '%Y-%m') as '订单月份' from spm_order
# 2018年所有订单
select * from spm_order where order_date like '2018%'
select * from spm_order where order_date between '2018-01-01' and '2018-12-31'