Mysql查詢結果顯示行號

2021-10-13 13:37:59 字數 2395 閱讀 8076

假設有這樣的資料

mysql> select id,name from students;

+----+----------+

| id | name |

+----+----------+

| 1 | zhangsan |

| 2 | lisi |

| 3 | wangwu |

| 4 | trx |

| 5 | pjf |

| 6 | wzm |

+----+----------+

再看

mysql> select @rownum:=0;

+------------+

| @rownum:=0 |

+------------+

| 0 |

+------------+

mysql> select @rownum:=1;

+------------+

| @rownum:=1 |

+------------+

| 1 |

+------------+

select @rownum:=0; 表示宣告了乙個叫rownum的變數並賦值為0,這個變數名是自定義的,在sql中我們可以對這個變數進行計算,如:

mysql> select (@rownum:=@rownum+1) as num from (select @rownum:=0) a;

+------+

| num |

+------+

| 1 |

+------+

mysql> select (@rownum:=@rownum+5) as num from (select @rownum:=0) a;

+------+

| num |

+------+

| 5 |

+------+

此時 (select @rownum:=0) a 相當於乙個臨時表,如果將它與students表進行連線將會得到:

mysql> select b.*,id,name from students a,(select @rownum:=0) b;

+------------+----+----------+

| @rownum:=0 | id | name |

+------------+----+----------+

| 0 | 1 | zhangsan |

| 0 | 2 | lisi |

| 0 | 3 | wangwu |

| 0 | 4 | trx |

| 0 | 5 | pjf |

| 0 | 6 | wzm |

+------------+----+----------+

可以看到,b表只有一條資料,與a表連線後就有了a表的6條資料,如果我們對自定義變數@rownum:進行+1操作,會有什麼效果呢?

mysql> select (@rownum:=@rownum+1) as num,id,name from students a,(select @rownum:=0) b;

+------+----+----------+

| num | id | name |

+------+----+----------+

| 1 | 1 | zhangsan |

| 2 | 2 | lisi |

| 3 | 3 | wangwu |

| 4 | 4 | trx |

| 5 | 5 | pjf |

| 6 | 6 | wzm |

+------+----+----------+

6 rows in set (0.00 sec)

這就達到了查詢結果帶行號的目的,我們推演一下兩個表連線的過程:

一開始自定義變數@rownum:=0,a表第一條資料(1,'zhangsan')與自定義變數join,不過我們取的是@rownum:=@rownum+1,即0+1,那麼最終就會得到(1,1,'zhangsan')

此時自定義變數@rownum:=1,a表第一條資料(2,'lisi')與自定義變數join,即1+1,那麼最終得到(2,2,'lisi')

....(以此類推)

由此,我們就能得到sql查詢帶行號的結果。

MySQL查詢顯示行號

oracle中有專門的rownum 顯示行號的函式,而mysql沒有專門的顯示行號函式,但可以通過用 rownum自定義變數顯示行號。主要 rownum rownum 1 rownum select rownum 0 as rn例 如果按照某個字段排序,行號會不規則排列,換成先排序,外層加上行號 s...

使用mysql查詢顯示行號

在oracle獲取記錄行號使用rownum獲取。但是在mysql中查詢顯示行號就沒這麼方面了 方法如下 select rowno rowno 1 as rowno,r.from t article r,select rowno 0 t定義乙個變數 rowno,讓它的初始值為0,每有一行,數值加1。然...

Mysql對查詢結果新增序列號

set rownum 0 select rownum rownum 1 as rownum,from table1 和 的區別?只有在set和update時才和 一樣,賦值的作用,其它都是等於的作用。鑑於此,用變數實現行號時,必須用 不只在set和update時時賦值的作用,在select也是賦值的...