91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用MySQL中order by

發布時間:2021-11-16 10:27:19 來源:億速云 閱讀:141 作者:iii 欄目:開發技術

本篇內容主要講解“怎么使用MySQL中order by”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么使用MySQL中order by”吧!

1、簡介

在使用select語句時可以結合order by對查詢的數據進行排序。如果不使用order by默認情況下MySQL返回的數據集,與它在底層表中的順序相同,可能與你添加數據到表中的順序一致,也可能不一致(在你對表進行修改、刪除等操作時MySQL會對內存進行整理,此時數據的順序會發生改變)因此如果我們希望得到的數據是有順序的,就應該明確排序方式。

2、正文

首先準備一張User表,DDL和表數據如下所示,可以直接復制使用。

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用戶名',
  `age` int(11) NOT NULL COMMENT '年齡',
  `sex` smallint(6) NOT NULL COMMENT '性別',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '李子捌', 18, 1);
INSERT INTO `user` VALUES (2, '張三', 22, 1);
INSERT INTO `user` VALUES (3, '李四', 38, 1);
INSERT INTO `user` VALUES (4, '王五', 25, 1);
INSERT INTO `user` VALUES (5, '六麻子', 13, 0);
INSERT INTO `user` VALUES (6, '田七', 37, 1);
INSERT INTO `user` VALUES (7, '謝禮', 18, 1);

SET FOREIGN_KEY_CHECKS = 1;

數據的初始順序如下所示:

mysql> select * from user;
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  1 | 李子捌 |  18 |   1 |
|  2 | 張三   |  22 |   1 |
|  3 | 李四   |  38 |   1 |
|  4 | 王五   |  25 |   1 |
|  5 | 六麻子 |  13 |   0 |
|  6 | 田七   |  37 |   1 |
|  7 | 謝禮   |  18 |   1 |
+----+--------+-----+-----+
7 rows in set (0.00 sec)

2.1 單個列排序

我們首先來看使用order by對單個列進行排序。

需求:

根據用戶年齡進行升序排序。

語句:

select * from user order by age;

結果:

mysql> select * from user order by age;
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  5 | 六麻子 |  13 |   0 |
|  1 | 李子捌 |  18 |   1 |
|  7 | 謝禮   |  18 |   1 |
|  2 | 張三   |  22 |   1 |
|  4 | 王五   |  25 |   1 |
|  6 | 田七   |  37 |   1 |
|  3 | 李四   |  38 |   1 |
+----+--------+-----+-----+
7 rows in set (0.00 sec)

分析:

可以看到user表輸出順序按照age升序排序輸出,因此可以猜測MySQL默認的排序方式是升序。此外我這里使用*通配符查詢所有列,并未明確指明查詢age列;其實MySQLorder by后跟的列不一定要查詢出來,比如 select name from user order by age;這樣也是一樣的效果。

2.2 多個列排序

order by不僅可以對單個列進行排序,它也可以對多個列進行排序,只需要把需要排序的列依次跟在order by之后就可以了。

在測試之前,我們先往表中添加一條年齡相等的數據

mysql> insert into user (name, age, sex) values ('李子柒', 18, 1);
Query OK, 1 row affected (0.01 sec)

需求:

根據用戶年齡升序排序之后再更加用戶名稱排序。

語句:

select * from user order by age, name;

結果:

mysql> select * from user order by age, name;
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  5 | 六麻子 |  13 |   0 |
|  1 | 李子捌 |  18 |   1 |
|  8 | 李子柒 |  18 |   1 |
|  7 | 謝禮   |  18 |   1 |
|  2 | 張三   |  22 |   1 |
|  4 | 王五   |  25 |   1 |
|  6 | 田七   |  37 |   1 |
|  3 | 李四   |  38 |   1 |
+----+--------+-----+-----+
8 rows in set (0.00 sec)

分析:

order by可以作用于多個列,MySQL會完全根據order by后列的順序進行排序。不過MySQL對于中文的排序需要考慮數據庫字符集編碼的問題,如果不是很懂建議不要對中文進行排序,因為大多數情況我們需要得到的是拼音的排序結果,但是往往不盡人意哦!此外這里我們在age和name后都是沒有跟排序方式的,所以默認都是升序,先根據age升序排序之后再根據name升序排序。如果需要使用降序,則需要指明DESC,比如 select id, name, age from user order by age, name desc;

2.3 排序的方式

order by有兩種排序方式,它們分別是:

ASC -> 升序排序(默認排序方式)
DESC -> 降序排序

注意: 在上面說了order by對多個列進行排序,排序方式只會作用于一個列,比如你需要對user表中的數據同時按照age和name進行降序,就應該兩個列都指明降序。

mysql> select * from user order by age desc, name desc;
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  3 | 李四   |  38 |   1 |
|  6 | 田七   |  37 |   1 |
|  4 | 王五   |  25 |   1 |
|  2 | 張三   |  22 |   1 |
|  7 | 謝禮   |  18 |   1 |
|  8 | 李子柒 |  18 |   1 |
|  1 | 李子捌 |  18 |   1 |
|  5 | 六麻子 |  13 |   0 |
+----+--------+-----+-----+
8 rows in set (0.00 sec)

如果你只指定age列降序排序,name列不指定,那么MySQL會根據age降序排序后,再根據name列進行默認升序排序。

mysql> select * from user order by age desc, name;
+----+--------+-----+-----+
| id | name   | age | sex |
+----+--------+-----+-----+
|  3 | 李四   |  38 |   1 |
|  6 | 田七   |  37 |   1 |
|  4 | 王五   |  25 |   1 |
|  2 | 張三   |  22 |   1 |
|  1 | 李子捌 |  18 |   1 |
|  8 | 李子柒 |  18 |   1 |
|  7 | 謝禮   |  18 |   1 |
|  5 | 六麻子 |  13 |   0 |
+----+--------+-----+-----+
8 rows in set (0.00 sec)

可以看到李子捌、李子柒、謝禮三行數據排序方式發生了改變。

2.4 order by結合limit

order by結合limit可以獲取排序后的數據行記錄數量。比如我們從user表中獲取年齡最大的一個用戶。可以看到李四同志38歲了,比較老了,屬于年齡最大的人之一。

mysql> select * from user order by age desc limit 1;
+----+------+-----+-----+
| id | name | age | sex |
+----+------+-----+-----+
|  3 | 李四 |  38 |   1 |
+----+------+-----+-----+
1 row in set (0.00 sec)

limit需要跟在order by之后,如果位置不對,MySQL會拋出異常信息。

mysql> select * from user limit 1 order by age des;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by age des' at line 1

到此,相信大家對“怎么使用MySQL中order by”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开化县| 澎湖县| 兰溪市| 靖远县| 沙湾县| 清河县| 宝兴县| 肇东市| 宁城县| 德安县| 苏尼特左旗| 盈江县| 图木舒克市| 宜宾市| 陆川县| 灵宝市| 通榆县| 锡林浩特市| 福鼎市| 合肥市| 合山市| 温泉县| 昆山市| 鄢陵县| 马山县| 驻马店市| 家居| 肥乡县| 涿州市| 新平| 林芝县| 黄龙县| 易门县| 措美县| 美姑县| 常德市| 郧西县| 陵川县| 扶绥县| 丹东市| 广水市|