数据库 の 联表查询
一. 概念
联表查询使用关键字
join
在sql语句中,某些字段名和表名,尽量用~来代替。
- 坐标查询
- 右表查询
- 中间查询
操作 | 描述 |
---|---|
Inner jion | 如果表中有一个匹配,就返回行 |
left join | 会从左表中返回所有的值,即使右表中没有匹配的值 |
right join | 会从右表中返回所有的值 |
比较详细的参考资料。
https://blog.csdn.net/plg17/article/details/78758593
二.笛卡尔积
一个表有 n 行,另一个表有 m 行,那么进行连接查询的时候,就会有 m*n 行。
之所以会出现这种情况,就是因为,我们在对 A 表和 B表进行联合查询的时候,没有有效的连接条件。
如何避免?就是添加上有效的链接条件。
class表
students
执行查询的 SQL
语句
SELECT `classname`, `name` FROM class,studentes;
相当于每个都对应这乘了一次。
三.查询的分类
按照年代分
- 192 标准
- 199 标准
3.1按照功能来分
内链接
- 等值连接
- 非等值连接
- 自连接
外连接
- 左外连接
- 右外连接
- 全外连接
交叉连接
2.1等值连接
SELECT
`classname`,
`name`
FROM
`class`,
`studentes`
WHERE
class.id=studentes.classid;
2.2 为表起别名
直接在表的后面加 AS
,或者省略。
SELECT
`classname`,
`name`
FROM
`class` AS c,
`studentes` s
WHERE
c.id=s.classid;
2.3加筛选条件
# 注释可以给表起别名
SELECT
`classname`,
s.id,
`name`
FROM
`class` AS c,
`studentes` s
WHERE #添加筛选条件
s.id > 2;
3.2 外连接
外连接,一般用于查询一个表中有,另一个表中没有的记录。
做外连接的时候,主表始终是显示的。从表是能查找到匹配的,才能显示出来。
主表和从表的区分
- 左外连接:
left join
左边的是主表 - 右外连接:
right join
右边的是主表
SELECT c.id ,s.*
FROM class AS c
LEFT OUTER JOIN studentes AS s
ON s.classid=c.id;