数据显示控制

All lectures for ZH purposes
第 1 级 , 课程 774
可用

4.1 限制

如果您希望您的 SQL 查询返回过多的数据,您可以提前限制最大数量。毕竟,表格可以包含数千甚至数百万行。

SQL 使得使用LIMIT. 此关键字用在 SQL 查询的最后,如下所示:

LIMIT quantity

让我们针对产品​​表编写一个查询,其中包含我们商店产品的列表。但是由于我们有一家非常成功的商店并且我们销售了很多产品,所以我们只想获得答案的前 10 行。该请求如下所示:

SELECT * FROM product
LIMIT 10

我们得到以下查询结果:

ID 姓名 品牌 价格 数数
1个 桌子 宜家 20.00 15
2个 椅子 宜家 5.00 45
3个 沙发 宜家 80.00 10
4个 宜家 75.00 10
5个 壁橱 博世 125.00 15
6个 架子 架子 25.00 114
7 电视 LG 350.00 4个
8个 LG 15.00 100
9 梳妆台 宜家 99.00 10
10 盘子 博世 199.00 10

现在我们将只请求前 5 行。该请求如下所示:

SELECT * FROM product
LIMIT 5

我们得到如下查询结果:

ID 姓名 品牌 价格 数数
1个 桌子 宜家 20.00 15
2个 椅子 宜家 5.00 45
3个 沙发 宜家 80.00 10
4个 宜家 75.00 10
5个 壁橱 博世 125.00 15

4.2 偏移量

上次我们学习了如何限制服务器响应中的行数。现在,我们可以获取前 10 行并将它们显示给用户,而不是产品表中的数千行。这是完美的。但是我们如何显示后 10 行呢?第三个?

如果我们写LIMIT 20, or LIMIT 30,服务器不会分别返回 20 和 30 行吗?

对于这种情况,SQL 有一个特殊的关键字OFFSET,您可以使用该关键字要求服务器在其响应中跳过 N 行。此关键字用在 SQL 查询的最后(在 之后LIMIT),如下所示:

OFFSET quantity

让我们在产品表上写一个查询,并尝试获取记录 11 到 15。换句话说,我们要求服务器返回 5 行给我们,但先跳过响应的前 10 行。该请求如下所示:

SELECT * FROM product
LIMIT 5
OFFSET 10

我们得到如下查询结果:

ID 姓名 品牌 价格 数数
十一 扶手椅 博世 44.00 8个
12 花盆 聪明花 99.00 9
13 站立 宜家 100.00 10

服务器只返回了 3 行,这意味着我们的表中总共有 13 行。服务器跳过前 10 个并返回接下来的 5 个。

4.3 选择不同的

另一个有用的关键字是DISTINCT. 当表中有重复记录并且我们想要删除重复项时使用它。

我们表中的重复项来自哪里?表中可能没有重复项,但作为查询的结果,很容易。让我们编写一个查询,返回我们销售的所有产品的品牌。该请求如下所示:

SELECT brand FROM product

我们得到如下查询结果:

品牌
宜家
宜家
宜家
宜家
博世
博世
LG
LG
宜家
博世
博世
聪明花
宜家

很容易看出这张表中有重复的行。这是为了确保没有重复,你需要使用关键字DISTINCT。更正后的请求如下所示:

SELECT DISTINCT brand
FROM product

我们得到如下查询结果:

品牌
宜家
博世
LG
聪明花

好多了。是不是?;)

4.4 订购方式

最后我们要进行排序。要对查询结果进行排序,您需要使用关键字ORDER BY。从技术上讲,这是两个词,但本质并不重要。两个字,一个运营商。

它必须写在关键字之后WHERE,但在LIMITand之前OFFSETORDER BY如果你在 之后写LIMIT,那么 SQL 服务器将简单地返回一个错误给你。

通常,此运算符如下所示:

ORDER BY column order

其中 column 是表/排序结果中列的名称。而顺序就是排序顺序。

排序顺序可以是三种类型:

  • ASC(来自升序)- 升序;
  • DESC(来自降序)-降序;
  • 未指定 - 将被使用ASC

让我们编写一个查询,返回按价格升序排列的产品列表。该请求如下所示:

SELECT * FROM product
ORDER BY price ASC
LIMIT 10

我们得到如下查询结果:

ID 姓名 品牌 价格 数数
2个 椅子 宜家 5.00 45
8个 LG 15.00 100
1个 桌子 宜家 20.00 15
6个 架子 博世 25.00 114
十一 扶手椅 博世 44.00 8个
4个 宜家 75.00 10
3个 沙发 宜家 80.00 10
12 花盆 聪明花 99.00 9
9 梳妆台 宜家 99.00 10
13 站立 宜家 100.00 10

如果我们不指定排序顺序,我们将得到相同的结果——我们将跳过单词ASC

4.5 跨多列的ORDER BY

运算符ORDER BY允许您按多列对结果进行排序。当第一列有很多重复元素时,这会非常有用。该运算符的一般形式如下:

ORDER BY column 1 order 1, column 2 order 2, column 3 order 3

换句话说,如果按第一列排序后你附近有几个相同的值,那么它们按第二列排序,依此类推。

让我们编写一个查询,该查询将按品牌对我们的产品进行排序,对于具有相同品牌的产品 - 按其编号的降序排列。该请求如下所示:

SELECT * FROM product
ORDER BY brand ASC, count
DESC

我们得到如下查询结果:

ID 姓名 品牌 价格 数数
6个 架子 博世 25.00 114
5个 壁橱 博世 125.00 15
10 盘子 博世 199.00 10
十一 扶手椅 博世 44.00 8个
2个 椅子 宜家 5.00 45
1个 桌子 宜家 20.00 15
9 梳妆台 宜家 99.00 10
13 站立 宜家 100.00 10
4个 宜家 75.00 10
3个 沙发 宜家 80.00 10
8个 LG 15.00 100
7 电视 LG 350.00 4个
12 花盆 聪明花 99.00 9

仔细查看表格 - 它的行按品牌名称排序(字母顺序),具有相同品牌名称的行按产品编号降序排序(最后一列)。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION