为什么要有连接
在实际使用创建表的时候我们不可能将所有的信息都放在一个表中,也就是不同的信息会放在不同的表中,所以我们最终需要的信息
可能在多个表中,这就需要我们使用连接来查询我们想要的信息。
有几种连接
一般情况下我们主要使用下面三种连接:
-
INNER JOIN(等值连接):获取两个表中字段匹配关系的记录。
-
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
-
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
使用连接的一般思路
-
首先要分析我们需要的数据存在哪些表中;
-
找到这些表中关联的数据列,没有关联的数据列的话一般不能进行连接查询;
-
确定使用哪种连接方式;
-
编写查询语句测试;
假设我们有下面的两个表:
student表:
| id | name |
|---|---|
| 1 | h |
| 2 | j |
| 3 | k |
| 4 | l |
| 5 | m |
| 6 | n |
| 7 | o |
grade表:
| id | grade |
|---|---|
| 1 | 88 |
| 2 | 90 |
| 3 | 87 |
| 4 | 85 |
下面来看三种查询的结果:
- INNER JOIN
select a.id,a.name,b.grade
from student as a
inner join grade as b
on a.id=b.id;
结果为:
| id | name | grade |
|---|---|---|
| 1 | h | 88 |
| 2 | j | 90 |
| 3 | k | 87 |
| 4 | l | 85 |
- LEFT JOIN
select a.id,a.name,b.grade
from student as a
left join grade as b
on a.id=b.id;
结果为:
| id | name | grade |
|---|---|---|
| 1 | h | 88 |
| 2 | j | 90 |
| 3 | k | 87 |
| 4 | l | 85 |
| 5 | m | NULL |
| 6 | n | NULL |
| 7 | o | NULL |
- RIGHT JOIN
select a.id,a.name,b.grade
from student as a
right join grade as b
on a.id=b.id
结果为:
| id | name | grade |
|---|---|---|
| 1 | h | 88 |
| 2 | j | 90 |
| 3 | k | 87 |
| 4 | l | 85 |
其中的左右表是根据放在join的左右来定义的。