DISTINCT
语法介绍,我们拿之前的 Movies表来说,可能很多电影都是同一年Year发布的,如果你想要按年份排重,一年只能出现一部电影到结果中,
你可以用 DISTINCT
关键字来指定某个或某些属性列唯一返回。写作:DISTINCT Year
SELECT DISTINCT column, another_column, …
FROM mytable
WHERE condition(s);
因为 DISTINCT
语法会直接删除重复的行, 我们还会学习 GROUP BY
语句, GROUP BY
也会返回唯一的行,不过可以对具有相同的
属性值的行做一些统计计算,比如:求和.
在实际的数据表中,数据添加的时候不是完全顺序的,比如我们实际的Dog表,不会是按狗的身高从小到大去添加数据,当数据量成千上万之后,如果结果不做任何排序,结果会看起来很错乱.
为了解决结果排序问题, 我们可以用 ORDER BY col_name
排序的语法来让结果按一个或多个属性列做排序.
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC;
ORDER BY col_name
这句话的意思就是让结果按照 col_name 列的具体值做 ASC升序 或 DESC 降序,对数字来说就是升序 1,2,3,... 或降序 ... 3,2,1 .
对于文本列,升序和降序指的是按文本的字母序。
LIMIT
和 OFFSET
子句通常和ORDER BY
语句一起使用,当我们对整个结果集排序之后,我们可以 LIMIT
来指定只返回多少行结果
,用 OFFSET
来指定从哪一行开始返回。你可以想象一下从一条长绳子剪下一小段的过程,我们通过 OFFSET
指定从哪里开始剪,用 LIMIT
指定剪下多少长度。
SELECT column, another_column, …
FROM mytable
WHERE condition(s)
ORDER BY column ASC/DESC
LIMIT num_limit OFFSET num_offset;
你可以想象一下一个新闻网站的新闻条目数据,他们在页面上是按热度和时间排序的,每一个页面只显示10条数据,在所有这些属性都是不断变化的情况下。我们可以想见通过SQL的ORDER LIMIT OFFSET
句法,我们可以根据要求从数据库筛选出需要的新闻条目.
如果你对 LIMIT
和 OFFSET
在SQL中何时执行有疑问,可以说LIMIT和OFFSET一般在SQL的其他部分都执行完之后,再执行。
具体有一个章节来说明SQL中不同子句的执行顺序问题 Lesson 12: Order of execution
.
本节介绍了 DISTINCT, ORDER, LIMIT
这几个简单的语法,它们都是对结果集做一些简单的处理。我们可以用这些知识来处理 Movies 表的一些实际问题了,
详细请看下面的练习Tasks.