本文已参与「新人创作礼」活动,一起开启掘金创作之路。
在这里先写一下最近的MySQL刷题感受:
不足之处:
1.在做题目的时候没有仔细验证答案的结果和准确性,只是简单地和答案进行比较
2.没有做到很好地查看题目,只是一个劲做
3.对于一些特别的函数没有用到很多,如date_format和datediff
19.会不会返回null?
一般select不到结果会返回null 如果是条件限制,那么行被删去,什么都不会返回
如果是这样,如果没有查询到就会返回一个空:
select
if(num,num,null) as num #即使是这样也不行
from mynumbers
group by num having count(*)=1
order by num desc limit 1
如果想要返回null,直接在外面再套一个select 即可~!
select
(
select
num
from mynumbers
group by num having count(*)=1
order by num desc limit 1
) as num
20.一种group by的简单写法
select customer_id from Customer
group by customer_id
having count(distinct product_key) = (select count(distinct product_key) from Product)
##注意!!!!
#distinct后面不能带* !!!!!
21.inner join 和left join的区别:
如果没有这个行,那么inner join不会有任何返回值(有on的情况下);若inner join后面没有跟上on,则会产生笛卡尔积
如果没有这个行, left join 会返回左边表的值
22.如果装不上max:
select max(sum(price)) cnt from sales group by seller_id--->这样的用法是错误的
all(select sum(price) cnt from sales group by seller_id)---->这样是对的,相当于一种变通的写法
23.datediff
datediff(日期1, 日期2): 得到的结果是日期1与日期2相差的天数。
1.如果日期1比日期2大,结果为正;
2.如果日期1比日期2小,结果为负。
24.一个比之前所有的日期都要短的时间:
select id
from weather
where (id,temperature) in(
select
id,
max(temperature) over(order by recorddate )
from
weather
)
and id<>1 #如果没有这句话会导致第一天总是会比其所有的日子温度高(因为根本就没有数据)