1. 程式人生 > >MySql中IFNULL、CONCAT和INSERT INTO...SELECT FROM多表複製的介紹

MySql中IFNULL、CONCAT和INSERT INTO...SELECT FROM多表複製的介紹

這幾天做一個功能,對資料庫中存在的資料進行統計,涉及到多表操作,這讓我想到之前在實習公司做的功能,都是統計和校驗資料,我做的方法就是先將資料查找出來,然後迴圈操作!在實習公司做功能花了一個星期,然後我的Mentor看到後,無力的笑著對我說,“你這樣做到後來會將資料庫搞垮,資料幾十萬條,你一條一條的查詢去吧,資料庫能操作的就儘量用SQL搞定”
今天下午搞了個迴圈,晚上老大來檢查的時候,也說,你這樣不行,效率太低了,應該用SQL語句搞,於是給我說了IFNULL和CONCAT,還有INSERT INTO。。。SELECT。。。
果然,最後兩條SQL語句,代替了我一大段的java程式碼。。。一邊感嘆老大的技術,一邊再想把這些SQL函式學一學,這次用過,下次就會用了嘛!
——————————-分割線——————————–
CONCAT(str1,str2,…)


返回結果為連線引數產生的字串。如有任何一個引數為NULL ,則返回值為 NULL。
注意:
如果所有引數均為非二進位制字串,則結果為非二進位制字串。
如果自變數中含有任一二進位制字串,則結果為一個二進位制字串。
一個數字引數被轉化為與之相等的二進位制字串格式;若要避免這種情況,可使用顯式型別 cast。
例如

SELECT CONCAT(CAST(int_col AS CHAR), char_col)

IFNULL(expr1,expr2)
如果 expr1 不是 NULL,IFNULL() 返回 expr1,否則它返回 expr2。也可以理解為它是MySql裡的判斷賦值函式那這樣就不得不介紹IF(expr1,expr2,expr3)
這個更好理解了,就像程式碼裡的三目運算一樣expr1為判斷語句,如果為真返回的就是expr2,如果expr1為甲返回的就是expr3;

INSERT INTO…SELECT FROM
一般的插入語句的格式為:

Insert INTO table(field1,field2,...) values(value1,value2,...)

但有的時候,你要將一個表的資料進行相關的操作複製到另一個表裡,這個時候

SELECT INTOINSERT INTO SELECT 

就該上場了
第一種:表必須存在

Insert into Table2(field1,field2,...) select value1,value2,... from Table1 WHERE....

由於目標表Table2已經存在,所以我們除了插入源表Table1的欄位外, 還可以插入其他的資料比如常量。
第二種:表不存在
可以允許表不存在,然後向這個不存在的表裡複製資料,然後資料庫會自動的建立這個表,語法如下:

SELECT vale1, value2 into Table2 from Table1

table2是不存在的,這樣查詢結束table2會自動建立,資料會和table1一樣
很遺憾的是MySQL不支援select。。。。into。。。。阿!西!吧!
貼上官網的文件
INSERT … SELECT Syntax
就到這了。。。。大家早上好,我要睡覺了,,,,