今天來學習一下MySQl的 臨時表,變數,行轉列,預處理的一些相關技術的使用!

jason發表於2020-09-01

先來簡單瞭解一下MySQL資料庫有意思的簡介

MySQL這個名字,起源不是很明確。一個比較有影響的說法是,基本指南和大量的庫和工具帶有字首“my”已經有10年以上,
而且不管怎樣,MySQL AB創始人之一的Monty Widenius的女兒也叫My。這兩個到底是哪一個給出了MySQL這個名字至今依然是個迷,包括開發者在內也不知道。
MySQL的海豚標誌的名字叫“sakila”,它是由MySQL AB的創始人從使用者在“海豚命名”的競賽中建議的大量的名字表中選出的。
獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者Ambrose Twebaze提供。
根據Ambrose所說,Sakila來自一種叫SiSwati的史瓦濟蘭方言,也是在Ambrose的家鄉烏干達附近的坦尚尼亞的Arusha的一個小鎮的名字。
MySQL,雖然功能未必很強大,但因為它的開源、廣泛傳播,導致很多人都瞭解到這個資料庫。它的歷史也富有傳奇性。

言歸正傳:今天來學習使用MySQl的 臨時表,變數,行轉列,預處理的一些入門使用相關話題!

個人之前一直使用比較多的資料庫就是Sqlserver,Sqlserver的強大,和儲存過程的牛13的地方這裡不多說了,
在在主流的關係型資料庫中,Mysql,Sqlserver,Oracle等,作者都有使用,相比還是微軟的Sqlserver是最人性化的,資料庫自帶的工具也是最好用的

什麼,執行計劃,作業任務,表分割槽,主從複製,讀寫分離,儲存過程,自定義型別,表函式,標量函式等等,都是比較人性化的使用!

新的公司使用的是Mysql關係型資料庫,curd其實大都數的sql語法類似Sqlserver,
但是個人還是覺得MySQl比較弱,功能和使用體驗上完全就不是一個等級的,
這裡沒有其他的故意貶低MySQl的意思,也不展開討論這個話題,

存在即有其中的道理,畢竟MySql也有自身的優點,例如:體積小巧,開源免費等!

1:臨時表 使用案例
語法案例如下:
DROP TEMPORARY TABLE if EXISTS p_table; //如果存在就先刪除
CREATE TEMPORARY TABLE p_table // 建立臨時表根據下面的查詢結果來處理
SELECT S.id,S.score
FROM studentscore S
WHERE S.id>1;
SELECT id, score FROM p_table;

2:mysql語句自定義變數 使用案例

SET @id=1;// 帶上自定義的變數,後面需要;分號結尾
DROP TEMPORARY TABLE if EXISTS p_table;
CREATE TEMPORARY TABLE p_table
SELECT S.id,S.score
FROM studentscore S
WHERE S.id>@id;
SELECT id, score FROM p_table;

 3:mysql的行轉列 使用案例

在Mysql中行轉列通常有 case when,和 if(a='' b,c)再結合 max,sum,avg 這樣的函式來處理
3.1:先建立表studentScore已經插入一些測試的資料
DROP TABLE IF EXISTS studentScore;

CREATE TABLE studentScore(
id INT(11) NOT NULL auto_increment,
userid VARCHAR(20) NOT NULL COMMENT '使用者id',
subject VARCHAR(20) COMMENT '科目',
score DOUBLE COMMENT '成績',
PRIMARY KEY(id)
)ENGINE = INNODB DEFAULT CHARSET = utf8;

INSERT INTO studentScore(userid,subject,score) VALUES ('111','語文',98);
INSERT INTO studentScore(userid,subject,score) VALUES ('111','數學',88);
INSERT INTO studentScore(userid,subject,score) VALUES ('111','英語',58);
INSERT INTO studentScore(userid,subject,score) VALUES ('222','語文',69);
INSERT INTO studentScore(userid,subject,score) VALUES ('222','數學',88);
INSERT INTO studentScore(userid,subject,score) VALUES ('222','英語',80);
INSERT INTO studentScore(userid,subject,score) VALUES ('333','語文',90);
INSERT INTO studentScore(userid,subject,score) VALUES ('333','數學',75);
INSERT INTO studentScore(userid,subject,score) VALUES ('333','英語',82);
INSERT INTO studentScore(userid,subject,score) VALUES ('333','政治',91);

SELECT* FROM studentScore;

 3.1:行轉列 使用案例,使用max,正常的情況下一個使用者與一條資料,就可以使用sum(),max取其中最大的那條  

 3.2:行轉列 ,if() 使用案例

  3.3:使用SUM(IF()) 生成列 + UNION 生成彙總行,並利用 IFNULL將彙總行標題顯示為 Total

 4:Mysql的預處理語句的使用案例:

  5:最後,看到MySQl也可以有上面的這些功能,是不是一下子對MySQl產生了好感,

      原來MySQl也是如此可愛啊,嘻嘻!!!

 

相關文章