一、UNION 操作符
描述
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
UNION 只会选取不同的值。请使用 UNION ALL 来选取重复的值!
UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)
UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)
使用形式如下:
SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称;
SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称;
二、LIKE 子句
like 匹配/模糊匹配,会与 % 和 _ 结合使用。
'%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
'_a_' //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
三、ORDER BY 子句
使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。
SELECT * from runoob_tbl ORDER BY submission_date ASC;
四、GROUP BY 语句
GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
id | name | date | singin |
---|---|---|---|
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 |
使用 GROUP BY 语句 将数据表按名字进行分组,并统计每个人有多少条记录:
select name,count(*) from employee_tbl group by name;
name | COUNT(*) |
---|---|
小丽 | 1 |
小明 | 3 |
小王 | 2 |
五、连接
从多个数据表中读取数据。MySQL 的 JOIN 在两个或多个表中查询数据。
JOIN 按照功能大致分为如下三类:
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
有两张表 tcount_tbl 和 runoob_tbl。
SELECT * FROM tcount_tbl;
runoob_author | runoob_count |
---|---|
腾讯 | 10 |
Baidu | 20 |
22 |
SELECT * from runoob_tbl;
runoob_id | runoob_title | runoob_author | submission_date |
---|---|---|---|
1 | 学习 PHP | 腾讯 | 2019-04-12 |
2 | 学习 MySQL | 腾讯 | 2019-04-12 |
3 | 学习 Java | Baidu | 2017-05-01 |
4 | 学习 Python | Baidu | 2018-03-06 |
5 | 学习 C++ | FFF | 2016-04-05 |
INNER JOIN
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a
INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
a.runoob_id | a.runoob_author | b.runoob_count |
---|---|---|
1 | 腾讯 | 10 |
2 | 腾讯 | 10 |
3 | Baidu | 20 |
4 | Baidu | 20 |
LEFT JOIN
使用了 LEFT JOIN,该语句会读取左边的数据表 runoob_tbl 的所有选取的字段数据,即便在右侧表 tcount_tbl中 没有对应的 runoob_author 字段值。
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a
LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
a.runoob_id | a.runoob_author | b.runoob_count |
---|---|---|
1 | 腾讯 | 10 |
2 | 腾讯 | 10 |
3 | Baidu | 20 |
4 | Baidu | 20 |
5 | FFF | NULL |
RIGHT JOIN
使用了 RIGHT JOIN,该语句会读取右边的数据表 tcount_tbl 的所有选取的字段数据,即便在左侧表 runoob_tbl 中没有对应的runoob_author 字段值。
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a
RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
a.runoob_id | a.runoob_author | b.runoob_count |
---|---|---|
1 | 腾讯 | 10 |
2 | 腾讯 | 10 |
3 | Baidu | 20 |
4 | Baidu | 20 |
NULL | NULL | 22 |
六、索引
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。
普通索引和唯一索引。