1、mysql 不支持一边删除记录一边查询记录,所以要删除的时候,要把查询的子结果重新命名成一张新表
2、concat 函数可以拼接多个元素(不限于两个),用英文逗号分隔即可;
3、datetime类型的字段可以直接插入符合要求的时间字符串
4、group by 配合having 进行条件筛查,配合max()、min()等聚合函数取特定值
5、group by 和 distinct都可以去重,group by效率高,推荐优先使用
6、union 会去重,查询结果没有重复记录,union alll查出的结果有重复记录
7、 left join (左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。
right join (右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。
inner join (等值连接或者叫内连接):只返回两个表中连接字段相等的行。
8、delete语句
DELETE FROM table_name [WHERE Clause]
9、insert 语句
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN ),
( value1, value2,...valueN );
10、update语句
UPDATE table_name
SET field1=new-value1, field2=new-value2
[WHERE Clause]
11、判断一个数是否为奇数
方法一:取模—— val % 2 !=0
方法二(推荐):按位与—— val & 1
12、更改表名
ALTER TABLE 表名 RENAME TO/AS 新表名
13、replace 函数
replace( 字段名, 原值,新值 )
14、先order by 对表排序,再group by 分组,group by会忽略前面的排序,导致查询结果错误.
例如:SELECT user_id, d FROM (select * FROM login ORDER BY d DESC ) AS a GROUP BY a.user_id ;
并不会按照子查询中的排序进行分组,还是会按照原始排序分组。
解决方法一(不推荐):加limit
SELECT user_id, d FROM (select * FROM login ORDER BY d DESC limit 1000 ) AS a GROUP BY a.user_id ;
解决方法二(推荐):使用max()函数
SELECT user_id, MAX(d) FROM login group by user_id ;
15、ROUND()函数
round(需要取小数位数的数,小数位数);
注: 小数位数可以为负数。
例: round(1123.26723,1)——1123.3
round(1123.26723,-1)——1120
16、where条件中同时存在and 和 or 记得加括号。
17、统计字符串长度:
char_length('string')/char_length(column_name)
1、返回值为字符串string或者对应字段长度,长度的单位为字符,一个多字节字符(例如,汉字)算作一个单字符;
2、不管汉字还是数字或者是字母都算是一个字符;
3、任何编码下,多字节字符都算是一个字符;
参考资料来源:https://blog.csdn.net/iris_xuting/article/details/53763894
length('string')/length(column_name)
1、utf8字符集编码下,一个汉字是算三个字符,一个数字或字母算一个字符。
2、其他编码下,一个汉字算两个字符, 一个数字或字母算一个字符。
18、排序函数
排序函数row_number、rank、dense_rank的区别:
口诀的意思是:
row_number:不考虑并列的情况,哪怕分数相同,排名都是一溜下来的自然数。
dense_rank和rank 考虑并列的情况,
区别在于rank很跳,并列排名的个数会影响接下来的排名,表现为数字的中断。而dense_rank 不管有几个并列的第5名,接下来都是从6开始排。
19、在内连接、外连接中,要先join后where,否则会报错
20、case when then else end
case 字段名
when 情形1 then
输出值1
when 情形2 then
输出值2
else
输出值3
end 重新命名字段
if(e.type = 'no_completed', true , null)
21、
SELECT SUM(if(category=1,size,0)) ,COUNT(if(category=1,true,null)) FORM t_file;
https://blog.csdn.net/q812002440/article/details/76898619
解析:
1. sum(if(category=1,size,0))中 sum函数返回一个值类型的数值,如果category=1,则返回size,如果category不等于1就返回0。
2. count(if(category=1,true,null))中count函数返回一个布尔值类型的数值,如果category=1,返回true,如果category不等于1返回null,如果写成count(If(category=1,1,0) 则返回的全是true,也就是说全都会计数,而count()间断内容是true还是null,如果不是null就计数,如果是null就不计数。
所以count(if())的写法应该是count(if(表达式表达式,true,null));
————————————————
版权声明:本文为CSDN博主「cindyCode」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/q812002440/article/details/76898619