SQL入门14

五、在where子句后的排序

1、ORDER BY子句

ORDER BY 子句用于根据一个或者多个字段对查询结果(结果集)进行排序,可以是降序,也可以是升序。默认情况下,大部分数据库将查询结果按照升序排序。

ORDER BY基本语法:

select column_name
from table_name
where condition
order by column1,column2,..asc--升序
select column_name
from table_name
where condition
order by column1,column2,..desc--降序

可以在order by子句中指定多个多个排序的字段,它们之间可以用逗号隔开;

但是,必须确定这些字段都在所在的列中。

ASC 关键字表示升序,DESC 关键字表示降序;如果不写,大部分数据库默认为 ASC。

DESC表示的是从大到小排序;

ASC表示的是从小到大排序。

例子:

查询教师表 teachers 中教师年龄 age 的唯一值,并将结果按照年龄 age 进行升序排序。
表定义: teachers (教师表)。

SQL语句实现:

select distinct age--年龄 age 的唯一值
from teachers
order by age asc;--升序排序

执行输出结果:

| age |
| :-- |
| 18  |
| 20  |
| 21  |
| 28  |

注意:

order by子句必须跟在where后面使用,如果题目有提where子句后面的条件的情况下。
 

 2、GROUP BY子句:分组

GROUP BY 子句用来根据指定的字段对结果集(选取的数据)进行分组,如果某些记录的指定字段具有相同的值,那么它们将被合并为一条数据。通俗地理解,GROUP BY 子句将根据指定的字段合并数据行。

借助 SQL 聚合函数,可以对分组的数据进行再次加工,例如:

        SUM( ) 函数可以对指定字段的值进行求和;

        COUNT( ) 函数可以计算某个分组内数据的条数;

        AVG( ) 函数可以对指定字段的值求平均数。

GROUP BY 子句的基本语法如下:

select column_name
from table_name 
where conditions
group by column1,column2,..
order by column1,column2,..

注意:

GROUP 子句使用说明:

GROUP BY 子句需要和 SELECT 语句一起使用;

如果有 WHERE 子句,那么 WHERE 子句需要放在 GROUP BY 子句之前;

如果有 ORDER BY 子句,那么 ORDER BY 子句需要放在 GROUP 子句之后。

示例

现在有包含如下记录的 website 表:

+----+----------------+----------------------------+-----+-------+---------+---------+
| id | name           | url                        | age | alexa | uv      | country |
+----+----------------+----------------------------+-----+-------+---------+---------+
|  1 | 百度           | https://www.baidu.com/     |  21 |     4 |  5010.5 | CN      |
|  2 | 淘宝           | https://www.taobao.com/    |  17 |     8 | 3996.75 | CN      |
|  3 | C语言中文网    | http://c.biancheng.net/    |  12 |  7923 |   11.62 | CN      |
|  4 | Google         | https://www.google.com/    |  23 |     1 |   36474 | US      |
|  5 | GitHub         | https://github.com/        |  13 |    95 |   216.3 | US      |
|  6 | Stack Overflow | https://stackoverflow.com/ |  16 |    48 |   592.2 | US      |
|  7 | Yandex         | http://www.yandex.ru/      |  11 |    53 |  591.82 | RU      |
|  8 | VK             | https://vk.com/            |  23 |    23 |    1206 | RU      |
+----+----------------+----------------------------+-----+-------+---------+---------+

每个国家网站的总访问量,那么 GROUP BY 子句的写法如下:

SELECT country, SUM(uv) AS total --as取别名total
FROM website
GROUP BY country;

 AS关键字用来给字段起一个临时的别名,该别名只显示在结果集中,并不会更改原始表的字段名执行输出结果:

+---------+--------------------+
| country | total              |
+---------+--------------------+
| CN      |  9018.869999885559 |
| RU      | 1797.8200073242188 |
| US      |  37282.50001525879 |
+---------+--------------------+

 3、TOP子句:限制返回数据的条数

TOP 子句用于限定要返回的记录的数据,可以是一个具体的数字,也可以是一个百分数。
对于拥有成千上万条记录的大型数据表来说,TOP 子句非常有用,它能够压缩结果集的大小,提高程序查询效率。


注意,并不是所有的数据库都支持 TOP 子句,有些数据库使用其它的等价语句来替代,例如:

        MySQL 使用 LIMIT 子句获取指定数量的记录;

        Oracle 使用 ROWNUM 子句获取指定数量的记录。

语法

SELECT 语句中的 TOP 子句的基本语法如下:

select top (number) column_name
from table_name
where condition;

示例

现在有包含如下记录的 website 表:

+----+----------------+----------------------------+-----+-------+---------+---------+
| id | name           | url                        | age | alexa | uv      | country |
+----+----------------+----------------------------+-----+-------+---------+---------+
|  1 | 百度           | https://www.baidu.com/     |  21 |     4 |  5010.5 | CN      |
|  2 | 淘宝           | https://www.taobao.com/    |  17 |     8 | 3996.75 | CN      |
|  3 | C语言中文网    | http://c.biancheng.net/    |  12 |  7923 |   11.62 | CN      |
|  4 | Google         | https://www.google.com/    |  23 |     1 |   36474 | US      |
|  5 | GitHub         | https://github.com/        |  13 |    95 |   216.3 | US      |
|  6 | Stack Overflow | https://stackoverflow.com/ |  16 |    48 |   592.2 | US      |
|  7 | Yandex         | http://www.yandex.ru/      |  11 |    53 |  591.82 | RU      |
|  8 | VK             | https://vk.com/            |  23 |    23 |    1206 | RU      |
+----+----------------+----------------------------+-----+-------+---------+---------+

SQL Server 支持 TOP 子句,以下语句在 SQL Server 上运行通过,它将获取 website 表中的前三条记录:

SELECT TOP 3 * FROM website;

 执行输出结果:

+----+-------------+-------------------------+-----+-------+---------+---------+
| id | name        | url                     | age | alexa | uv      | country |
+----+-------------+-------------------------+-----+-------+---------+---------+
|  1 | 百度        | https://www.baidu.com/  |  21 |     4 |  5010.5 | CN      |
|  2 | 淘宝        | https://www.taobao.com/ |  17 |     8 | 3996.75 | CN      |
|  3 | C语言中文网 | http://c.biancheng.net/ |  12 |  7923 |   11.62 | CN      |
+----+-------------+-------------------------+-----+-------+---------+---------+

使用 MySQL 数据库,请使用 LIMIT 子句替代:

SELECT * FROM website LIMIT 3;

使用 Oracle 数据库,请使用 ROWNUM 子句替代:

SELECT * FROM website WHERE ROWNUM <= 3;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值