MySQL数据库多表查询

查询语法:
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)相交的部分。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值