网易云课堂DBA学习笔记 (二) SQL进阶

少见但实用的sql语法

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进阶语法

-- 多值插入
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';

聚合函数

count

在Mysql中 count(1) 与 count(*) 性能是一样的

count(xx字段),会把xx字段为null的数据排除掉

GROUP_CONCAT

GROUP_CONCAT连接的字符串有长度限制,默认是1024字节,但是可以通过修改参数来改变这个值

SHOW GLOBAL VARIABLES LIKE '%concat%'

预定义函数

字符串

-- 取字符串字节数: 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)

日期

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 '时间减法'

数值

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中的随机数'

猜你喜欢

转载自my.oschina.net/yejunxi/blog/1795803