为何写这篇博客,源于工作时虽然写了大量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);#    1not & !
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;#    0select ! 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'$';#    _abcXOR(异或)
select 0 xor 0;#	0
select 0 xor 1;#	1
select 1 xor 0;#	1
select 1 xor 1;#	0
select 1 xor NULL;#    NULLand & or 优先级
#如果按顺序来执行按理结果应是0,而实际结果是1,所以and优先级高于or
select 1 or 1 and 0;#    1
#等价于
select 1 or (1 and 0);#    1待续。。。