2011年12月28日 星期三

[MySQL]2-15 宣告變數及其應用

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














其它文章

沒有留言:

張貼留言

標籤

Oracle (150) Oracle DB (144) Oracle_DB (143) Oracle SQL (135) JAVA (84) css-基本類 (65) MySQL (59) CSS Selector (58) jQuery (49) JavaScript-基本類 (39) Spring Boot (38) JavaScript (37) JavaScript HTML DOM (37) JavaScript-HTML_DOM (36) CSS3 (30) JAVA-基本類 (28) jQuery UI (27) Apache (23) Oracle GROUP BY (20) datepicker (20) Android (18) Oracle Date (17) c (17) JAVA-lang套件 (16) Linux (16) Oracle Sub Query (16) Spring-基本類 (16) jQuery-基本類 (16) MySQL-進階系列教學 (15) Android基本類 (14) Grails (14) Oracle join (14) SQLite (13) Spring (13) WIN7-基本類 (13) grails-基本類 (13) linux cent os (13) CKEditor (12) JAVA-流程控制類 (12) JAVA_Spring (12) PHP (11) Spring MVC (11) MySQL-基本系列教學 (10) Notepad (10) Notepad++ (10) SQLite for java (10) Windows (10) c/c++ (10) eclipse (9) jQuery-Selector (9) sqldeveloper (9) DB_Toad (8) JAVA_IDE_Eclipse (8) JavaScript-String類 (8) MySQL DB Toad (8) MySQL-DATE相關 (8) MySQL-函式相關 (8) Spring Bean (8) Android Studio (7) HTML5 (7) Hibernate (7) JAVA-OCWCD (7) JavaScript-陣列類 (7) Docker (6) JAVA-程式分享 (6) JAVA.util套件 (6) JavaScript-數學類 (6) MinGw (6) MySQL-其它類 (6) Servlet (6) centos (6) Apache_Tomcat (5) Apache套件_POI (5) CSS (5) JavaScript-Date物件 (5) JavaScript-其它類 (5) PostgreSQL (5) httpd (5) log4j (5) 基本資訊 (5) 開發工具 (5) CSS Properties (4) Dev-C++ (4) IntelliJ IDEA (4) Oracle DDL (4) Sublime (4) TortoiseSVN (4) apache_Maven (4) Android NDK (3) Eclipse IDE for C/C++ (3) Hibernate-基本類 (3) JAVA-問題 (3) JAVA-綀習分享 (3) JVM (3) Linux 指令 (3) Proxy Server (3) Spring Mobile (3) Spring web (3) Squid (3) VirtualBox (3) maven (3) zk (3) 生活其它 (3) Bootstrap (2) Filter (2) JAVA_IO (2) JAVA_其它_itext套件 (2) JBoss-問題 (2) JSP (2) Jboss (2) Listener (2) MySQL-語法快速查詢 (2) Spring AOP (2) Spring Batch (2) Spring Boot Actuator (2) Spring i18n (2) Subversive (2) Tomcat 8 (2) UML (2) WebJars (2) WinMerge (2) c++ (2) c語言綀習題 (2) jQuery Mobile (2) jQuery-事件處理 (2) jQuery-套件類 (2) putty (2) svn (2) weblogic (2) Apache_JMeter (1) Apache套件_BeanUtils (1) Apache套件_StringUtils (1) Base64 (1) Google API (1) HTML5-基本類 (1) Heap (1) JAVA 7 (1) JAVA SE 、JAVA EE、JAVA ME (1) JAVA 日期 (1) JAVA-OCJP (1) JAVA-WEB (1) JAVA_IDE (1) JAVA其它 (1) JBoss Server (1) JDK (1) JMX (1) JRE (1) Java RMI (1) Java String (1) Joda Time (1) Linux_其它 (1) MySQL教學 (1) Oracle_VirtualBox (1) SQL Server (1) SWT (1) Session (1) Stack (1) Struts 2 (1) Tool (1) ZK Studio (1) csv (1) grails-其它類 (1) jQuery-進階 (1) java mail (1) java web (1) java8 (1) jsoup (1) mockmvc (1) modules (1) tomcat (1) win10 (1) 其它類 (1) 圖片工具 (1) 模擬器 (1) 讀書分享 (1) 開發資訊 (1)

精選文章

初學 Java 的 HelloWorld 程式

撰寫一個JAVA程式 public class HelloWorld{ public static void main(String[ ] args){ System.out.println("我第一支Java程式!!"); } } ...