SQL联结表

阅读:446

上节讲到子查询,本节开始讲解联结表。

1. 什么是联结表

通过一个SELECT语句,把多个表联结在一起,返回一组数据,我们称为联结表。

还记得课程表t_course和课程分类表t_category吗?我们现在把他们联结在一起,SQL如下:

SELECT title, name FROM t_course, t_category;

 

执行输出:

+-------------------------------------------------+--------------+
| title                                           | name         |
+-------------------------------------------------+--------------+
| Java教程:核心技术一网打尽                      | 后端         |
| Java教程:核心技术一网打尽                      | 架构         |
| Java教程:核心技术一网打尽                      | 中间件       |
| Java教程:核心技术一网打尽                      | 算法         |
| Java教程:核心技术一网打尽                      | 后端         |
| Java教程:核心技术一网打尽                      | 架构         |
| Java教程:核心技术一网打尽                      | 算法         |
| Java教程:核心技术一网打尽                      | 中间件       |
| Java教程:核心技术一网打尽                      | 程序人生     |
| Java教程:核心技术一网打尽                      | 前端         |
| Java面试教程                                  | 后端         |

......

 

不出所料,返回了很多行数据,这里为列举了一部分返回结果。为什么出现这种情况呢?是因为t_course的每一行都与t_category的所有行都匹配一次,然后返回结果,也就是我们说的笛卡尔积。

所以,我们联结表的时候,必须加联结条件。看如下SQL,然后输出:

mysql> SELECT title, name FROM t_course, t_category WHERE t_course.category_id = t_category.id;
+-------------------------------------------------+-----------+
| title                                           | name      |
+-------------------------------------------------+-----------+
| Java教程:核心技术一网打尽                      | 后端      |
| Java面试教程                                    | 后端      |
| redis基础教程                                   | 中间件    |
| 深入理解MySQL底层原理                           | 中间件    |
| kafka教程                                       | 中间件    |
| Spring Cloud基础教程                            | 后端      |
| 架构师教程                                      | 架构      |
| git教程                                         | 后端      |
| 深入剖析Java虚拟机                              | 后端      |
| SQL教程                                         | 中间件    |
| 设计模式:GOF的23种设计模式全剖析               | 后端      |
| HTML教程                                        | 前端      |
| HTML5教程                                       | 前端      |
| CSS教程                                         | 前端      |
| JavaScript教程                                  | 前端      |
| HTTP协议                                        | 前端      |
| Tomcat教程                                      | 中间件    |
| Servlet教程                                     | 后端      |
| Jsp教程                                         | 前端      |
| Ajax教程                                        | 前端      |
| JQuery教程                                      | 前端      |
| Maven教程                                       | 后端      |
| Linux教程                                       | 后端      |
| JDBC教程                                        | 后端      |
| Spring教程                                      | 后端      |
| Spring MVC教程                                  | 后端      |
| Spring boot教程                                 | 后端      |
| MyBatis教程                                     | 后端      |
| ActiveMQ教程                                    | 中间件    |
| ZooKeeper教程                                   | 中间件    |
| dubbo教程                                       | 中间件    |
+-------------------------------------------------+-----------+
31 rows in set (0.00 sec)

本次输出就是联结加联结条件后的结果。

 

2. 联结表使用场景

当联结表查询时,多个表可以没有任何逻辑关系,但是实际使用中,多个表都是有关系的。比如上面的例子中,课程信息和课程分类,我们一般放在多个表中存储信息,便于维护。当需要查询时候,由于他们分散在不同的表中存储,所以我们需要联结两个表进行查询。

总结:

  • 联结表是通过联结多个表,组合一组数据,然后输出。
  • 联结表一定要加联结条件,否则输出笛卡尔积。

赞赏支持


精彩留言

发表评论