工学1号馆

home

« | 返回首页

MySQL连接表

By Wu Yudong on July 03, 2017

本文将介绍什么是联结,为什么要使用联结,如何编写使用联结的SELECT语句。

1、联结

SQL最强大的功能之一就是能在数据检索查询的执行中联结( join)表。联结是利用SQLSELECT能执行的最重要的操作,很好地理解联结及其语法是学习SQL的一个极为重要的组成部分。

分解数据为多个表能更有效地存储,更方便地处理,并且具有更大的可伸缩性。但这些好处是有代价的。

联结是一种机制,用来在一条SELECT语句中关联表,因此称之为联结。使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行。

2、创建联结

联结的创建非常简单,规定要联结的所有表以及它们如何关联即可。请看下面的例子:

mysql> select vend_name,prod_name,prod_price
-> from vendors,products
-> where vendors.vend_id=products.vend_id
-> order by vend_name,prod_name;

由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘
以第二个表中的行数。例如:

mysql> select vend_name, prod_name, prod_price
-> from vendors, products
-> order by vend_name, prod_name;

应该保证所有联结都有WHERE子句,否则MySQL将返回比想要的数据多得多的数据。同理,应该保证WHERE子句的正确性。不正确的过滤条件将导致MySQL返回不正确的数据

3、内部联结

目前为止所用的联结称为等值联结equijoin),它基于两个表之间的相等测试。这种联结也称为内部联结。其实,对于这种联结可以使用稍微不同的语法来明确指定联结的类型。下面的SELECT语句返回与前面例子完全相同的数据:

mysql> select vend_name, prod_name, prod_price
-> from vendors inner join products
-> on vendors.vend_id = products.vend_id;

此语句中的SELECT与前面的SELECT语句相同,但FROM子句不同。这里,两个表之间的关系是FROM子句的组成部分,以INNERJOIN指定。在使用这种语法时,联结条件用特定的ON子句而不是WHERE子句给出。传递给ON的实际条件与传递给WHERE的相同。

4、联结多个表

SQL对一条SELECT语句中可以联结的表的数目没有限制。创建联结的基本规则也相同。首先列出所有表,然后定义表之间的关系。例如:

mysql> select prod_name,vend_name,prod_price,quantity
-> from orderitems,products,vendors
-> where products.vend_id=vendors.vend_id
-> and orderitems.prod_id=products.prod_id
-> and order_num=20005;

MySQL在运行时关联指定的每个表以处理联结。这种处理可能是非常耗费资源的,因此应该仔细,不要联结不必要的表。联结的表越多,性能下降越厉害。

如果文章对您有帮助,欢迎点击下方按钮打赏作者

Comments

No comments yet.
To verify that you are human, please fill in "七"(required)