MySQL sql注意点

为何写这篇博客,源于工作时虽然写了大量sql语句包括复杂sql。可是一但脱离sql执行环境和运行结果。发现很多东西只是在尝试中解决了问题,但这还远远不够。

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

distinct(去重)

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

#此时distinct 是对(column1+column2)联合去重。
select distinct column1,column2 from table;

describe & desc(查询表结构)

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

show create table table_name;

而忘记了下面这个

#显示表详细表结构
describe table_name;
#同上
desc table_name;

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

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
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

not & !

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

XOR(异或)

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

and & or 优先级

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

待续。。。

你可能感兴趣的:(mysql,数据库)