《深入浅出MySQL》问答录(五)

时间:2022-07-23
本文章向大家介绍《深入浅出MySQL》问答录(五),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本系列出自《深入浅出MySQL》,全文以问答形式展开,是我的个人学习笔记。

问答录

先看花絮

Q:要用到ELSE吗?

A:看你咯,无所谓。


Q:如果没有ELSE而且列也不符合任何一个WHEN条件,会发生什么事?

A:在你想更新的列里面不会发生任何改变。


Q:如果我只想对部分列套用CASE表达式,应该怎么做呢?

A:可以加上WHERE,可以在END后加上WHERE子句。这样,CASE就只会套用在符合WHERE子句的列上。


CASE表达式可以搭配UPDATE以外的语句吗?

A:why not?


Q:讲到MIN,如果查询中的列有NULL,这会有上面影响吗?

A:好问题。NULL其实不会有影响,因为NULL代表此处无值,而不是此值为0.


花絮

CASE语句

看图:

现在怎么办?是像这样吗? :

这样要执行n次啊。。。

那有没有更好的办法,其实在主语言中,这不过就是个分支语句的事情嘛,奈何SQL语言我不熟啊。。。

没事,一直以来不懂,从今以后懂了:

UPDATE my_table
SET new_column =
CASE
	WHEN column1 = somevalue1
		THEN newvalue1
	WHEN column2 = somevalue2
		THEN newvalue2
	ELSE newvalue3
END;

ORDER BY排序

1、升序排序:ASC | 降序排序:DESC

2、SQL排序规则

多列排序:

越靠前的列权重越高,拥有对后面列的一票否决权。

GROUP BY 分组

SELECT first_name,SUM(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY SUM(sales) DESC
;
SELECT first_name,AVG(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY AVG(sales) DESC
;
SELECT first_name,MAX(sales)
FROM cookie_sales
GROUP BY first_name
;
SELECT first_name,MIN(sales)
FROM cookie_sales
GROUP BY first_name
;

COUNT,计数

SELECT COUNT(sale_date)
FROM cookie_sales
;

DISTINCT,取独

SELECT DISTINCT sale_date
FROM cookie_sales
ORDER BY sale_date
;
SELECT COUNT(DISTINCT sale_date)
FROM cookie_sales
;

LIMIT:限制查询数量

SELECT first_name,SUN(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY SUN(sales) DESC
LIMIT 2 OFFSET 4	--跳过两条,查询两条记录
--也可以这样写:LIMIT 4,2
;