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


 

  成一個字段(非表中字段)用以記錄排序   【類比為oracle數據庫中的rownum】

    MySQL中一個表(表名:stuscore)

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

    

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

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

    

     select (@i:=@i+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賦值時必須使用“:=”賦值

      例如: set@id=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;

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM