当前位置: IT培训 > HTML5培训 > 前端开发 > HTML5 > MySQL数据库多表查询
MySQL数据库多表查询 时间:2017-05-17     来源:移动互联网学院

查询语法: 

SELECT * FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona 

注:使用ON关键字来设定连接条件,使用WHERE关键字进行结果集记录的过滤

多表查询主要分为三类: 

- INNER JOIN 内连接,取两个表中的共有部分。 

- LEFT(OUTER)JOIN 左外连接,显示左表中的全部内容和与右表相交部分。 

- RIGHT(OUTER)JOIN 右外连接,显示右表中的全部内容和与左表相交部分。

接下来给大家一个例子: 

在一个数据库中建了两个表: 

student(左表)

+----+--------+-------+------+

| id | name   | score | tid  |

+----+--------+-------+------+

|  1 | 张三   |    88 |    2 |

|  2 | 李四   |    99 | NULL |

|  3 | 王五   |    67 |    1 |

|  4 | 李狗蛋 |    44 |    3 |

|  5 | 萧炎   |   100 |    4 |

+----+--------+-------+------+

teacher(右表)

+----+--------+-----+

| id | name   | sex |

+----+--------+-----+

|  1 | 王老师 | 男  |

|  2 | 张老师 | 男  |

|  3 | 李老师 | 女  |

|  4 | 赵老师 | 女  |

|  5 | 严老师 | 男  |

+----+--------+-----+

注:student.tid为外键和teacher中id对应。

通过内连接查询(INNER JOIN):

命令: 

SELECT * FROM student INNER JOIN teacher ON student.tid=teacher.id;

结果: 

+—-+——–+——-+—–+—-+——–+—–+ 

| id | name | score | tid | id | name | sex | 

+—-+——–+——-+—–+—-+——–+—–+ 

| 1 | 张三 | 88 | 2 | 2 | 张老师 | 男 | 

| 3 | 王五 | 67 | 1 | 1 | 王老师 | 男 | 

| 4 | 李狗蛋 | 44 | 3 | 3 | 李老师 | 女 | 

| 5 | 萧炎 | 100 | 4 | 4 | 赵老师 | 女 | 

+—-+——–+——-+—–+—-+——–+—–+

通过左外连接查询(LEFT JOIN):

命令: 

SELECT * FROM student LEFT JOIN teacher ON student.tid=teacher.id;

结果: 

+—-+——–+——-+——+——+——–+——+ 

| id | name | score | tid | id | name | sex | 

+—-+——–+——-+——+——+——–+——+ 

| 1 | 张三 | 88 | 2 | 2 | 张老师 | 男 | 

| 2 | 李四 | 99 | NULL | NULL | NULL | NULL | 

| 3 | 王五 | 67 | 1 | 1 | 王老师 | 男 | 

| 4 | 李狗蛋 | 44 | 3 | 3 | 李老师 | 女 | 

| 5 | 萧炎 | 100 | 4 | 4 | 赵老师 | 女 | 

+—-+——–+——-+——+——+——–+——+

 

通过右外连接查询(RIGHT JOIN):

命令: 

SELECT * FROM student RIGHT JOIN teacher ON student.tid=teacher.id;

结果: 

+——+——–+——-+——+—-+——–+—–+ 

| id | name | score | tid | id | name | sex | 

+——+——–+——-+——+—-+——–+—–+ 

| 3 | 王五 | 67 | 1 | 1 | 王老师 | 男 | 

| 1 | 张三 | 88 | 2 | 2 | 张老师 | 男 | 

| 4 | 李狗蛋 | 44 | 3 | 3 | 李老师 | 女 | 

| 5 | 萧炎 | 100 | 4 | 4 | 赵老师 | 女 | 

| NULL | NULL | NULL | NULL | 5 | 严老师 | 男 | 

+——+——–+——-+——+—-+——–+—–+ 

“`注:查询结果为右表(teacher)的全部内容和右表(teacher)左表(student)相交的部分。

总体来说,内连接显示两个表相交的部分。左外连接就是以左表为主,在内连接的基础上把左表的所有内容显示出来。右外链接就是以右表为主,在内连接的基础上把右表的所有内容显示出来。在执行命令时,那个表先写那个表就为左表。写在后面的表为右表。

X