当前位置:   article > 正文

MySQL sql注意点

MySQL sql注意点

本文列取了常用但是容易遗漏的一些知识点。另外关键词一般大写,为了便于阅读所以很多小写。也为了给自己查缺补漏。

distinct(去重)

也许你经常对单个字段去重,并且知道不建议用distinct,而是group by,因为大多数情况下distinct会引起全表扫描。但是还是需要了解:

  1. #此时distinct 是对field1 + field2联合去重。
  2. select distinct field1,field2 from table;

describe & desc(查询表结构)

也许你经常使用下面sql显示表结构,如果有天你要通过代码同步表结构,会用得上。

show create table table_name;

而忘记了下面这个

  1. #显示表详细表结构
  2. describe table_name;
  3. #同上
  4. desc table_name;

least & greatest(查找给定字符串之间的最值)

  1. select LEAST(1,2,0,3);# 0
  2. select GREATEST(1,2,0,3);# 3
  3. select LEAST("c","a","b");# a
  4. select GREATEST("c","a","b");# c

加减乘除取模运算

  1. select 1 + '-1';# 0
  2. #整数+符串,字符串隐式转换不成功,当作0
  3. select 1 + 'a';# 1
  4. select 1 + "a";# 1
  5. select 1 + NULL;# NULL
  6. select 1 * -1.0;# -1.0
  7. select 1 / -1;# -1.0000
  8. select 1 / 1.0;# 1.0000
  9. select 1 / 0;# NULL
  10. select 1 % 1.0;# 0.0
  11. select 1 % 0;# NULL
  12. select -3 % 2;# -1
  13. select -3 % -2;# -1
  14. select 3 % -2;# 1

等于 =

  1. #整数和符串比较,字符串隐式转换不成功,当作0
  2. select 0 = 'a';# 1
  3. #NULL参与判断,结果为NULL,这也解释了为什么关联查询时,关联字段存在NULL,结果显示NULL的原因
  4. select 1 = NULL;# NULL
  5. select NULL = NULL;# NULL

安全等于 <=>

  1. #没有NULL参与相当于等号,有NULL参与如下
  2. select 1<=> NULL;# 0
  3. select NULL <=> NULL;# 1
  4. select NULL <=> 'NULL', NULL <=> "NULL";# 0 0
  5. #当然也可以这样比较
  6. select 1 IS NULL;# 0
  7. select 1 IS NOT NULL;# 1
  8. select NULL IS NULL;# 1
  9. select ISNULL(1);# 0
  10. select ISNULL(NULL);# 1

not & !

  1. select NOT 0;# 1
  2. select NOT 100;# 0
  3. select NOT 'A';# 1
  4. select NOT (select 0 = 1);# 1
  5. select 1 NOT between 0 and 2;# 0
  6. select ! 0;# 1
  7. select ! 100;# 0
  8. select ! 'A';# 1
  9. select ! (select 0 = 1);# 1

字符转义的两种写法

  1. # \
  2. select a from (select "_abc" as a) t where a like '\_%';# _abc
  3. # ESCAPE 函数
  4. select a from (select "_abc" as a) t where a like 'a_%' escape 'a';# _abc
  5. select a from (select "_abc" as a) t where a like '$_%' escape 'a'$';# _abc

xor(异或)

  1. select 0 xor 0;# 0
  2. select 0 xor 1;# 1
  3. select 1 xor 0;# 1
  4. select 1 xor 1;# 0
  5. select 1 xor NULL;# NULL

and & or 优先级

  1. #如果按顺序来执行按理结果应是0,而实际结果是1,所以and优先级高于or
  2. select 1 or 1 and 0;# 1
  3. #等价于
  4. select 1 or (1 and 0);# 1

offset (mysql 8.0)

  1. #
  2. select * from table_name limit 初始位置(从0开始),记录数
  3. #展示第1条到第10条数据
  4. select * from table_name limit 0,10
  5. #mysql 8.0新增写法
  6. select * from table_name limit 10 offset 0;

join(关联)

当写多了sql之后已经形成了肌肉记忆,觉得理所当然,而忘记了这些形式。

using(连接条件)

  1. select * from t1 join t2 on t1.f1 = t2.f1 and t1.f2 = t2.f2
  2. #可替代如下写法,但是要求关联表字段名相同
  3. select * from t1 join t2 USING(f1, f2);

 round(四舍五入)

  1. select round(123.49);# 123
  2. select round(123.50);# 124
  3. #括号第二个参数表示从数点后截断几位(四舍五入后再截断)
  4. select round(123.49, 1);# 123.5
  5. select round(123.495, 2);# 123.50
  6. select round(123.4, -1);# 120

truncate(数值截断)

  1. #括号第二个参数表示从数点后截断几位
  2. SELECT TRUNCATE(123.34, 1);# 123.3
  3. SELECT TRUNCATE(123.3, -2);# 100

常用字符串操作函数

待续。。。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/138097
推荐阅读
相关标签
  

闽ICP备14008679号