mysql中join和on的用法是什么

文 / @WordPress主题

在操作mysql数据库时,join和on是常用的关键字,用于连接多个表并联合查询数据。本文将介绍join和on的用法。

首先,需要明确的是,join操作主要有三种类型:inner join、left join和right join。下面分别介绍它们的用法。

1. inner join

inner join(内连接)是最基本的连接方式,它只返回两个表中匹配的记录。使用inner join时,必须指定要连接的表以及连接条件。

语法:

```
SELECT 列名 FROM 表1 INNER JOIN 表2 ON 连接条件;
```

例子:

假设有两个表students和grades,它们的结构分别如下:

students表:

| id | name | sex | age |
| -- | ------ | --- | --- |
| 1 | 张三 | 男 | 20 |
| 2 | 李四 | 女 | 22 |
| 3 | 王五 | 男 | 21 |
| 4 | 赵六 | 女 | 23 |

grades表:

| id | student_id | course | score |
| -- | --------- | ------ | ----- |
| 1 | 1 | 数学 | 80 |
| 2 | 1 | 英语 | 85 |
| 3 | 2 | 数学 | 90 |
| 4 | 2 | 英语 | 88 |
| 5 | 3 | 数学 | 85 |
| 6 | 3 | 英语 | 90 |
| 7 | 4 | 数学 | 82 |
| 8 | 4 | 英语 | 86 |

现在要查询所有学生的信息以及他们的数学成绩,可以使用如下SQL语句:

```
SELECT students.*, grades.score
FROM students INNER JOIN grades
ON students.id = grades.student_id
AND grades.course = '数学';
```

注意:connect student_id字段到 students表的id字段上,从而实现这个两个表的连接操作。同时,ON子句中指定了连接条件:grades.course = '数学',这是将要连接的表的条件。

查询结果:

| id | name | sex | age | score |
| -- | ----- | --- | --- | ----- |
| 1 | 张三 | 男 | 20 | 80 |
| 2 | 李四 | 女 | 22 | 90 |
| 3 | 王五 | 男 | 21 | 85 |
| 4 | 赵六 | 女 | 23 | 82 |

可以看到,只有选了数学的学生成绩才被查询到。

2. left join

left join(左连接)会返回左表的所有记录以及右表中匹配的记录。如果右表中没有匹配的记录,则返回Null值。使用left join时,同样需要指定要连接的表以及连接条件。

语法:

```
SELECT 列名 FROM 表1 LEFT JOIN 表2 ON 连接条件;
```

例子:

现在要查询所有学生的信息以及他们的英语成绩,如果有学生没有选修英语,则英语成绩显示为Null值。可以使用如下SQL语句:

```
SELECT students.*, grades.score
FROM students LEFT JOIN grades
ON students.id = grades.student_id
AND grades.course = '英语';
```

查询结果:

| id | name | sex | age | score |
| -- | ----- | --- | --- | ----- |
| 1 | 张三 | 男 | 20 | 85 |
| 2 | 李四 | 女 | 22 | 88 |
| 3 | 王五 | 男 | 21 | 90 |
| 4 | 赵六 | 女 | 23 | 86 |
| 5 | 钱七 | 男 | 19 | NULL |

注意:虽然钱七没有出现在grades表里面,但是left join语句保证了他的信息仍被查询到,并且英语成绩是NULL。

3. right join

right join(右连接)与left join类似,但是返回的是右表的所有记录以及左表中匹配的记录。如果左表中没有匹配的记录,则返回Null值。同样需要指定要连接的表以及连接条件。

语法:

```
SELECT 列名 FROM 表1 RIGHT JOIN 表2 ON 连接条件;
```

例子:

现在要查询所有课程的信息以及选修该课程的学生信息,如果没有学生选修该课程,则学生信息显示为Null值。可以使用如下SQL语句:

```
SELECT students.*, grades.course
FROM students RIGHT JOIN grades
ON students.id = grades.student_id;
```

查询结果:

| id | name | sex | age | course |
| ----- | ------ | --- | --- | ------ |
| 1 | 张三 | 男 | 20 | 数学 |
| 1 | 张三 | 男 | 20 | 英语 |
| 2 | 李四 | 女 | 22 | 数学 |
| 2 | 李四 | 女 | 22 | 英语 |
| 3 | 王五 | 男 | 21 | 数学 |
| 3 | 王五 | 男 | 21 | 英语 |
| 4 | 赵六 | 女 | 23 | 数学 |
| 4 | 赵六 | 女 | 23 | 英语 |
| NULL | NULL | NULL| NULL| 科学 |

注意:由于没有学生选修科学,因此最后一行显示的是Null值。

除了以上几种连接方式,还有一些其他的连接方式,例如:full outer join、cross join等等。这里不再赘述。

除了join之外,on也是常用的关键字,它常常与join一同使用,用于指定连接条件。on与where不同,它只作用于连接操作之间的条件,而不影响结果集的筛选。

本文简单介绍了mysql中join和on的用法,可以根据实际需求使用不同的连接方式以及连接条件,实现多表联合查询数据的目的。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。