MySQL数据库多表查询

来源:互联网 发布:面试官面试技巧知乎 编辑:程序博客网 时间:2024/06/06 23:19

查询语法:
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):<div class="se-preview-section-delimiter"></div>

命令:
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):<div class="se-preview-section-delimiter"></div>

命令:
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):<div class="se-preview-section-delimiter"></div>

命令:
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)相交的部分。

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

1 0
原创粉丝点击