数据库
十五、多表查询
UNION联合查询
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
union要求:
- 两边 select 语句的字段数必须一样
- 两边可以具有不同数据类型的字段
- 字段名默认按照左边的表来设置
- 用法:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
INNER JOIN: 内连接 (交集)
- INNER JOIN 关键字在表中存在至少一个匹配时返回行。
- 语法
SELECT 字段
FROM 表1 INNER JOIN 表2
ON 表1.字段=表2.字段;
-- 或:
SELECT column_name(s)
FROM table1 JOIN table2
ON table1.column_name=table2.column_name;
LEFT JOIN: 左连接
- LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
- 语法
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
-- 或:
SELECT column_name(s)
FROM table1
LEFT OUTER 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;
-- 或:
SELECT column_name(s)
FROM table1
RIGHT OUTER 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;
各种连接对比
NATURAL JOIN: 自然连接
- natural join 自然内连接
- natural left join 自然左外连接
- natural right join 自然右外连接
- 特点:
– 可以自动判断连接的条件,依据的是同名字段
– 如果没有同名字段,返回的是笛卡尔积
– 自动返回整理好的结果
1.连接的字段只返回一个
2.连接的字段放在最前面
select * from stuinfo a natural join score b;
select * from stuinfo a natural left join score b;
CROSS JOIN:交叉连接
特点:返回一个笛卡尔积
select * from a cross b;
using 函数
select * from stuinfo a left join score b on a.sid=b.sid; #主要作用,是自动查找关联字段,依据的是同名字段,但是同名字段是自己制定
select * from stuinfo a join score b using(sid);
子查询
查询的语句中还有一个查询
select name from student where id in (select id from score
where math > 10);