板凳-------Mysql cookbook学习 (十--6)

第7章:排序查询结果
7.0 引言

mysql> use cookbook
Database changed
mysql> select * from driver_log;
+--------+-------+------------+-------+
| rec_id | name  | trav_date  | miles |
+--------+-------+------------+-------+
|      1 | Ben   | 2014-07-30 |   152 |
|      2 | Suzi  | 2014-07-29 |   391 |
|      3 | Henry | 2014-07-29 |   300 |
|      4 | Henry | 2014-07-27 |    96 |
|      5 | Ben   | 2014-07-29 |   131 |
|      6 | Henry | 2014-07-26 |   115 |
|      7 | Suzi  | 2014-08-02 |   502 |
|      8 | Henry | 2014-08-01 |   197 |
|      9 | Ben   | 2014-08-02 |    79 |
|     10 | Henry | 2014-07-30 |   203 |
+--------+-------+------------+-------+
10 rows in set (0.09 sec)mysql> select * from mail;
+---------------------+---------+---------+---------+---------+---------+
| t                   | srcuser | srchost | dstuser | dsthost | size    |
+---------------------+---------+---------+---------+---------+---------+
| 2006-05-11 10:15:08 | barb    | saturn  | tricia  | mars    |   58274 |
| 2006-05-12 12:48:13 | tricia  | mars    | gene    | venus   |  194925 |
| 2006-05-12 15:02:49 | phil    | mars    | phil    | saturn  |    1048 |
| 2006-05-13 13:59:18 | barb    | saturn  | tricia  | venus   |     271 |
| 2006-05-14 09:31:37 | gene    | venus   | barb    | mars    |    2291 |
| 2006-05-14 11:52:17 | phil    | mars    | tricia  | saturn  |    5781 |
| 2006-05-14 14:42:21 | barb    | venus   | barb    | venus   |   98151 |
| 2006-05-14 17:03:01 | tricia  | saturn  | phil    | venus   | 2394482 |
| 2006-05-15 07:17:48 | gene    | mars    | gene    | saturn  |    3824 |
| 2006-05-15 08:50:57 | phil    | venus   | phil    | venus   |     978 |
| 2006-05-15 10:25:52 | gene    | mars    | tricia  | saturn  |  998532 |
| 2006-05-15 17:35:31 | gene    | saturn  | gene    | mars    |    3856 |
| 2006-05-16 09:00:28 | gene    | venus   | barb    | mars    |     613 |
| 2006-05-16 23:04:19 | phil    | venus   | barb    | venus   |   10294 |
| 2006-05-17 12:49:23 | phil    | mars    | tricia  | saturn  |     873 |
| 2006-05-19 22:21:51 | gene    | saturn  | gene    | venus   |   23992 |
+---------------------+---------+---------+---------+---------+---------+
16 rows in set (0.02 sec)

7.1 使用order by命令排序查询结果

mysql> select * from driver_log order by name;
+--------+-------+------------+-------+
| rec_id | name  | trav_date  | miles |
+--------+-------+------------+-------+
|      1 | Ben   | 2014-07-30 |   152 |
|      5 | Ben   | 2014-07-29 |   131 |
|      9 | Ben   | 2014-08-02 |    79 |
|      3 | Henry | 2014-07-29 |   300 |
|      4 | Henry | 2014-07-27 |    96 |
|      6 | Henry | 2014-07-26 |   115 |
|      8 | Henry | 2014-08-01 |   197 |
|     10 | Henry | 2014-07-30 |   203 |
|      2 | Suzi  | 2014-07-29 |   391 |
|      7 | Suzi  | 2014-08-02 |   502 |
+--------+-------+------------+-------+
10 rows in set (0.00 sec)mysql> select * from driver_log order by name asc;
+--------+-------+------------+-------+
| rec_id | name  | trav_date  | miles |
+--------+-------+------------+-------+
|      1 | Ben   | 2014-07-30 |   152 |
|      5 | Ben   | 2014-07-29 |   131 |
|      9 | Ben   | 2014-08-02 |    79 |
|      3 | Henry | 2014-07-29 |   300 |
|      4 | Henry | 2014-07-27 |    96 |
|      6 | Henry | 2014-07-26 |   115 |
|      8 | Henry | 2014-08-01 |   197 |
|     10 | Henry | 2014-07-30 |   203 |
|      2 | Suzi  | 2014-07-29 |   391 |
|      7 | Suzi  | 2014-08-02 |   502 |
+--------+-------+------------+-------+
10 rows in set (0.00 sec)mysql> select * from driver_log order by name ASC;
+--------+-------+------------+-------+
| rec_id | name  | trav_date  | miles |
+--------+-------+------------+-------+
|      1 | Ben   | 2014-07-30 |   152 |
|      5 | Ben   | 2014-07-29 |   131 |
|      9 | Ben   | 2014-08-02 |    79 |
|      3 | Henry | 2014-07-29 |   300 |
|      4 | Henry | 2014-07-27 |    96 |
|      6 | Henry | 2014-07-26 |   115 |
|      8 | Henry | 2014-08-01 |   197 |
|     10 | Henry | 2014-07-30 |   203 |
|      2 | Suzi  | 2014-07-29 |   391 |
|      7 | Suzi  | 2014-08-02 |   502 |
+--------+-------+------------+-------+
10 rows in set (0.00 sec)mysql> select * from driver_log order by name DESC;
+--------+-------+------------+-------+
| rec_id | name  | trav_date  | miles |
+--------+-------+------------+-------+
|      2 | Suzi  | 2014-07-29 |   391 |
|      7 | Suzi  | 2014-08-02 |   502 |
|      3 | Henry | 2014-07-29 |   300 |
|      4 | Henry | 2014-07-27 |    96 |
|      6 | Henry | 2014-07-26 |   115 |
|      8 | Henry | 2014-08-01 |   197 |
|     10 | Henry | 2014-07-30 |   203 |
|      1 | Ben   | 2014-07-30 |   152 |
|      5 | Ben   | 2014-07-29 |   131 |
|      9 | Ben   | 2014-08-02 |    79 |
+--------+-------+------------+-------+
10 rows in set (0.00 sec)mysql> select * from driver_log order by name , trav_date;
+--------+-------+------------+-------+
| rec_id | name  | trav_date  | miles |
+--------+-------+------------+-------+
|      5 | Ben   | 2014-07-29 |   131 |
|      1 | Ben   | 2014-07-30 |   152 |
|      9 | Ben   | 2014-08-02 |    79 |
|      6 | Henry | 2014-07-26 |   115 |
|      4 | Henry | 2014-07-27 |    96 |
|      3 | Henry | 2014-07-29 |   300 |
|     10 | Henry | 2014-07-30 |   203 |
|      8 | Henry | 2014-08-01 |   197 |
|      2 | Suzi  | 2014-07-29 |   391 |
|      7 | Suzi  | 2014-08-02 |   502 |
+--------+-------+------------+-------+
10 rows in set (0.00 sec)mysql> select * from driver_log order by name DESC , trav_date DESC;
+--------+-------+------------+-------+
| rec_id | name  | trav_date  | miles |
+--------+-------+------------+-------+
|      7 | Suzi  | 2014-08-02 |   502 |
|      2 | Suzi  | 2014-07-29 |   391 |
|      8 | Henry | 2014-08-01 |   197 |
|     10 | Henry | 2014-07-30 |   203 |
|      3 | Henry | 2014-07-29 |   300 |
|      4 | Henry | 2014-07-27 |    96 |
|      6 | Henry | 2014-07-26 |   115 |
|      9 | Ben   | 2014-08-02 |    79 |
|      1 | Ben   | 2014-07-30 |   152 |
|      5 | Ben   | 2014-07-29 |   131 |
+--------+-------+------------+-------+
10 rows in set (0.00 sec)mysql> select * from driver_log order by name DESC , trav_date ;
+--------+-------+------------+-------+
| rec_id | name  | trav_date  | miles |
+--------+-------+------------+-------+
|      2 | Suzi  | 2014-07-29 |   391 |
|      7 | Suzi  | 2014-08-02 |   502 |
|      6 | Henry | 2014-07-26 |   115 |
|      4 | Henry | 2014-07-27 |    96 |
|      3 | Henry | 2014-07-29 |   300 |
|     10 | Henry | 2014-07-30 |   203 |
|      8 | Henry | 2014-08-01 |   197 |
|      5 | Ben   | 2014-07-29 |   131 |
|      1 | Ben   | 2014-07-30 |   152 |
|      9 | Ben   | 2014-08-02 |    79 |
+--------+-------+------------+-------+
10 rows in set (0.00 sec)mysql> select name, trav_date, miles as distance from driver_log-> order by distance;
+-------+------------+----------+
| name  | trav_date  | distance |
+-------+------------+----------+
| Ben   | 2014-08-02 |       79 |
| Henry | 2014-07-27 |       96 |
| Henry | 2014-07-26 |      115 |
| Ben   | 2014-07-29 |      131 |
| Ben   | 2014-07-30 |      152 |
| Henry | 2014-08-01 |      197 |
| Henry | 2014-07-30 |      203 |
| Henry | 2014-07-29 |      300 |
| Suzi  | 2014-07-29 |      391 |
| Suzi  | 2014-08-02 |      502 |
+-------+------------+----------+
10 rows in set (0.00 sec)mysql> select name, trav_date, miles as distance from driver_log-> order by distance DESC;
+-------+------------+----------+
| name  | trav_date  | distance |
+-------+------------+----------+
| Suzi  | 2014-08-02 |      502 |
| Suzi  | 2014-07-29 |      391 |
| Henry | 2014-07-29 |      300 |
| Henry | 2014-07-30 |      203 |
| Henry | 2014-08-01 |      197 |
| Ben   | 2014-07-30 |      152 |
| Ben   | 2014-07-29 |      131 |
| Henry | 2014-07-26 |      115 |
| Henry | 2014-07-27 |       96 |
| Ben   | 2014-08-02 |       79 |
+-------+------------+----------+
10 rows in set (0.00 sec)

7.2 使用表达式排序

mysql> select * from mail;
+---------------------+---------+---------+---------+---------+---------+
| t                   | srcuser | srchost | dstuser | dsthost | size    |
+---------------------+---------+---------+---------+---------+---------+
| 2006-05-11 10:15:08 | barb    | saturn  | tricia  | mars    |   58274 |
| 2006-05-12 12:48:13 | tricia  | mars    | gene    | venus   |  194925 |
| 2006-05-12 15:02:49 | phil    | mars    | phil    | saturn  |    1048 |
| 2006-05-13 13:59:18 | barb    | saturn  | tricia  | venus   |     271 |
| 2006-05-14 09:31:37 | gene    | venus   | barb    | mars    |    2291 |
| 2006-05-14 11:52:17 | phil    | mars    | tricia  | saturn  |    5781 |
| 2006-05-14 14:42:21 | barb    | venus   | barb    | venus   |   98151 |
| 2006-05-14 17:03:01 | tricia  | saturn  | phil    | venus   | 2394482 |
| 2006-05-15 07:17:48 | gene    | mars    | gene    | saturn  |    3824 |
| 2006-05-15 08:50:57 | phil    | venus   | phil    | venus   |     978 |
| 2006-05-15 10:25:52 | gene    | mars    | tricia  | saturn  |  998532 |
| 2006-05-15 17:35:31 | gene    | saturn  | gene    | mars    |    3856 |
| 2006-05-16 09:00:28 | gene    | venus   | barb    | mars    |     613 |
| 2006-05-16 23:04:19 | phil    | venus   | barb    | venus   |   10294 |
| 2006-05-17 12:49:23 | phil    | mars    | tricia  | saturn  |     873 |
| 2006-05-19 22:21:51 | gene    | saturn  | gene    | venus   |   23992 |
+---------------------+---------+---------+---------+---------+---------+
16 rows in set (0.00 sec)mysql> select t, srcuser, floor((size + 1023)/1024)-> from mail where size > 50000-> order by floor((size + 1023)/1024);
+---------------------+---------+---------------------------+
| t                   | srcuser | floor((size + 1023)/1024) |
+---------------------+---------+---------------------------+
| 2006-05-11 10:15:08 | barb    |                        57 |
| 2006-05-14 14:42:21 | barb    |                        96 |
| 2006-05-12 12:48:13 | tricia  |                       191 |
| 2006-05-15 10:25:52 | gene    |                       976 |
| 2006-05-14 17:03:01 | tricia  |                      2339 |
+---------------------+---------+---------------------------+
5 rows in set (0.00 sec)mysql> select t, srcuser, floor((size + 1023)/1024) as kilobytes-> from  mail where size > 50000-> order by kilobytes;
+---------------------+---------+-----------+
| t                   | srcuser | kilobytes |
+---------------------+---------+-----------+
| 2006-05-11 10:15:08 | barb    |        57 |
| 2006-05-14 14:42:21 | barb    |        96 |
| 2006-05-12 12:48:13 | tricia  |       191 |
| 2006-05-15 10:25:52 | gene    |       976 |
| 2006-05-14 17:03:01 | tricia  |      2339 |
+---------------------+---------+-----------+
5 rows in set (0.00 sec)

7.3 显示一组按照其它属性排序的值

mysql> select t, srcuser,-> concat (floor((size + 1023)/1024), 'K') as size_in_K-> from mail where size > 50000-> order by size_in_K;
+---------------------+---------+-----------+
| t                   | srcuser | size_in_K |
+---------------------+---------+-----------+
| 2006-05-12 12:48:13 | tricia  | 191K      |
| 2006-05-14 17:03:01 | tricia  | 2339K     |
| 2006-05-11 10:15:08 | barb    | 57K       |
| 2006-05-14 14:42:21 | barb    | 96K       |
| 2006-05-15 10:25:52 | gene    | 976K      |
+---------------------+---------+-----------+
5 rows in set (0.00 sec)mysql> select t, srcuser,-> concat (floor((size + 1023)/1024), 'K') as size_in_K-> from mail where size > 50000-> order by size_in_K;
+---------------------+---------+-----------+
| t                   | srcuser | size_in_K |
+---------------------+---------+-----------+
| 2006-05-12 12:48:13 | tricia  | 191K      |
| 2006-05-14 17:03:01 | tricia  | 2339K     |
| 2006-05-11 10:15:08 | barb    | 57K       |
| 2006-05-14 14:42:21 | barb    | 96K       |
| 2006-05-15 10:25:52 | gene    | 976K      |
+---------------------+---------+-----------+
5 rows in set (0.00 sec)mysql> select t, srcuser,-> concat(floor((size+1023)/1024), 'K') as size_in_K-> from mail where size > 50000-> order by size;
+---------------------+---------+-----------+
| t                   | srcuser | size_in_K |
+---------------------+---------+-----------+
| 2006-05-11 10:15:08 | barb    | 57K       |
| 2006-05-14 14:42:21 | barb    | 96K       |
| 2006-05-12 12:48:13 | tricia  | 191K      |
| 2006-05-15 10:25:52 | gene    | 976K      |
| 2006-05-14 17:03:01 | tricia  | 2339K     |
+---------------------+---------+-----------+
5 rows in set (0.00 sec)mysql> select * from roster;
+-----------+------------+
| name      | jersey_num |
+-----------+------------+
| Elizabeth | 100        |
| Ella      | 0          |
| Jean      | 8          |
| Lynne     | 29         |
| Nancy     | 00         |
| Sherry    | 47         |
+-----------+------------+
6 rows in set (0.01 sec)mysql> select name, jersey_num from roster;
+-----------+------------+
| name      | jersey_num |
+-----------+------------+
| Elizabeth | 100        |
| Ella      | 0          |
| Jean      | 8          |
| Lynne     | 29         |
| Nancy     | 00         |
| Sherry    | 47         |
+-----------+------------+
6 rows in set (0.00 sec)mysql> select name, jersey_num from roster order by jersey_num;
+-----------+------------+
| name      | jersey_num |
+-----------+------------+
| Ella      | 0          |
| Nancy     | 00         |
| Elizabeth | 100        |
| Lynne     | 29         |
| Sherry    | 47         |
| Jean      | 8          |
+-----------+------------+
6 rows in set (0.00 sec)mysql> select name, jersey_num from roster order by jersey_num+0;
+-----------+------------+
| name      | jersey_num |
+-----------+------------+
| Ella      | 0          |
| Nancy     | 00         |
| Jean      | 8          |
| Lynne     | 29         |
| Sherry    | 47         |
| Elizabeth | 100        |
+-----------+------------+
6 rows in set (0.00 sec)mysql> select t, concat(srcuser, '@', srchost) as sender, size-> from mail where size > 50000-> order by srchost, srcuser;
+---------------------+---------------+---------+
| t                   | sender        | size    |
+---------------------+---------------+---------+
| 2006-05-15 10:25:52 | gene@mars     |  998532 |
| 2006-05-12 12:48:13 | tricia@mars   |  194925 |
| 2006-05-11 10:15:08 | barb@saturn   |   58274 |
| 2006-05-14 17:03:01 | tricia@saturn | 2394482 |
| 2006-05-14 14:42:21 | barb@venus    |   98151 |
+---------------------+---------------+---------+
5 rows in set (0.00 sec)mysql> select last_name, first_name from name-> order by last_name, first_name;
+-----------+------------+
| last_name | first_name |
+-----------+------------+
| Blue      | Vida       |
| Brown     | Kevin      |
| Gray      | Pete       |
| White     | Devon      |
| White     | Rondell    |
+-----------+------------+
5 rows in set (0.01 sec)mysql> select concat(first_name, ' ', last_name) as full_name-> from name-> order by last_name, first_name;
+---------------+
| full_name     |
+---------------+
| Vida Blue     |
| Kevin Brown   |
| Pete Gray     |
| Devon White   |
| Rondell White |
+---------------+
5 rows in set (0.00 sec)

7.4 字符串排序的大小写区分控制

mysql> select * from str_val;
+--------+--------+------------------+
| ci_str | cs_str | bin_str          |
+--------+--------+------------------+
| AAA    | AAA    | 0x414141         |
| aaa    | aaa    | 0x616161         |
| bbb    | bbb    | 0x626262         |
| BBB    | BBB    | 0x424242         |
+--------+--------+------------------+
4 rows in set (0.03 sec)mysql> select ci_str from str_val order by ci_str;
+--------+
| ci_str |
+--------+
| AAA    |
| aaa    |
| bbb    |
| BBB    |
+--------+
4 rows in set (0.00 sec)mysql> select cs_str from str_val order by cs_str;
+--------+
| cs_str |
+--------+
| aaa    |
| AAA    |
| bbb    |
| BBB    |
+--------+
4 rows in set (0.00 sec)mysql> select bin_str from str_val order by bin_str;
+------------------+
| bin_str          |
+------------------+
| 0x414141         |
| 0x424242         |
| 0x616161         |
| 0x626262         |
+------------------+
4 rows in set (0.00 sec)mysql> select bin_str from str_val-> order by convert(bin_str using latin1) collate latin1_swedish_ci;
+------------------+
| bin_str          |
+------------------+
| 0x414141         |
| 0x616161         |
| 0x626262         |
| 0x424242         |
+------------------+
4 rows in set (0.02 sec)

7.5 基于日期的排序

--建表
drop table if exists temporal_val;create table temporal_val
(d   date,dt  datetime,t   time,ts  timestamp
);# 初始化数据
insert into temporal_val (d, dt, t, ts)values('1970-01-01','1884-01-01 12:00:00','13:00:00','1980-01-01 02:00:00'),('1999-01-01','1860-01-01 12:00:00','19:00:00','2021-01-01 03:00:00'),('1981-01-01','1871-01-01 12:00:00','03:00:00','1975-01-01 04:00:00'),
('1964-01-01','1899-01-01 12:00:00','01:00:00','1985-01-01 05:00:00');mysql> select * from temporal_val;
+------------+---------------------+----------+---------------------+
| d          | dt                  | t        | ts                  |
+------------+---------------------+----------+---------------------+
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 1980-01-01 02:00:00 |
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 2021-01-01 03:00:00 |
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 1975-01-01 04:00:00 |
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 1985-01-01 05:00:00 |
+------------+---------------------+----------+---------------------+
4 rows in set (0.00 sec)mysql> select * from temporal_val order by d;
+------------+---------------------+----------+---------------------+
| d          | dt                  | t        | ts                  |
+------------+---------------------+----------+---------------------+
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 1985-01-01 05:00:00 |
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 1980-01-01 02:00:00 |
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 1975-01-01 04:00:00 |
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 2021-01-01 03:00:00 |
+------------+---------------------+----------+---------------------+
4 rows in set (0.00 sec)mysql> select * from temporal_val order by dt;
+------------+---------------------+----------+---------------------+
| d          | dt                  | t        | ts                  |
+------------+---------------------+----------+---------------------+
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 2021-01-01 03:00:00 |
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 1975-01-01 04:00:00 |
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 1980-01-01 02:00:00 |
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 1985-01-01 05:00:00 |
+------------+---------------------+----------+---------------------+
4 rows in set (0.00 sec)mysql> select * from temporal_val order by t;
+------------+---------------------+----------+---------------------+
| d          | dt                  | t        | ts                  |
+------------+---------------------+----------+---------------------+
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 1985-01-01 05:00:00 |
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 1975-01-01 04:00:00 |
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 1980-01-01 02:00:00 |
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 2021-01-01 03:00:00 |
+------------+---------------------+----------+---------------------+
4 rows in set (0.00 sec)mysql> select * from temporal_val order by ts;
+------------+---------------------+----------+---------------------+
| d          | dt                  | t        | ts                  |
+------------+---------------------+----------+---------------------+
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 1975-01-01 04:00:00 |
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 1980-01-01 02:00:00 |
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 1985-01-01 05:00:00 |
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 2021-01-01 03:00:00 |
+------------+---------------------+----------+---------------------+
4 rows in set (0.00 sec)

7.6 按日历排序

--建表
drop table if exists event;
create table event
(date        date,description varchar(255)
)
;--初始化表
insert into event (date,description)values('1789-07-04','US Independence Day'),('1776-07-14','Bastille Day'),('1957-10-04','Sputnik launch date'),('1958-01-31','Explorer 1 launch date'),('1919-06-28','Signing of the Treaty of Versailles'),('1732-02-22','George Washington\'s birthday'),('1989-11-09','Opening of the Berlin Wall'),('1944-06-06','D-Day at Normandy Beaches'),('1215-06-15','Signing of the Magna Carta'),('1809-02-12','Abraham Lincoln\'s birthday')
;mysql> select date, description from event-> order by month(date), dayofmonth(date);
+------------+-------------------------------------+
| date       | description                         |
+------------+-------------------------------------+
| 1958-01-31 | Explorer 1 launch date              |
| 1809-02-12 | Abraham Lincoln's birthday          |
| 1732-02-22 | George Washington's birthday        |
| 1944-06-06 | D-Day at Normandy Beaches           |
| 1215-06-15 | Signing of the Magna Carta          |
| 1919-06-28 | Signing of the Treaty of Versailles |
| 1789-07-04 | US Independence Day                 |
| 1776-07-14 | Bastille Day                        |
| 1957-10-04 | Sputnik launch date                 |
| 1989-11-09 | Opening of the Berlin Wall          |
+------------+-------------------------------------+
10 rows in set (0.01 sec)mysql> select date, description from event order by dayofyear(date);
+------------+-------------------------------------+
| date       | description                         |
+------------+-------------------------------------+
| 1958-01-31 | Explorer 1 launch date              |
| 1809-02-12 | Abraham Lincoln's birthday          |
| 1732-02-22 | George Washington's birthday        |
| 1944-06-06 | D-Day at Normandy Beaches           |
| 1215-06-15 | Signing of the Magna Carta          |
| 1919-06-28 | Signing of the Treaty of Versailles |
| 1789-07-04 | US Independence Day                 |
| 1776-07-14 | Bastille Day                        |
| 1957-10-04 | Sputnik launch date                 |
| 1989-11-09 | Opening of the Berlin Wall          |
+------------+-------------------------------------+
10 rows in set (0.00 sec)mysql> select dayofyear('1996-02-29'), dayofyear('1997-03-01');
+-------------------------+-------------------------+
| dayofyear('1996-02-29') | dayofyear('1997-03-01') |
+-------------------------+-------------------------+
|                      60 |                      60 |
+-------------------------+-------------------------+
1 row in set (0.00 sec)

7.7 按周历排序

mysql> select dayname(date) as day, date, description-> from event-> order by dayofweek(date);
+----------+------------+-------------------------------------+
| day      | date       | description                         |
+----------+------------+-------------------------------------+
| Sunday   | 1776-07-14 | Bastille Day                        |
| Sunday   | 1809-02-12 | Abraham Lincoln's birthday          |
| Monday   | 1215-06-15 | Signing of the Magna Carta          |
| Tuesday  | 1944-06-06 | D-Day at Normandy Beaches           |
| Thursday | 1989-11-09 | Opening of the Berlin Wall          |
| Friday   | 1957-10-04 | Sputnik launch date                 |
| Friday   | 1958-01-31 | Explorer 1 launch date              |
| Friday   | 1732-02-22 | George Washington's birthday        |
| Saturday | 1789-07-04 | US Independence Day                 |
| Saturday | 1919-06-28 | Signing of the Treaty of Versailles |
+----------+------------+-------------------------------------+
10 rows in set (0.01 sec)mysql> select dayname(date), date, description-> from event-> order by mod(dayofweek(date)+5, 7);
+---------------+------------+-------------------------------------+
| dayname(date) | date       | description                         |
+---------------+------------+-------------------------------------+
| Monday        | 1215-06-15 | Signing of the Magna Carta          |
| Tuesday       | 1944-06-06 | D-Day at Normandy Beaches           |
| Thursday      | 1989-11-09 | Opening of the Berlin Wall          |
| Friday        | 1957-10-04 | Sputnik launch date                 |
| Friday        | 1958-01-31 | Explorer 1 launch date              |
| Friday        | 1732-02-22 | George Washington's birthday        |
| Saturday      | 1789-07-04 | US Independence Day                 |
| Saturday      | 1919-06-28 | Signing of the Treaty of Versailles |
| Sunday        | 1776-07-14 | Bastille Day                        |
| Sunday        | 1809-02-12 | Abraham Lincoln's birthday          |
+---------------+------------+-------------------------------------+
10 rows in set (0.01 sec)

7.8 按时钟排序

mysql> select * from mail order by hour(t), minute(t),second(t);
+---------------------+---------+---------+---------+---------+---------+
| t                   | srcuser | srchost | dstuser | dsthost | size    |
+---------------------+---------+---------+---------+---------+---------+
| 2006-05-15 07:17:48 | gene    | mars    | gene    | saturn  |    3824 |
| 2006-05-15 08:50:57 | phil    | venus   | phil    | venus   |     978 |
| 2006-05-16 09:00:28 | gene    | venus   | barb    | mars    |     613 |
| 2006-05-14 09:31:37 | gene    | venus   | barb    | mars    |    2291 |
| 2006-05-11 10:15:08 | barb    | saturn  | tricia  | mars    |   58274 |
| 2006-05-15 10:25:52 | gene    | mars    | tricia  | saturn  |  998532 |
| 2006-05-14 11:52:17 | phil    | mars    | tricia  | saturn  |    5781 |
| 2006-05-12 12:48:13 | tricia  | mars    | gene    | venus   |  194925 |
| 2006-05-17 12:49:23 | phil    | mars    | tricia  | saturn  |     873 |
| 2006-05-13 13:59:18 | barb    | saturn  | tricia  | venus   |     271 |
| 2006-05-14 14:42:21 | barb    | venus   | barb    | venus   |   98151 |
| 2006-05-12 15:02:49 | phil    | mars    | phil    | saturn  |    1048 |
| 2006-05-14 17:03:01 | tricia  | saturn  | phil    | venus   | 2394482 |
| 2006-05-15 17:35:31 | gene    | saturn  | gene    | mars    |    3856 |
| 2006-05-19 22:21:51 | gene    | saturn  | gene    | venus   |   23992 |
| 2006-05-16 23:04:19 | phil    | venus   | barb    | venus   |   10294 |
+---------------------+---------+---------+---------+---------+---------+
16 rows in set (0.01 sec)mysql> select * from mail order by time_to_sec(t);
+---------------------+---------+---------+---------+---------+---------+
| t                   | srcuser | srchost | dstuser | dsthost | size    |
+---------------------+---------+---------+---------+---------+---------+
| 2006-05-15 07:17:48 | gene    | mars    | gene    | saturn  |    3824 |
| 2006-05-15 08:50:57 | phil    | venus   | phil    | venus   |     978 |
| 2006-05-16 09:00:28 | gene    | venus   | barb    | mars    |     613 |
| 2006-05-14 09:31:37 | gene    | venus   | barb    | mars    |    2291 |
| 2006-05-11 10:15:08 | barb    | saturn  | tricia  | mars    |   58274 |
| 2006-05-15 10:25:52 | gene    | mars    | tricia  | saturn  |  998532 |
| 2006-05-14 11:52:17 | phil    | mars    | tricia  | saturn  |    5781 |
| 2006-05-12 12:48:13 | tricia  | mars    | gene    | venus   |  194925 |
| 2006-05-17 12:49:23 | phil    | mars    | tricia  | saturn  |     873 |
| 2006-05-13 13:59:18 | barb    | saturn  | tricia  | venus   |     271 |
| 2006-05-14 14:42:21 | barb    | venus   | barb    | venus   |   98151 |
| 2006-05-12 15:02:49 | phil    | mars    | phil    | saturn  |    1048 |
| 2006-05-14 17:03:01 | tricia  | saturn  | phil    | venus   | 2394482 |
| 2006-05-15 17:35:31 | gene    | saturn  | gene    | mars    |    3856 |
| 2006-05-19 22:21:51 | gene    | saturn  | gene    | venus   |   23992 |
| 2006-05-16 23:04:19 | phil    | venus   | barb    | venus   |   10294 |
+---------------------+---------+---------+---------+---------+---------+
16 rows in set (0.00 sec)

7.9 按数据列的子串排序

--创建表、初始化数据
drop table if exists housewares;
create table housewares
(id      VARCHAR(20),description VARCHAR(255)
);insert into housewares (id,description)values('DIN40672US', 'dining table'),('KIT00372UK', 'garbage disposal'),('KIT01729JP', 'microwave oven'),('BED00038SG', 'bedside lamp'),('BTH00485US', 'shower stall'),('BTH00415JP', 'lavatory')
;select * from housewares;drop table if exists  housewares2;
create table housewares2
(id      varchar(20),description varchar(255)
);insert into housewares2 (id,description)values('DIN40672US', 'dining table'),('KIT372UK', 'garbage disposal'),('KIT1729JP', 'microwave oven'),('BED38SG', 'bedside lamp'),('BTH485US', 'shower stall'),('BTH415JP', 'lavatory')
;
mysql> select * from housewares2;
+------------+------------------+
| id         | description      |
+------------+------------------+
| DIN40672US | dining table     |
| KIT372UK   | garbage disposal |
| KIT1729JP  | microwave oven   |
| BED38SG    | bedside lamp     |
| BTH485US   | shower stall     |
| BTH415JP   | lavatory         |
+------------+------------------+
6 rows in set (0.00 sec)mysql> drop table if exists housewares3;
Query OK, 0 rows affected (0.05 sec)mysql> create table housewares3-> (->   id      VARCHAR(20),->   description VARCHAR(255)-> );
Query OK, 0 rows affected (0.04 sec)mysql>
mysql> insert into housewares3 (id,description)->   VALUES->     ('13-478-92-2', 'dining table'),->     ('873-48-649-63', 'garbage disposal'),->     ('8-4-2-1', 'microwave oven'),->     ('97-681-37-66', 'bedside lamp'),->     ('27-48-534-2', 'shower stall'),->     ('5764-56-89-72', 'lavatory')-> ;
Query OK, 6 rows affected (0.02 sec)
Records: 6  Duplicates: 0  Warnings: 0mysql>
mysql> select * from housewares3;
+---------------+------------------+
| id            | description      |
+---------------+------------------+
| 13-478-92-2   | dining table     |
| 873-48-649-63 | garbage disposal |
| 8-4-2-1       | microwave oven   |
| 97-681-37-66  | bedside lamp     |
| 27-48-534-2   | shower stall     |
| 5764-56-89-72 | lavatory         |
+---------------+------------------+
6 rows in set (0.00 sec)mysql> drop table if exists hw_category;
Query OK, 0 rows affected (0.04 sec)mysql> create table hw_category-> (->   abbrev  VARCHAR(3),->   name  VARCHAR(20)-> );
Query OK, 0 rows affected (0.06 sec)mysql>
mysql> insert into hw_category (abbrev,name)->   values->     ('DIN', 'dining'),->     ('KIT', 'kitchen'),->     ('BTH', 'bathroom'),->     ('BED', 'bedroom')-> ;
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0mysql>
mysql> select * from hw_category;
+--------+----------+
| abbrev | name     |
+--------+----------+
| DIN    | dining   |
| KIT    | kitchen  |
| BTH    | bathroom |
| BED    | bedroom  |
+--------+----------+
4 rows in set (0.00 sec)

7.10 按固定长度的子串排序

mysql> select * from housewares;
+------------+------------------+
| id         | description      |
+------------+------------------+
| DIN40672US | dining table     |
| KIT00372UK | garbage disposal |
| KIT01729JP | microwave oven   |
| BED00038SG | bedside lamp     |
| BTH00485US | shower stall     |
| BTH00415JP | lavatory         |
+------------+------------------+
6 rows in set (0.00 sec)mysql> select * from housewares order by id;
+------------+------------------+
| id         | description      |
+------------+------------------+
| BED00038SG | bedside lamp     |
| BTH00415JP | lavatory         |
| BTH00485US | shower stall     |
| DIN40672US | dining table     |
| KIT00372UK | garbage disposal |
| KIT01729JP | microwave oven   |
+------------+------------------+
6 rows in set (0.00 sec)mysql> select id,-> left(id, 3) as category,-> mid(id, 4, 5) as serial,-> right(id, 2) as country-> from housewares;
+------------+----------+--------+---------+
| id         | category | serial | country |
+------------+----------+--------+---------+
| DIN40672US | DIN      | 40672  | US      |
| KIT00372UK | KIT      | 00372  | UK      |
| KIT01729JP | KIT      | 01729  | JP      |
| BED00038SG | BED      | 00038  | SG      |
| BTH00485US | BTH      | 00485  | US      |
| BTH00415JP | BTH      | 00415  | JP      |
+------------+----------+--------+---------+
6 rows in set (0.00 sec)mysql> select * from housewares order by left(id, 3);
+------------+------------------+
| id         | description      |
+------------+------------------+
| BED00038SG | bedside lamp     |
| BTH00485US | shower stall     |
| BTH00415JP | lavatory         |
| DIN40672US | dining table     |
| KIT00372UK | garbage disposal |
| KIT01729JP | microwave oven   |
+------------+------------------+
6 rows in set (0.00 sec)mysql> select * from housewares order by mid(id, 4, 5);
+------------+------------------+
| id         | description      |
+------------+------------------+
| BED00038SG | bedside lamp     |
| KIT00372UK | garbage disposal |
| BTH00415JP | lavatory         |
| BTH00485US | shower stall     |
| KIT01729JP | microwave oven   |
| DIN40672US | dining table     |
+------------+------------------+
6 rows in set (0.00 sec)mysql> select * from housewares order by right(id, 2);
+------------+------------------+
| id         | description      |
+------------+------------------+
| KIT01729JP | microwave oven   |
| BTH00415JP | lavatory         |
| BED00038SG | bedside lamp     |
| KIT00372UK | garbage disposal |
| DIN40672US | dining table     |
| BTH00485US | shower stall     |
+------------+------------------+
6 rows in set (0.00 sec)mysql> select * from housewares order by right(id, 2), mid(id, 4, 5);
+------------+------------------+
| id         | description      |
+------------+------------------+
| BTH00415JP | lavatory         |
| KIT01729JP | microwave oven   |
| BED00038SG | bedside lamp     |
| KIT00372UK | garbage disposal |
| BTH00485US | shower stall     |
| DIN40672US | dining table     |
+------------+------------------+
6 rows in set (0.00 sec)

7.11 按可变长度的子串排序

mysql> select * from housewares2;
+------------+------------------+
| id         | description      |
+------------+------------------+
| DIN40672US | dining table     |
| KIT372UK   | garbage disposal |
| KIT1729JP  | microwave oven   |
| BED38SG    | bedside lamp     |
| BTH485US   | shower stall     |
| BTH415JP   | lavatory         |
+------------+------------------+
6 rows in set (0.00 sec)mysql> select id, left(substring(id, 4), char_length(substring(id, 4))-2) from housewares2;
+------------+---------------------------------------------------------+
| id         | left(substring(id, 4), char_length(substring(id, 4))-2) |
+------------+---------------------------------------------------------+
| DIN40672US | 40672                                                   |
| KIT372UK   | 372                                                     |
| KIT1729JP  | 1729                                                    |
| BED38SG    | 38                                                      |
| BTH485US   | 485                                                     |
| BTH415JP   | 415                                                     |
+------------+---------------------------------------------------------+
6 rows in set (0.01 sec)mysql> select id, substring(id, 4), substring(id, 4, char_length(id)-5) from housewares2;
+------------+------------------+-------------------------------------+
| id         | substring(id, 4) | substring(id, 4, char_length(id)-5) |
+------------+------------------+-------------------------------------+
| DIN40672US | 40672US          | 40672                               |
| KIT372UK   | 372UK            | 372                                 |
| KIT1729JP  | 1729JP           | 1729                                |
| BED38SG    | 38SG             | 38                                  |
| BTH485US   | 485US            | 485                                 |
| BTH415JP   | 415JP            | 415                                 |
+------------+------------------+-------------------------------------+
6 rows in set (0.00 sec)mysql> select * from housewares2 order by substring(id, 4, char_length(id)-5);
+------------+------------------+
| id         | description      |
+------------+------------------+
| KIT1729JP  | microwave oven   |
| KIT372UK   | garbage disposal |
| BED38SG    | bedside lamp     |
| DIN40672US | dining table     |
| BTH415JP   | lavatory         |
| BTH485US   | shower stall     |
+------------+------------------+
6 rows in set (0.00 sec)mysql>
mysql> select * from housewares2 order by substring(id, 4, char_length(id)-5);
+------------+------------------+
| id         | description      |
+------------+------------------+
| KIT1729JP  | microwave oven   |
| KIT372UK   | garbage disposal |
| BED38SG    | bedside lamp     |
| DIN40672US | dining table     |
| BTH415JP   | lavatory         |
| BTH485US   | shower stall     |
+------------+------------------+
6 rows in set (0.00 sec)mysql> select * from housewares2 order by substring(id, 4, char_length(id)-5)+0;
+------------+------------------+
| id         | description      |
+------------+------------------+
| BED38SG    | bedside lamp     |
| KIT372UK   | garbage disposal |
| BTH415JP   | lavatory         |
| BTH485US   | shower stall     |
| KIT1729JP  | microwave oven   |
| DIN40672US | dining table     |
+------------+------------------+
6 rows in set (0.00 sec)mysql> select *, substring(id, 4, char_length(id)-5)+0 from housewares2 order by substring(id, 4, char_length(id)-5)+0;
+------------+------------------+---------------------------------------+
| id         | description      | substring(id, 4, char_length(id)-5)+0 |
+------------+------------------+---------------------------------------+
| BED38SG    | bedside lamp     |                                    38 |
| KIT372UK   | garbage disposal |                                   372 |
| BTH415JP   | lavatory         |                                   415 |
| BTH485US   | shower stall     |                                   485 |
| KIT1729JP  | microwave oven   |                                  1729 |
| DIN40672US | dining table     |                                 40672 |
+------------+------------------+---------------------------------------+
6 rows in set (0.00 sec)mysql> select * from housewares2 order by substring(id, 4)+0;
+------------+------------------+
| id         | description      |
+------------+------------------+
| BED38SG    | bedside lamp     |
| KIT372UK   | garbage disposal |
| BTH415JP   | lavatory         |
| BTH485US   | shower stall     |
| KIT1729JP  | microwave oven   |
| DIN40672US | dining table     |
+------------+------------------+
6 rows in set, 6 warnings (0.00 sec)mysql>
mysql> select * from housewares3;
+---------------+------------------+
| id            | description      |
+---------------+------------------+
| 13-478-92-2   | dining table     |
| 873-48-649-63 | garbage disposal |
| 8-4-2-1       | microwave oven   |
| 97-681-37-66  | bedside lamp     |
| 27-48-534-2   | shower stall     |
| 5764-56-89-72 | lavatory         |
+---------------+------------------+
6 rows in set (0.00 sec)mysql> select id, substring_index(substring_index(id, '-', 2), '-', -1) as segment2,->         substring_index(substring_index(id, '-', 4), '-', -1) as segment4-> from housewares3;
+---------------+----------+----------+
| id            | segment2 | segment4 |
+---------------+----------+----------+
| 13-478-92-2   | 478      | 2        |
| 873-48-649-63 | 48       | 63       |
| 8-4-2-1       | 4        | 1        |
| 97-681-37-66  | 681      | 66       |
| 27-48-534-2   | 48       | 2        |
| 5764-56-89-72 | 56       | 72       |
+---------------+----------+----------+
6 rows in set (0.00 sec)mysql>
mysql> select * from housewares3 order by substring_index(substring_index(id, '-', 2), '-', -1);
+---------------+------------------+
| id            | description      |
+---------------+------------------+
| 8-4-2-1       | microwave oven   |
| 13-478-92-2   | dining table     |
| 873-48-649-63 | garbage disposal |
| 27-48-534-2   | shower stall     |
| 5764-56-89-72 | lavatory         |
| 97-681-37-66  | bedside lamp     |
+---------------+------------------+
6 rows in set (0.00 sec)mysql> select * from housewares3 order by substring_index(substring_index(id, '-', 2), '-', -1)+0;
+---------------+------------------+
| id            | description      |
+---------------+------------------+
| 8-4-2-1       | microwave oven   |
| 873-48-649-63 | garbage disposal |
| 27-48-534-2   | shower stall     |
| 5764-56-89-72 | lavatory         |
| 13-478-92-2   | dining table     |
| 97-681-37-66  | bedside lamp     |
+---------------+------------------+
6 rows in set (0.00 sec)

7.12 按域名顺序排列主机名

mysql> drop table if exists hostname;
Query OK, 0 rows affected (0.04 sec)mysql> create table hostname-> (->   name  varchar(64)-> );
Query OK, 0 rows affected (0.06 sec)mysql> insert into hostname (name)->   values->     ('cvs.php.net'),->     ('dbi.perl.org'),->     ('lists.mysql.com'),->     ('mysql.com'),->     ('jakarta.apache.org'),->     ('www.kitebird.com')-> ;
Query OK, 6 rows affected (0.01 sec)
Records: 6  Duplicates: 0  Warnings: 0mysql> select * from hostname;
+--------------------+
| name               |
+--------------------+
| cvs.php.net        |
| dbi.perl.org       |
| lists.mysql.com    |
| mysql.com          |
| jakarta.apache.org |
| www.kitebird.com   |
+--------------------+
6 rows in set (0.00 sec)mysql>
mysql> select name from hostname order by name;
+--------------------+
| name               |
+--------------------+
| cvs.php.net        |
| dbi.perl.org       |
| jakarta.apache.org |
| lists.mysql.com    |
| mysql.com          |
| www.kitebird.com   |
+--------------------+
6 rows in set (0.00 sec)mysql> select name, substring_index(substring_index(name, '.', -3), '.', 1) as leftmost,->         substring_index(substring_index(name, '.', -2), '.', 1) as middle,->         substring_index(name, '.', -1) as rightmost-> from hostname-> ;
+--------------------+----------+----------+-----------+
| name               | leftmost | middle   | rightmost |
+--------------------+----------+----------+-----------+
| cvs.php.net        | cvs      | php      | net       |
| dbi.perl.org       | dbi      | perl     | org       |
| lists.mysql.com    | lists    | mysql    | com       |
| mysql.com          | mysql    | mysql    | com       |
| jakarta.apache.org | jakarta  | apache   | org       |
| www.kitebird.com   | www      | kitebird | com       |
+--------------------+----------+----------+-----------+
6 rows in set (0.00 sec)mysql> select name, substring_index(substring_index(concat('..', name), '.', -3), '.', 1) as leftmost,->         substring_index(substring_index(concat('.', name), '.', -2), '.', 1) as middle,->         substring_index(name, '.', -1) as rightmost-> from hostname;
+--------------------+----------+----------+-----------+
| name               | leftmost | middle   | rightmost |
+--------------------+----------+----------+-----------+
| cvs.php.net        | cvs      | php      | net       |
| dbi.perl.org       | dbi      | perl     | org       |
| lists.mysql.com    | lists    | mysql    | com       |
| mysql.com          |          | mysql    | com       |
| jakarta.apache.org | jakarta  | apache   | org       |
| www.kitebird.com   | www      | kitebird | com       |
+--------------------+----------+----------+-----------+
6 rows in set (0.00 sec)mysql> select name from hostname-> order by-> substring_index(name, '.', -1),-> substring_index(substring_index(concat('.', name), '.', -2), '.', 1),-> substring_index(substring_index(concat('..', name), '.', -3), '.', 1);
+--------------------+
| name               |
+--------------------+
| www.kitebird.com   |
| mysql.com          |
| lists.mysql.com    |
| cvs.php.net        |
| jakarta.apache.org |
| dbi.perl.org       |
+--------------------+
6 rows in set (0.00 sec)

7.13 按照数字顺序排序点分式ip地址

mysql> drop table if exists hostip;
Query OK, 0 rows affected (0.06 sec)mysql> create table hostip-> (->   ip  varchar(64)-> );
Query OK, 0 rows affected (0.05 sec)mysql> insert into hostip (ip)->   values->     ('127.0.0.1'),->     ('192.168.0.2'),->     ('192.168.0.10'),->     ('192.168.1.2'),->     ('192.168.1.10'),->     ('255.255.255.255'),->     ('21.0.0.1')-> ;
Query OK, 7 rows affected (0.01 sec)
Records: 7  Duplicates: 0  Warnings: 0mysql> select * from hostip ORDER BY ip;
+-----------------+
| ip              |
+-----------------+
| 127.0.0.1       |
| 192.168.0.10    |
| 192.168.0.2     |
| 192.168.1.10    |
| 192.168.1.2     |
| 21.0.0.1        |
| 255.255.255.255 |
+-----------------+
7 rows in set (0.00 sec)mysql>
mysql> select ip from hostip-> order by-> substring_index(ip, '.', 1)+0,-> substring_index(substring_index(ip, '.', -3), '.', 1)+0,-> substring_index(substring_index(ip, '.', -2), '.', 1)+0,-> substring_index(ip, '.', -1)+0;
+-----------------+
| ip              |
+-----------------+
| 21.0.0.1        |
| 127.0.0.1       |
| 192.168.0.2     |
| 192.168.0.10    |
| 192.168.1.2     |
| 192.168.1.10    |
| 255.255.255.255 |
+-----------------+
7 rows in set (0.00 sec)mysql>
mysql> select ip from hostip order by inet_aton(ip);
+-----------------+
| ip              |
+-----------------+
| 21.0.0.1        |
| 127.0.0.1       |
| 192.168.0.2     |
| 192.168.0.10    |
| 192.168.1.2     |
| 192.168.1.10    |
| 255.255.255.255 |
+-----------------+
7 rows in set (0.00 sec)mysql>
mysql> select ip, ip+0 from hostip;
+-----------------+---------+
| ip              | ip+0    |
+-----------------+---------+
| 127.0.0.1       |     127 |
| 192.168.0.2     | 192.168 |
| 192.168.0.10    | 192.168 |
| 192.168.1.2     | 192.168 |
| 192.168.1.10    | 192.168 |
| 255.255.255.255 | 255.255 |
| 21.0.0.1        |      21 |
+-----------------+---------+
7 rows in set, 3 warnings (0.00 sec)

7.14 将数值移动到排序结果的头部或尾部

mysql> select null = null;
+-------------+
| null = null |
+-------------+
|        NULL |
+-------------+
1 row in set (0.00 sec)mysql> drop table if exists t;
Query OK, 0 rows affected (0.04 sec)mysql> create table t (->   val varchar(64)-> );
Query OK, 0 rows affected (0.04 sec)mysql> insert into t (val)->   values->     (3),->     (100),->     (null),->     (null),->     (9)-> ;
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0mysql> select val from t;
+------+
| val  |
+------+
| 3    |
| 100  |
| NULL |
| NULL |
| 9    |
+------+
5 rows in set (0.00 sec)mysql> select val from t order by val;
+------+
| val  |
+------+
| NULL |
| NULL |
| 100  |
| 3    |
| 9    |
+------+
5 rows in set (0.00 sec)mysql> select val from t order by if(val is null, 1, 0), val;
+------+
| val  |
+------+
| 100  |
| 3    |
| 9    |
| NULL |
| NULL |
+------+
5 rows in set (0.00 sec)mysql> select t, srcuser, dstuser, size-> from mail-> order by if(srcuser='phil', 0, 1), srcuser, dstuser;
+---------------------+---------+---------+---------+
| t                   | srcuser | dstuser | size    |
+---------------------+---------+---------+---------+
| 2006-05-16 23:04:19 | phil    | barb    |   10294 |
| 2006-05-12 15:02:49 | phil    | phil    |    1048 |
| 2006-05-15 08:50:57 | phil    | phil    |     978 |
| 2006-05-14 11:52:17 | phil    | tricia  |    5781 |
| 2006-05-17 12:49:23 | phil    | tricia  |     873 |
| 2006-05-14 14:42:21 | barb    | barb    |   98151 |
| 2006-05-11 10:15:08 | barb    | tricia  |   58274 |
| 2006-05-13 13:59:18 | barb    | tricia  |     271 |
| 2006-05-14 09:31:37 | gene    | barb    |    2291 |
| 2006-05-16 09:00:28 | gene    | barb    |     613 |
| 2006-05-15 07:17:48 | gene    | gene    |    3824 |
| 2006-05-15 17:35:31 | gene    | gene    |    3856 |
| 2006-05-19 22:21:51 | gene    | gene    |   23992 |
| 2006-05-15 10:25:52 | gene    | tricia  |  998532 |
| 2006-05-12 12:48:13 | tricia  | gene    |  194925 |
| 2006-05-14 17:03:01 | tricia  | phil    | 2394482 |
+---------------------+---------+---------+---------+
16 rows in set (0.00 sec)mysql>
mysql> select t, srcuser, dstuser, size-> from mail-> order by if(srcuser=dstuser, 0, 1), srcuser, dstuser;
+---------------------+---------+---------+---------+
| t                   | srcuser | dstuser | size    |
+---------------------+---------+---------+---------+
| 2006-05-14 14:42:21 | barb    | barb    |   98151 |
| 2006-05-15 07:17:48 | gene    | gene    |    3824 |
| 2006-05-15 17:35:31 | gene    | gene    |    3856 |
| 2006-05-19 22:21:51 | gene    | gene    |   23992 |
| 2006-05-12 15:02:49 | phil    | phil    |    1048 |
| 2006-05-15 08:50:57 | phil    | phil    |     978 |
| 2006-05-11 10:15:08 | barb    | tricia  |   58274 |
| 2006-05-13 13:59:18 | barb    | tricia  |     271 |
| 2006-05-14 09:31:37 | gene    | barb    |    2291 |
| 2006-05-16 09:00:28 | gene    | barb    |     613 |
| 2006-05-15 10:25:52 | gene    | tricia  |  998532 |
| 2006-05-16 23:04:19 | phil    | barb    |   10294 |
| 2006-05-14 11:52:17 | phil    | tricia  |    5781 |
| 2006-05-17 12:49:23 | phil    | tricia  |     873 |
| 2006-05-12 12:48:13 | tricia  | gene    |  194925 |
| 2006-05-14 17:03:01 | tricia  | phil    | 2394482 |
+---------------------+---------+---------+---------+
16 rows in set (0.00 sec)mysql>
mysql> select t, srcuser, dstuser, size-> from mail-> order by  if(srcuser=dstuser, null, srcuser), dstuser;
+---------------------+---------+---------+---------+
| t                   | srcuser | dstuser | size    |
+---------------------+---------+---------+---------+
| 2006-05-14 14:42:21 | barb    | barb    |   98151 |
| 2006-05-15 07:17:48 | gene    | gene    |    3824 |
| 2006-05-15 17:35:31 | gene    | gene    |    3856 |
| 2006-05-19 22:21:51 | gene    | gene    |   23992 |
| 2006-05-12 15:02:49 | phil    | phil    |    1048 |
| 2006-05-15 08:50:57 | phil    | phil    |     978 |
| 2006-05-11 10:15:08 | barb    | tricia  |   58274 |
| 2006-05-13 13:59:18 | barb    | tricia  |     271 |
| 2006-05-14 09:31:37 | gene    | barb    |    2291 |
| 2006-05-16 09:00:28 | gene    | barb    |     613 |
| 2006-05-15 10:25:52 | gene    | tricia  |  998532 |
| 2006-05-16 23:04:19 | phil    | barb    |   10294 |
| 2006-05-14 11:52:17 | phil    | tricia  |    5781 |
| 2006-05-17 12:49:23 | phil    | tricia  |     873 |
| 2006-05-12 12:48:13 | tricia  | gene    |  194925 |
| 2006-05-14 17:03:01 | tricia  | phil    | 2394482 |
+---------------------+---------+---------+---------+
16 rows in set (0.00 sec)

7.15 按照用户定义排序

mysql> select *, field(name, 'Henry', 'Suzi', 'Ben') from driver_log-> order by field(name, 'Henry', 'Suzi', 'Ben');
+--------+-------+------------+-------+-------------------------------------+
| rec_id | name  | trav_date  | miles | field(name, 'Henry', 'Suzi', 'Ben') |
+--------+-------+------------+-------+-------------------------------------+
|      3 | Henry | 2014-07-29 |   300 |                                   1 |
|      4 | Henry | 2014-07-27 |    96 |                                   1 |
|      6 | Henry | 2014-07-26 |   115 |                                   1 |
|      8 | Henry | 2014-08-01 |   197 |                                   1 |
|     10 | Henry | 2014-07-30 |   203 |                                   1 |
|      2 | Suzi  | 2014-07-29 |   391 |                                   2 |
|      7 | Suzi  | 2014-08-02 |   502 |                                   2 |
|      1 | Ben   | 2014-07-30 |   152 |                                   3 |
|      5 | Ben   | 2014-07-29 |   131 |                                   3 |
|      9 | Ben   | 2014-08-02 |    79 |                                   3 |
+--------+-------+------------+-------+-------------------------------------+
10 rows in set (0.01 sec)mysql>
mysql> select id, description, field(right(id, 2), 'US', 'UK', 'JP', 'SG') from housewares-> order by field(right(id, 2), 'US', 'UK', 'JP', 'SG');
+------------+------------------+---------------------------------------------+
| id         | description      | field(right(id, 2), 'US', 'UK', 'JP', 'SG') |
+------------+------------------+---------------------------------------------+
| DIN40672US | dining table     |                                           1 |
| BTH00485US | shower stall     |                                           1 |
| KIT00372UK | garbage disposal |                                           2 |
| KIT01729JP | microwave oven   |                                           3 |
| BTH00415JP | lavatory         |                                           3 |
| BED00038SG | bedside lamp     |                                           4 |
+------------+------------------+---------------------------------------------+
6 rows in set (0.00 sec)

7.16 排序枚举数值

mysql> select * from weekday;
+-----------+
| day       |
+-----------+
| Monday    |
| Friday    |
| Tuesday   |
| Sunday    |
| Thursday  |
| Saturday  |
| Wednesday |
+-----------+
7 rows in set (0.00 sec)mysql> select day, day+0 from weekday;
+-----------+-------+
| day       | day+0 |
+-----------+-------+
| Monday    |     2 |
| Friday    |     6 |
| Tuesday   |     3 |
| Sunday    |     1 |
| Thursday  |     5 |
| Saturday  |     7 |
| Wednesday |     4 |
+-----------+-------+
7 rows in set (0.00 sec)mysql> select day, day+0 from weekday order by day;
+-----------+-------+
| day       | day+0 |
+-----------+-------+
| Sunday    |     1 |
| Monday    |     2 |
| Tuesday   |     3 |
| Wednesday |     4 |
| Thursday  |     5 |
| Friday    |     6 |
| Saturday  |     7 |
+-----------+-------+
7 rows in set (0.00 sec)mysql> select day, day+0 from weekday order by cast(day as char);
+-----------+-------+
| day       | day+0 |
+-----------+-------+
| Friday    |     6 |
| Monday    |     2 |
| Saturday  |     7 |
| Sunday    |     1 |
| Thursday  |     5 |
| Tuesday   |     3 |
| Wednesday |     4 |
+-----------+-------+
7 rows in set (0.00 sec)mysql>
mysql> create table color-> (->    name char(10)-> );
Query OK, 0 rows affected (0.04 sec)mysql> insert into color (name)-> values('blue'),('green'),('indigo'),('orange'),('red'),('violet'),('yellow');
Query OK, 7 rows affected (0.01 sec)
Records: 7  Duplicates: 0  Warnings: 0mysql> select name from color;
+--------+
| name   |
+--------+
| blue   |
| green  |
| indigo |
| orange |
| red    |
| violet |
| yellow |
+--------+
7 rows in set (0.00 sec)mysql> select name from color order by name;
+--------+
| name   |
+--------+
| blue   |
| green  |
| indigo |
| orange |
| red    |
| violet |
| yellow |
+--------+
7 rows in set (0.00 sec)mysql> select name from color order by field(name, 'red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet');
+--------+
| name   |
+--------+
| red    |
| orange |
| yellow |
| green  |
| blue   |
| indigo |
| violet |
+--------+
7 rows in set (0.00 sec)mysql>
mysql> select name, field(name, 'red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet')-> from color-> order by field(name, 'red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet');
+--------+-----------------------------------------------------------------------------+
| name   | field(name, 'red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet') |
+--------+-----------------------------------------------------------------------------+
| red    |                                                                           1 |
| orange |                                                                           2 |
| yellow |                                                                           3 |
| green  |                                                                           4 |
| blue   |                                                                           5 |
| indigo |                                                                           6 |
| violet |                                                                           7 |
+--------+-----------------------------------------------------------------------------+
7 rows in set (0.00 sec)mysql>
mysql> alter table color-> modify name-> enum('red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet');
Query OK, 7 rows affected (0.10 sec)
Records: 7  Duplicates: 0  Warnings: 0mysql>
mysql> select name from color;
+--------+
| name   |
+--------+
| blue   |
| green  |
| indigo |
| orange |
| red    |
| violet |
| yellow |
+--------+
7 rows in set (0.00 sec)mysql> select name from color order by name;
+--------+
| name   |
+--------+
| red    |
| orange |
| yellow |
| green  |
| blue   |
| indigo |
| violet |
+--------+
7 rows in set (0.00 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从入门到精通:C# 中 AutoMapper 的深度解析与实战应用

在 C# 开发领域,尤其是企业级应用开发过程中,不同层次和模块之间的数据传递与对象转换是常见需求。例如,从数据库读取的实体类,在传递到前端时,往往需要转换为更简洁、安全的数据传输对象(DTO) …

【热更新知识】学习一 Lua语法学习

1、注释 1.1 单行注释 --注释内容 --单行注释 print打印函数 1.2 多行注释,三种方式 --[[注释内容]] --[[注释内容]]-- --[[注释内容--]] --[[ 多行 注释 ]]--[[ 第二种多行注释 1 2 ]]----[[ 第三种 多行 注释 --]] 2、简单变量 2.1 声明变量&#xff0c…

React 第三方状态管理库的比较与选择

在现代前端开发中,状态管理是一个重要的环节。选择合适的状态管理库可以极大地提高项目的可维护性和开发效率。本文将对几种流行的状态管理库进行比较,包括Valtio、XState、MobX、Recoil和Zustand,帮助开发者在实际项目中做出明智的选择。 1. Valtio 1.1. 设计理念 Valti…

《Kafka 在实时消息系统中的高可用架构设计》

Kafka 在实时消息系统中的高可用架构设计 引言 在当今互联网社交应用中,实时消息系统已成为核心基础设施。以中性互联网公司为例,其每天需要处理数十亿条消息,涵盖一对一聊天、群组互动、直播弹幕等多种场景。特别是在大型直播活动中&#…

SKUA-GOCAD入门教程-第八节 线的创建与编辑3

8.1.4根据面对象创建曲线 (1)从曲面生成曲线 从曲面边界生成曲线您可以从选定的曲面边界创建一条单段曲线。 1、选择 Curve commands > New > Borders > One 打开从曲面的一条边界创建曲线对话框。 图1 在“Name名称”框中,输入要创建的曲线的名称。

Unity编辑器-获取Projectwindow中拖拽内容的路径

参考 Unity Editor 实现给属性面板上拖拽赋值资源路径 API Event DragAndDrop 示例 Mono脚本 using UnityEngine; public class TestScene : MonoBehaviour {[SerializeField] string testName; }Editor脚本 重写InspectorGUI,在该函数中通过Event的Type参数获…

重要的城市(图论 最短路)

分析 a ≠ b的从a到B的最短路,才有重要城市。 求出最短路,才能确定重要城市。 是多源最短路,n ≤ 200,可用Floyd。 若a到b,只有一条最短路,那么 a到b的路径上的点(除了a、b)都是…

50种3D效果演示(OpenGL)

效果: 一、只需打开命令行(Windows 可用 cmd),输入: pip install PyQt5 PyOpenGL numpy二、用命令行进入保存 .py 文件的目录,运行: python openGL_3d_demo.py三、建立python文件命名openGL_3…

Java大模型开发入门 (6/15):对话的灵魂 - 深入理解LangChain4j中的模型、提示和解析器

前言 在上一篇文章中,我们见证了AiService注解的惊人威力。仅仅通过定义一个Java接口,我们就实现了一个功能完备的AI聊天服务。这感觉就像魔法一样! 但作为专业的工程师,我们知道“任何足够先进的技术,都与魔法无异”…

用Rust如何构建高性能爬虫

习惯了使用Python来写爬虫,如果使用Rust需要有哪些考量? 根据我了解的Rust 在性能、资源效率和并发处理方面完胜 Python,但是 Python 在开发速度和生态成熟度上占优。所以说,具体用那种模式,结合你项目特点做个详细的…

CentOS7报错:Cannot find a valid baseurl for repo: base/7/x86_64

这个错误通常出现在 CentOS/RHEL 7 系统中,当你尝试运行 yum update 或 yum install 时,系统无法连接到默认的软件仓库(repository)。 可能的原因 网络连接问题:系统无法访问互联网或仓库服务器。错误的仓库配置&…

云平台|Linux部分指令

目录 云平台 操作系统(镜像) 管理应用实例 远程连接 远程连接工具 linux相关命令(重点) 云平台 1、阿里云(学生免费,不包流量 流量0.8---1G) 2、腾讯云(抢) 3、华…

AI首次自主发现人工生命

转: 近日,人工智能领域迎来了一项革命性的突破。Transformer 论文作者之一的 Llion Jones 与前谷歌研究人员 David Ha 共同创立的人工智能公司 Sakana AI,联合MIT、OpenAI、瑞士AI实验室IDSIA等机构的研究人员,共同提出了一种名为…

Day.31

变量类型: name: str "Alice" age: int 30 height: float 1.75 is_student: bool False 注解: def add(a: int, b: int) -> int: return a b def greet(name: str) -> None: print(f"Hello, {name}") 定义矩形类&a…

光谱数据分析的方法有哪些?

光谱数据分析是通过特征光谱识别物质结构与成分的核心技术,其标准化流程如下: ‌一、数据预处理‌(消除干扰噪声) ‌去噪平滑‌ Savitzky-Golay滤波:保留光谱特征峰形,消除高频噪声。 移动平均法&#…

RabbitMQ的使用--Spring AMQP(更新中)

1.首先是创建项目 在一个父工程 mq_demo 的基础上建立两个子模块,生产者模块publisher,消费者模块 consumer 创建项目: 建立成功: 删除多余文件 创建子模块1:publisher(生产者模块) 右键---…

DAY 31 文件的规范拆分和写法

浙大疏锦行 今日的示例代码包含2个部分 notebook文件夹内的ipynb文件,介绍下今天的思路项目文件夹中其他部分:拆分后的信贷项目,学习下如何拆分的,未来你看到的很多大项目都是类似的拆分方法 知识点回顾 规范的文件命名规范的文件…

EtherCAT至TCP/IP异构网络互联:施耐德M580 PLC对接倍福CX5140解决方案

一、项目背景与需求 某智能工厂致力于打造高度自动化的生产流水线,其中部分核心设备采用EtherCAT协议进行通信,以实现高速、高精度的控制,例如基于EtherCAT总线的倍福(Beckhoff)CX5140PLC,它能够快速响应设…

[学习] FIR多项滤波器的数学原理详解:从多相分解到高效实现(完整仿真代码)

FIR多项滤波器的数学原理详解:从多相分解到高效实现 文章目录 FIR多项滤波器的数学原理详解:从多相分解到高效实现引言一、FIR滤波器基础与多相分解原理1.1 FIR滤波器数学模型1.2 多相分解的数学推导1.3 多相分解的物理意义 二、插值应用中的数学原理2.1…

Java并发编程实战 Day 22:高性能无锁编程技术

【Java并发编程实战 Day 22】高性能无锁编程技术 文章简述 在高并发场景下,传统的锁机制(如synchronized、ReentrantLock)虽然能够保证线程安全,但在高竞争环境下容易引发性能瓶颈。本文深入探讨无锁编程技术,重点介绍…