单表查询
1、union
union操作符用于合并两个或多个select语句的结果集。
union要求:
- 两边 select 语句的字段数必须一样
- 两边可以具有不同数据类型的字段
- 字段名默认按照左边的表来设置
- 用法:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
注意:union与union all的区别
- 使用union时会筛选掉结果集中重复的部分,效率较低;
- 使用union all 时,直接合并两个结果集;
多表查询(join)
子查询
将一个select的结果集作为另一个select的条件。
select name from student where id in (select id from score where math > 10);
inner join :内连接
- inner join 关键字需要所有表中都存在至少一个匹配时返回行。
- 语法
SELECT 字段 FROM 表1 INNER JOIN 表2 ON 表1.字段=表2.字段;
left join :左连接
- LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中 没有匹配,则结果为 NULL。
- 语法:
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name;
right join :右连接
- RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表 中没有匹配,则结果为 NULL。
- 语法:
SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name=table2.column_name;
full join : 全连接
- FULL JOIN 的连接方式是只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回 行。相当于结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
- 特别注意: MySQL 并不支持 full join;
- 语法:
SELECT column_name(s) FROM table1 FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;