MySql中IFNULL、CONCAT和INSERT INTO...SELECT FROM多表复制的介绍

来源:互联网 发布:淘宝网.棉拖鞋 妈妈型 编辑:程序博客网 时间:2024/06/06 02:17

这几天做一个功能,对数据库中存在的数据进行统计,涉及到多表操作,这让我想到之前在实习公司做的功能,都是统计和校验数据,我做的方法就是先将数据查找出来,然后循环操作!在实习公司做功能花了一个星期,然后我的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
就到这了。。。。大家早上好,我要睡觉了,,,,

0 0
原创粉丝点击