Rare but useful sql syntax
disbtinct
-- DISTINCT的作用是去重
SELECT DISTINCT
user_id
FROM
tourorder;
-- 与下面的效果的一致的,但DISTINCT性能似乎略查于下面的写法,因为distinct会导致全表扫描,详细百度
SELECT
user_id
FROM
tourorder
GROUP BY user_id
case when
SELECT
id,
CASE
WHEN STATUS = 0 THEN
'未支付'
ELSE
'已支付'
END
FROM
tourorder
union
-- UNION 自动经常使用了,但是值得注意的是:
-- UNION 与UNION ALL 区别是UNION会自动去重结果,而UNION ALL 则不会
SELECT
user_id
FROM
order1
UNION
SELECT
user_id
FROM
order2
DML Advanced Syntax
-- 多值插入
INSERT INTO city
VALUES
(NULL, 1, '广州'),
(NULL, 1, '佛山');
-- 查询插入
INSERT INTO city (SELECT NULL, 1, NAME FROM city2);
-- 覆盖插入,若存在主键为3的数据,先删除后插入新的值
REPLACE INTO city
VALUES
(3, 1, '广州2');
-- 忽略插入,若存在主键为3的数据,不插入
INSERT IGNORE INTO city
VALUES
(3, 1, '广州3');
-- 重复更新插入,若存在主键为3的数据,则只更新已存在数据的name值
INSERT INTO city
VALUES
(3, 1, '广州') ON DUPLICATE KEY UPDATE NAME = '广州2';
-- insert 与 insert into 是一样的。即上面所有的sql,"into" 可不写
-- 连表更新
UPDATE A,B
SET A.age = B.age
WHERE
A.id = B.id;
-- 连表删除
DELETE A
FROM
A,
B
WHERE
A.id = B.id
AND B. NAME = 'xx';
Aggregate function
count
In Mysql, count(1) has the same performance as count(*)
count(xx field) will exclude the data whose xx field is null
GROUP_CONCAT
The string connected by GROUP_CONCAT has a length limit, the default is 1024 bytes, but this value can be changed by modifying the parameters
SHOW GLOBAL VARIABLES LIKE '%concat%'
predefined function
string
-- 取字符串字节数: 9
SELECT
LENGTH('123你好');
-- 取字符串字节数 :5
SELECT
CHAR_LENGTH('123你好');
-- 去除前后空格,还有去除左右空格的 RTRIM,LTRIM
SELECt TRIM(' 你好 ');
-- c在字符串abcd中的位置
SELECT
LOCATE('c', 'abcd');
-- 若存在多个c,第三参数的意思是从第4个字符串开始检索
SELECT
LOCATE('c', 'abcabc',4);
-- 字符串替换
SELECT
REPLACE ('abc', 'b', '啊');
-- 截取字符串:bcd
SELECT
SUBSTRING('abcd', 2);
-- b
SELECT
SUBSTRING('abcd', 2,1)
date
SELECT
CURDATE() '当前日期',
CURTIME() '当前时间',
now() '当前日期时间',
UNIX_TIMESTAMP() '当前时间戳',
UNIX_TIMESTAMP(now()) '时间转时间戳',
date_format(now(), '%Y-%m-%d') '格式化',
DATE_ADD(now(), INTERVAL 1 DAY) AS '时间加法',
DATE_SUB(now(), INTERVAL 1 DAY) AS '时间减法'
Numerical value
SELECT
abs(- 1) '绝对值',
CEIL(1.2) '向上取整',
FLOOR(1.2) '向下取整',
ROUND(1.5) '四舍五入',
pow(2, 3) '2的3次幂',
MOD (5, 2) '取模,即取余数 5%2=1',
RAND() '0~1中的随机数'