DISTINCT
语法介绍,我们拿之前的 Movies表来说,可能很多电影都是同一年Year发布的,如果你想要按年份排重,一年只能出现一部电影到结果中, 你可以用 DISTINCT
关键字来指定某个或某些属性列唯一返回。写作:DISTINCT Year
选取出唯一的结果的语法
SELECT DISTINCT column, another_column, …
FROM mytable
WHERE condition(s);
因为 DISTINCT
语法会直接删除重复的行, 我们还会学习 GROUP BY
语句, GROUP BY
也会返回唯一的行,不过可以对具有相同的 属性值的行做一些统计计算,比如:求和.
结果排序 (Ordering results)
在实际的数据表中,数据添加的时候不是完全顺序的,比如我们实际的Dog表,不会是按狗的身高从小到大去添加数据,当数据量成千上万之后,如果结果不做任何排序,结果会看起来很错乱.
为了解决结果排序问题, 我们可以用 ORDER BY col_name
排序的语法来让结果按一个或多个属性列做排序.
结果排序(ordered results)
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选取部分结果
LIMIT
和 OFFSET
子句通常和ORDER BY
语句一起使用,当我们对整个结果集排序之后,我们可以 LIMIT
来指定只返回多少行结果 ,用 OFFSET
来指定从哪一行开始返回。你可以想象一下从一条长绳子剪下一小段的过程,我们通过 OFFSET
指定从哪里开始剪,用 LIMIT
指定剪下多少长度。LIMIT和OFFSET一般在SQL的其他部分都执行完之后,再执行。
limited查询
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
句法,我们可以根据要求从数据库筛选出需要的新闻条目.
练习
本节介绍了 DISTINCT, ORDER, LIMIT
这几个简单的语法,它们都是对结果集做一些简单的处理。我们可以用这些知识来处理 Movies 表的一些实际问题了, 详细请看下面的练习Tasks.
Table(表): Movies
Id | Title | Director | Year | Length_minutes |
1 | Toy Story | John Lasseter | 1995 | 81 |
2 | A Bug's Life | John Lasseter | 1998 | 95 |
3 | Toy Story 2 | John Lasseter | 1999 | 93 |
4 | Monsters, Inc. | Pete Docter | 2001 | 92 |
5 | Finding Nemo | Finding Nemo | 2003 | 107 |
6 | The Incredibles | Brad Bird | 2004 | 116 |
7 | Cars | John Lasseter | 2006 | 117 |
8 | Ratatouille | Brad Bird | 2007 | 115 |
9 | WALL-E | Andrew Stanton | 2008 | 104 |
10 | Up | Pete Docter | 2009 | 101 |
11 | Toy Story 3 | Lee Unkrich | 2010 | 103 |
12 | Cars 2 | John Lasseter | 2011 | 120 |
13 | Brave | Brenda Chapman | 2012 | 102 |
14 | Monsters University | Dan Scanlon | 2013 | 110 |
练习 do it — 请完成如下任务
1.按导演名排重
列出所有电影,并按导演名正序排列
Select distinct director from movies
Order by director
2.列出按上映年份最新
上线的4部电影
Select * from movies
Order by year desc
limit 4
3.按电影名字母序升序
排列,列出前5部电影
Select * from movies
Order by title
limit 5
4.按电影名字母序升序排列,列出上一题之后
的5部电影
Select * from movies
Order by title
limit 5 offset 6
5.如果按片长排列,John Lasseter导演导过片长第3长的电影是哪部,列出名字即可
Select Title from movies
where director like "John Lasseter"
Order by Length_minutes desc
limit 1 offset 2
6.按导演名字母升序,如果导演名相同按年份降序,取前10部电影给我
select * from movies
order by director asc,year desc
limit 10 offset 0