從現實項目需求出發;mysql
有一張城市表;裏面有北京、上海、廣州、河北、天津、河南6座城市;sql
mysql> select * from bjy_order; +----+------+ | id | city | +----+------+ | 1 | 北京 | | 2 | 上海 | | 3 | 廣州 | | 4 | 河北 | | 5 | 天津 | | 6 | 河南 | +----+------+
要求是讓上海排第一個、天津排第二個;code
最簡單粗暴的方法就是添加一個order_number字段;用來標識順序的;而後經過order by order_number asc
排序排序
mysql> select * from bjy_order order by order_number asc; +----+------+--------------+ | id | city | order_number | +----+------+--------------+ | 2 | 上海 | 1 | | 5 | 天津 | 2 | | 1 | 北京 | 3 | | 3 | 廣州 | 4 | | 4 | 河北 | 5 | | 6 | 河南 | 6 | +----+------+--------------+
這麼作確實能知足需求;可是若是表裏面有中國所有的32個省呢?ci
再若是來個全國的縣市表幾百個數據呢?而咱們只是想讓某幾個值排最前面就行了;博客
就如人們大部分人只知道世界第一高峯是珠穆朗瑪峯而不去關注第二第三同樣;it
咱們應該首先想到的就是隻給須要排在前面的加上排序數字;其餘爲NULL;
class
mysql> select * from bjy_order; +----+------+--------------+ | id | city | order_number | +----+------+--------------+ | 1 | 北京 | NULL | | 2 | 上海 | 1 | | 3 | 廣州 | NULL | | 4 | 河北 | NULL | | 5 | 天津 | 2 | | 6 | 河南 | NULL | +----+------+--------------+
而後咱們order by一下;select
mysql> select * from bjy_order order by order_number asc; +----+------+--------------+ | id | city | order_number | +----+------+--------------+ | 1 | 北京 | NULL | | 3 | 廣州 | NULL | | 4 | 河北 | NULL | | 6 | 河南 | NULL | | 2 | 上海 | 1 | | 5 | 天津 | 2 | +----+------+--------------+
然而即將成功的時候讓人沮喪的事情發生了;那些爲NULL的排在在最前面;方法
OK;下面有請今天的主角出場來解決這個問題;
咱們來利用is null
把sql給稍微改造一下便可;
mysql> select * from bjy_order order by order_number is null,order_number asc; +----+------+--------------+ | id | city | order_number | +----+------+--------------+ | 2 | 上海 | 1 | | 5 | 天津 | 2 | | 1 | 北京 | NULL | | 3 | 廣州 | NULL | | 4 | 河北 | NULL | | 6 | 河南 | NULL | +----+------+--------------+
到此完美實現需求;