版本比较
比较
标识
- 该行被添加。
- 该行被删除。
- 格式已经改变。
使用学生表和成绩表来演示连接,SQL架构如下:
什么是连接?
在SQL中,连接用于组合两张或多张表的记录,使其成为一张表,以提供更强大的查询能力。
比如典型地,有一张学生表,包含学号和姓名两列,还有一张成绩表,包含学号和成绩两列。如果想一次查询出学号-姓名-成绩信息,则最好的办法就是将学生表和成绩表先合成一张表,再进行查询,否则就要从每张表都查询一次,才能得到结果。
连接示例
使用前面的学生表和成绩表来演示连接,SQL架构如下:
代码块 | ||||
---|---|---|---|---|
| ||||
Create table If Not Exists student_info (id int, name varchar(255)); Create table If Not Exists student_score (id int, score int); Truncate table student_info; insert into student_info (id, name) values ('1', 'Wang'); insert into student_info (id, name) values ('2', 'Alice'); insert into student_info (id, name) values ('3', 'Allen'); Truncate table student_score; insert into student_score (id, score) values ('1', '65'); insert into student_score (id, score) values ('2', '70'); insert into student_score (id, score) values ('3', '75'); |
执行连接查询的语句如下:
代码块 | ||||
---|---|---|---|---|
| ||||
mysql> SELECT * FROM student_score, student_info; +------+-------+------+-------+ | id | score | id | name | +------+-------+------+-------+ | 3 | 75 | 1 | Wang | | 2 | 70 | 1 | Wang | | 1 | 65 | 1 | Wang | | 3 | 75 | 2 | Alice | | 2 | 70 | 2 | Alice | | 1 | 65 | 2 | Alice | | 3 | 75 | 3 | Allen | | 2 | 70 | 3 | Allen | | 1 | 65 | 3 | Allen | +------+-------+------+-------+ 9 rows in set (0.00 sec) |
先不考虑连接的语法以及结果是如何生成的,这里可以看到,我们确实用两张表拼凑出了一张表,而且这张表包含了我们需要的学号-姓名-成绩信息。通过稍加修改,就可以实现一次查询出学号-姓名-成绩,如下:上面的连接查询直接把多表放在了FROM后面,用逗号进行间隔,所以是内连接,与下面的语句是等效的:
代码块 |
---|
mysql> SELECT student_info.id, name, score* FROM student_score, student_info WHERE student_info.id = JOIN student_score.id; +------+-------+------+-------+ | id | name | id | score | +------+-------+------+-------+ | 3 | Allen | 1 | 65 | | 2 | Alice | 1 | 65 | | 1 | Wang | 1 | 65 | | 3 | Allen | 2 | 70 | | 2 | Alice | 2 | 70 | | 1 | Wang | 2 | 70 | | 3 | Allen | 3 | 75 | | 2 | Alice | 3 | 75 | | 1 | Wang | 3 | 75 | +------+-------+------+-------+ 39 rows in set (0.00 sec) |
外连接一定要on,参考:https://cloud.tencent.com/developer/ask/206061
参考:
目录 |
---|