SQL循序渐进(17)
| 编译：ZSC / 太平洋网络学院 |  |

JOIN子句

不知你有没有发现直到现在我们利用SELECT语句来检索的时候只能从一个表中进行。如果你想从两个表或者更多的表中进行检索，该怎么办呢？好在我们可以使用SQL和关系数据库系统的一个很有用的特性，即"Join"。为了简单说明，实际上"Join"就是使得关系数据库系统相关的东东。"Join"允许你从两个表或者更多的表连接数据进行数据检索，而只需要利用一个SELECT语句。如果在FROM关键字之后有多个表的话，"Join"可以在SQL SELECT语句中识别它们。

下面举个例子：

SELECT "list-of-columns"

FROM table1,table2

WHERE "search-condition(s)"

"Join"

通过示范当你只处理一个表的时候会发生什么事情可以使得"Join"的解释更简单，所以这里我没有使用"Join"。这个单一的数据库有事也被称为"flat table"（平表）。现在你有一个表的数据库用来检索所有顾客的信息以及他们从你的商店买了什么，下面就是这个表的所有列：

id | first | last | address | city | state | zip | date | item | price

每次一个新行被插入到表中，所有的列都将被更新，这样就导致了不必要的”多余数据”。比如，每次Jenny买东西，下面的行都将被插入到表中：

id | first | last | address | city | state | zip | date | item | price
10982 | Wolfgang | Jenny | 300 N. 1st Ave | Yuma | AZ | 85002 | 032299 | snowboard | 25.00
10982 | Wolfgang | Jenny | 300 N. 1st Ave | Yuma | AZ | 85002 | 032299 | shovel | 15.00
10982 | Wolfgang | Jenny | 300 N. 1st Ave | Yuma | AZ | 85002 | 032299 | gloves | 15.00
10982 | Wolfgang | Jenny | 300 N. 1st Ave | Yuma | AZ | 85002 | 032299 | lantern | 35.00
10982 | Wolfgang | Jenny | 300 N. 1st Ave | Yuma | AZ | 85002 | 032299 | tent | 95.00