mysql内连接、外连接详解
时间: 2023-10-20 19:18:02 浏览: 41
MySQL中连接是将两个或多个表中的数据关联起来的一种方法。连接在数据检索中扮演着非常重要的角色,因为它允许我们从多个相关的表中检索数据。MySQL支持多种类型的连接,包括内连接、外连接等。下面分别对内连接和外连接进行详细的讲解。
1. 内连接
内连接也称为等值连接,它是通过比较两个或多个表中的列值来匹配行的连接。内连接只返回两个表中都存在匹配行的数据,其他行将被忽略。
内连接的语法如下:
```
SELECT 列名 FROM 表名1 INNER JOIN 表名2 ON 表名1.列名 = 表名2.列名;
```
其中,INNER JOIN表示内连接操作。
例如,有两个表students和scores,students表中包含学生的信息,scores表中包含学生成绩信息。现在需要查询所有学生的姓名和成绩,可以使用内连接进行查询,语句如下:
```
SELECT students.name, scores.score FROM students INNER JOIN scores ON students.id = scores.id;
```
其中,students.id与scores.id为连接条件,只有两个表中都存在该条件的数据才会进行连接。
2. 外连接
外连接可以分为左外连接、右外连接和全外连接。它们的区别在于返回的结果集中是否包含没有匹配的行数据。
(1)左外连接
左外连接返回左表中的所有行,以及右表中符合条件的行。如果右表中没有符合条件的行,将返回NULL值。
左外连接的语法如下:
```
SELECT 列名 FROM 表名1 LEFT JOIN 表名2 ON 表名1.列名 = 表名2.列名;
```
其中,LEFT JOIN表示左外连接操作。
例如,有两个表students和scores,现在需要查询所有学生的姓名和成绩,包括没有成绩的学生,可以使用左外连接进行查询,语句如下:
```
SELECT students.name, scores.score FROM students LEFT JOIN scores ON students.id = scores.id;
```
其中,students.id与scores.id为连接条件,如果scores表中没有与students表中相同id的数据,则返回NULL值。
(2)右外连接
右外连接与左外连接相反,它返回右表中的所有行,以及左表中符合条件的行。如果左表中没有符合条件的行,将返回NULL值。
右外连接的语法如下:
```
SELECT 列名 FROM 表名1 RIGHT JOIN 表名2 ON 表名1.列名 = 表名2.列名;
```
其中,RIGHT JOIN表示右外连接操作。
例如,有两个表students和scores,现在需要查询所有学生的姓名和成绩,包括没有姓名的成绩,可以使用右外连接进行查询,语句如下:
```
SELECT students.name, scores.score FROM students RIGHT JOIN scores ON students.id = scores.id;
```
其中,students.id与scores.id为连接条件,如果students表中没有与scores表中相同id的数据,则返回NULL值。
(3)全外连接
全外连接可以返回左右两个表中的所有行,如果某个表中没有符合条件的行,则返回NULL值。
全外连接的语法如下:
```
SELECT 列名 FROM 表名1 FULL JOIN 表名2 ON 表名1.列名 = 表名2.列名;
```
其中,FULL JOIN表示全外连接操作。
例如,有两个表students和scores,现在需要查询所有学生的姓名和成绩,包括没有姓名或成绩的数据,可以使用全外连接进行查询,语句如下:
```
SELECT students.name, scores.score FROM students FULL JOIN scores ON students.id = scores.id;
```
其中,students.id与scores.id为连接条件,如果students表中没有与scores表中相同id的数据,则返回NULL值;如果scores表中没有与students表中相同id的数据,则返回NULL值。