1.模糊查询
like 模糊匹配,会与 % 和 _ 结合使用
'%a' # 以a结尾的数据
'a%' # 以a开头的数据
'%a%' # 含有a的数据
'_a_' # 三位且中间字母是a的
'_a' # 两位且结尾字母是a的
'a_' # 两位且开头字母是a的
select * from blog where b_phone like '1%';
select * from blog where b_phone like '__0';

2.UNION 操作符
UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据
select * from blog where b_id = 1 or b_id = 2
UNION ALL
select * from blog where b_id = 2 or b_id = 3;

3.排序
ORDER BY 子句来设定哪个字段哪种方式来进行排序,再返回搜索结果。
ASC 或 DESC 关键字来设置查询结果是按升序或降序排列
select * from blog order by b_id desc;

4.分组
GROUP BY 语句根据一个或多个列对结果集进行分组。
创建员工表
CREATE TABLE `employee` (
`id` int(11) NOT NULL,
`name` char(10) NOT NULL DEFAULT '',
`date` datetime NOT NULL,
`signin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登录次数',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入数据
INSERT INTO `employee` VALUES
('1', '小明', '2016-04-22 15:25:33', '1'),
('2', '小王', '2016-04-20 15:25:47', '3'),
('3', '小丽', '2016-04-19 15:26:02', '2'),
('4', '小王', '2016-04-07 15:26:14', '4'),
('5', '小明', '2016-04-11 15:26:40', '4'),
('6', '小明', '2016-04-04 15:26:54', '2');

# 查看每人打卡记录
SELECT name, COUNT(*) FROM employee GROUP BY name;

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)
# 统计每人打卡总数
SELECT name, SUM(signin) as signin_count FROM employee GROUP BY name WITH ROLLUP;

其中记录 NULL 表示所有人的登录次数。
使用 coalesce 来设置一个可以取代 NUll 的名称,coalesce 语法:
select coalesce(a,b,c);
SELECT coalesce(name, '总数') as name, SUM(signin) as signin_count FROM employee GROUP BY name WITH ROLLUP;

5.多表连接
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
修改blog表
update blog set b_author = "小明" where b_id = 3;
update blog set b_author = "小丽" where b_id = 4;
update blog set b_author = "小王" where b_id = 5;

# 内连接
select b.b_author, b.b_title, e.signin from blog b
INNER JOIN employee e on b.b_author = e.name;
# INNER 可以省略
select b.b_author, b.b_title, e.signin from blog b
JOIN employee e on b.b_author = e.name;
# where条件连接
select b.b_author, b.b_title, e.signin from blog b, employee e
where b.b_author = e.name;

# 左连接:读取左边数据表的全部数据,即便右边表无对应数据。
select b.b_author, b.b_title, e.signin from blog b
LEFT JOIN employee e on b.b_author = e.name;
# 右连接:读取右边数据表的全部数据,即便左边边表无对应数据。
select b.b_author, b.b_title, e.signin from blog b
RIGHT JOIN employee e on b.b_author = e.name;
