mysql中給查詢結果添加序號列

來源:互聯網
上載者:User

標籤:技術分享   傳參   inf   esc   全域   bubuko   思想   主鍵   顯示   

 

  成一個欄位(非表中欄位)用以記錄排序   【類比為oracle資料庫中的rownum】

    MySQL中一個表(表名:stuscore)

    欄位有:id(主鍵)、stuid(學號)、sname(學生姓名)、subject(課程名稱)、score(分數)

    

    列出數學成績排名 (要求顯示欄位:排名,姓名 , 課程名稱, 分數 , 學號)

    用於排名的欄位,查詢時此處將其用 pm表示

    

     select (@i:[email protected]+1)pm,s.* from stuscore s,(select @i:=0)t where s.subject=‘數學‘

    order by score desc;

    思想:事先定義一個變數,通過變數的遞加以及虛擬表的聯查達到產生序號的目的。

    select * from table1,table2 不加任何條件時,是把兩個表的資料笛卡爾積之後顯示,

    如上sql中的  t  這張表  其實就是 一條 i=0 的資料

    mysql預存程序中,定義變數有兩種方式:

    1、使用set或select直接賦值,變數名以 @開頭

      賦值符號:使用set 時可以用 “=“或者“:=”     但是使用select賦值時必須使用“:=”賦值

      例如: [email protected]=1;

    可以在一個會話的任何地方聲明,範圍是整個會話,稱為會話變數。

    mysql總變數不用事先聲明,在用的時候直接用@變數名 使用即可

   【先行記錄】

    2以 DECLARE 關鍵字聲明的變數,只能在預存程序中使用,稱為預存程序變數,例如:
          DECLARE var1 INT DEFAULT 0;

    主要用在預存程序中,或者是給儲存傳參數中

    兩者的區別是:

      在調用預存程序時,以DECLARE聲明的變數都會被初始化為 NULL。而會話變數(即@開頭的變數)則

      不會被再初始化,在一個會話內,只須初始化一次,之後在會話內都是對上一次計算的結果,就相當於在

      是這個會話內的全域變數。

    在預存程序中,使用動態語句,預先處理時,動態內容必須賦給一個會話變數。
    例:
      set @v_sql= sqltext;
      PREPARE stmt FROM @v_sql;  
      EXECUTE stmt;     
      DEALLOCATE PREPARE stmt;

  

 

mysql中給查詢結果添加序號列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.