首先文章用影片分类的方式讲述了好分类和坏分类对于数据录入和查询的影响。
仅仅用 UPDATE 更新数据可能比较慢,这里要用一种超大型 UPDATE 方法。
那就是 CASE
UPDATE my_table
SET new_column =
CASE
WHEN column1 = somevalue1
THEN newvalue1
WHEN column2 = somevalue2
THEN newvalue2
ELSE newvalue3
END;
比如上面,要更新 new_column列的数据,可以用这种方法。
=======================================================================================
这里如果符合多个分类则取第一个分类执行。这就是问题所在。
所以我们应该在 WHEN 语句中加入 AND
例如:
WHEN cartoon = 'T' AND rating = 'G' THEN 'family'
然后我们需要一种方法来组织一下 SELECT 出的数据。比如选出A 开头分类为family 的影片 P251
SELECT title, category FROM movie_table
WHERE title LIKE 'A%' AND category = 'Family';
如果影片超级多,这是很麻烦的,所以我们要使用 ORDER BY 这个命令。
SELECT 的时候,根据某个列的排序(ORDER)所返回的查询结果:
SELECT title, category
FROM movie_table
WHERE
title Like 'A%'
AND
category = 'family'
ORDER BY title;
SELECT title, category
FROM movie_table
WHERE
category = 'family'
ORDER BY title;
去掉 'A%'就行了。
使用ORDER查询:
结果:
======================================================================================================
牢记:先后
NULL>数字>大写字母>小写字母
多列排序查询,优先第一列,第一列完了再排序第二列:
SELECT title, category, purchased
FROM movie_table
ORDER BY category, purchased;
当然更多列也是可以的。
==================================================================
如果我们要反着来查询,比如先查Z开头的,那么在列名称后面加上关键字 DESC
DESC在 ORDER 里面不是 description 而是 descending(降序)
相应的,默认顺序是ASC(可以不写):P261
SELECT title, purchased
FROM movie_table
ORDER BY title ASC, purchased DESC;
===============================================================
使用 SUM 为我们加总和。
我们要计算名为 Nicole 的人的饼干销量。
SELECT SUM(sales)
FROM cookie_sales
WHERE first_name = 'Nicole';
当然如果这里有很多人,一个一个算还是麻烦了点。
这里用 GROUP BY 来分组加总:
SELECT first_name, SUM(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY SUM(sales)DESC;
AVG搭配GROUP BY计算平均数:
SELECT first_name, AVG(sales)
FROM cookie_sales
GROUP BY first_name;
MIN和MAX:
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;
这里实际上返回的是有记录的天数,应该和GROUP BY联合用:
SELECT first_name, COUNT(sale_data)
FROM cookie_sales
GROUP BY first_name;
===================================================================================
DISTINCT 选出与众不同的值:
SELECT DISTINCT sale_date
FROM cookie_sales
ORDER BY sale_date;
配合COUNT 返回销售天数最多的人:
SELECT COUNT(DISTINCT sale_date)
FROM cookie_sales;
================================================================
如果结果很多,但是我们只想查询前一部分,那么使用LIMIT来限制数量:
SELECT first_name, SUM(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY SUM(sales)DESC
LIMIT 2;
这里只有两行。
如果我们只要第二名呢?
SELECT first_name, SUM(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY SUM(sales)DESC
LIMIT 1,1;
这里1,1指的是从第二条开始,只显示1条记录。注意所有编号是从0开始的,意思是0指的是第一条。