赞
踩
本文列取了常用但是容易遗漏的一些知识点。另外关键词一般大写,为了便于阅读所以很多小写。也为了给自己查缺补漏。
也许你经常对单个字段去重,并且知道不建议用distinct,而是group by,因为大多数情况下distinct会引起全表扫描。但是还是需要了解:
- #此时distinct 是对field1 + field2联合去重。
- select distinct field1,field2 from table;
也许你经常使用下面sql显示表结构,如果有天你要通过代码同步表结构,会用得上。
show create table table_name;
而忘记了下面这个
- #显示表详细表结构
- describe table_name;
- #同上
- desc table_name;
- select LEAST(1,2,0,3);# 0
- select GREATEST(1,2,0,3);# 3
- select LEAST("c","a","b");# a
- select GREATEST("c","a","b");# c
- select 1 + '-1';# 0
- #整数+符串,字符串隐式转换不成功,当作0
- select 1 + 'a';# 1
- select 1 + "a";# 1
- select 1 + NULL;# NULL
- select 1 * -1.0;# -1.0
- select 1 / -1;# -1.0000
- select 1 / 1.0;# 1.0000
- select 1 / 0;# NULL
- select 1 % 1.0;# 0.0
- select 1 % 0;# NULL
- select -3 % 2;# -1
- select -3 % -2;# -1
- select 3 % -2;# 1
- #整数和符串比较,字符串隐式转换不成功,当作0
- select 0 = 'a';# 1
-
- #NULL参与判断,结果为NULL,这也解释了为什么关联查询时,关联字段存在NULL,结果显示NULL的原因
- select 1 = NULL;# NULL
- select NULL = NULL;# NULL
- #没有NULL参与相当于等号,有NULL参与如下
- select 1<=> NULL;# 0
- select NULL <=> NULL;# 1
- select NULL <=> 'NULL', NULL <=> "NULL";# 0 0
-
- #当然也可以这样比较
- select 1 IS NULL;# 0
- select 1 IS NOT NULL;# 1
- select NULL IS NULL;# 1
- select ISNULL(1);# 0
- select ISNULL(NULL);# 1
- select NOT 0;# 1
- select NOT 100;# 0
- select NOT 'A';# 1
- select NOT (select 0 = 1);# 1
- select 1 NOT between 0 and 2;# 0
-
- select ! 0;# 1
- select ! 100;# 0
- select ! 'A';# 1
- select ! (select 0 = 1);# 1
- # \
- select a from (select "_abc" as a) t where a like '\_%';# _abc
- # ESCAPE 函数
- select a from (select "_abc" as a) t where a like 'a_%' escape 'a';# _abc
- select a from (select "_abc" as a) t where a like '$_%' escape 'a'$';# _abc
- select 0 xor 0;# 0
- select 0 xor 1;# 1
- select 1 xor 0;# 1
- select 1 xor 1;# 0
- select 1 xor NULL;# NULL
- #如果按顺序来执行按理结果应是0,而实际结果是1,所以and优先级高于or
- select 1 or 1 and 0;# 1
- #等价于
- select 1 or (1 and 0);# 1
- #
- select * from table_name limit 初始位置(从0开始),记录数
-
- #展示第1条到第10条数据
- select * from table_name limit 0,10
-
- #mysql 8.0新增写法
- select * from table_name limit 10 offset 0;
当写多了sql之后已经形成了肌肉记忆,觉得理所当然,而忘记了这些形式。
- select * from t1 join t2 on t1.f1 = t2.f1 and t1.f2 = t2.f2
- #可替代如下写法,但是要求关联表字段名相同
- select * from t1 join t2 USING(f1, f2);
- select round(123.49);# 123
- select round(123.50);# 124
-
- #括号第二个参数表示从数点后截断几位(四舍五入后再截断)
- select round(123.49, 1);# 123.5
- select round(123.495, 2);# 123.50
- select round(123.4, -1);# 120
- #括号第二个参数表示从数点后截断几位
- SELECT TRUNCATE(123.34, 1);# 123.3
- SELECT TRUNCATE(123.3, -2);# 100
待续。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。