MySQL的變數長相為@zzzxxxyyy,小老鼠+你想取的名稱,整串@zzzxxxyyy為一個變數。 宣告分兩種,其一外在宣告,其二內在宣告 首先介紹內在宣告,以下將舉例講解︰ 先新增測試假資料 CREATE TABLE heyf_t10 ( empid INT , deptid INT , salary DECIMAL(10, 2) ); INSERT INTO heyf_t10 VALUES (1,10,5500.00), (2,10,4500.00), (3,20,1900.00), (4,20,4800.00), (5,40,6500.00), (6,40,14500.00), (7,40,44500.00), (8,50,6500.00), (9,50,7500.00); 接著,開始對這些假資料做操作,下方SQL中(SELECT @rownum := 0, @pdept := NULL , @rank := 0) AS a ,這裡就是做初步的變數宣告,而此變數宣告必須給初值,給值的符號為 := 中間不可空格,先宣告後就可以使用了。 SELECT          empid,          deptid,          salary,          rank FROM          (SELECT                   heyf_tmp.empid,                   heyf_tmp.deptid,                   heyf_tmp.salary,                   @rownum := @rownum+1 ,                   /*上句意義是,變數@rownum每歷經一筆資料都加1*/                   IF(@pdept = heyf_tmp.deptid, @rank := @rank+1, @rank := 1) AS rank,                   /*上句意義是,變數@pdept 如果等於deptid值則@rank+1,否則@rank 給值 1*/                   @pdept := heyf_tmp.deptid                   /*上句意義,變數@pdept給值deptid*/          FROM                   (SELECT @rownum := 0, @pdept := NULL , @rank := 0) AS a ,                   (SELECT                            empid,                            deptid,                            salary                   FROM                            heyf_t10                   ORDER BY                            deptid ASC ,salary DESC                   ) heyf_tmp          ) AS result 結果︰先依照deptid分組,再依照salary來做排序的動作。

以上是內部變數宣告的應用,其實會這樣用的SQL不多見,只是提供個方式可以這樣做而已


接下來介紹外部宣告 外部宣告意即會在主SQL外做額外的SET @zzzxxxyyy宣告的動作,以下將使用範例解說。 SET @A = '測試'; SELECT user.*, @A FROM user; 上下兩句是相同的,因為是額外的語句做宣告所以可以直接使用 = 號 SET @A := '測試'; SELECT user.*, @A FROM user; 結果︰@A可以接受到範例中的測試字樣,但其實可以接受任何值

 

內部宣告沒給初值會錯,外部宣告也會錯,但值得注意的是,內部一錯整句SQL都會錯導致無法執行,但外部宣告的情況將會演變成宣告式是錯的,底下的查詢卻正常運行,而該變數的值就會變成NULL SET @A; SELECT user.*, @A FROM user; 結果︰變數@A沒有得到任何值,皆顯示NULL

 

其它文章

文章標籤
全站熱搜
創作者介紹
創作者 PG Levin Li 的頭像
PG Levin Li

程式開發學習之路

PG Levin Li 發表在 痞客邦 留言(0) 人氣(6,194)