mysql中join和on的用法是什么
在操作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的用法,可以根据实际需求使用不同的连接方式以及连接条件,实现多表联合查询数据的目的。

-
MySQL Workbench怎么建立数据库(附:sql语句创建数据库方法) 2023-07-20 12:22:29
-
MySQL Workbench是什么?(附:如何设置中文教程) 2023-07-20 11:42:31
-
qt5.8如何连接mysql 2023-05-14 07:00:03
-
mysql怎么将查询结果赋给变量 2023-05-14 07:00:03
-
mysql乐观锁和悲观锁的区别是什么 2023-05-14 07:00:03
-
一起聊聊MySQL主从延时的处理方案 2023-05-14 07:00:03
-
mysql修改表结构的语句是什么 2023-05-14 07:00:03
-
MySQL 语法整理介绍 2023-05-14 07:00:03
-
mysql驱动是什么 2023-05-14 07:00:03
-
mysql怎样查询日期范围 2023-05-14 07:00:02