SQL入门教程(14) 连接

2013-10-31 liyangweb.com 李杨 MySQL

现在我们介绍连接(join)的概念。要了解连接,我们需要用到许多我们之前已介绍过的指令。我们先假设我们有以下的两个表格

Store_Information 表格

store_name
sales
date
Los Angeles
1500
jan-05-1999
San Francisco
300
jan-08-1999
Boston
700
jan-08-1999
Geography 表格

region_name
store_name
East
Boston
East
New York
West
Los Angeles
West
San Diego

而我们要知道每一区 (region_name)  的营业额 (sales)。 Geography  这个表格告诉我们每一区有哪些店,而 Store_Information  告诉我们每一个店的营业额。若我们要知道每一区的营业额,我们需要将这两个不同表格中的资料串联起来。当我们仔细了解这两个表格后,我们会发现它们可经由一个相同的栏位,store_name,连接起来。我们先将 SQL  句列出,  之后再讨论每一个子句的意义:

SELECT A1.region_name REGION, SUM(A2.Sales) SALES FROM Geography A1, Store_Information A2 WHERE A1.store_name = A2.store_name GROUP BY A1.region_name

结果:

REGION
SALES
East
700
West
2050
在第一行中,我们告诉 SQL  去选出两个栏位:第一个栏位是 Geography  表格中的 Region_name  栏位( 我们取了一个别名叫做 REGION) ;第二个栏位是 Store_Information  表格中的 sales 栏位 ( 别名为SALES)。

请注意在这里我们有用到表格别名:Geography 表格的别名是A1,Store_Information 表格的别名是 A2 。若我们没有用表格别名的话,  第一行就会变成SELECT Geography.region_name REGION,SUM(Store_Information.Sales) SALES 很明显地,这就复杂多了。在这里我们可以看到表格别名的功用:它能让 SQL  句容易被了解,尤其是这个 SQL  句含盖好几个不同的表格时。

接下来我们看第三行,就是 WHERE 子句。这是我们阐述连接条件的地方。在这里,我们要确认 Geography表格中 Store_name 栏位的值与 Store_Information  表格中 store_name 栏位的值是相等的。这个WHERE 子句是一个连接的灵魂人物,因为它的角色是确定两个表格之间的连接是正确的。如果 WHERE子句是错误的,我们就极可能得到一个笛卡儿连接 (Cartesian join)。笛卡儿连接会造成我们得到所有两个表格每两行之间所有可能的组合。在这个例子中,笛卡儿连接会让我们得到  4 x 4 = 16  行的结果。

标签: mysql SQL入门教程

评论:

w
2013-10-31 22:51
可以
liyangweb.com 李杨
2013-11-01 14:07
@w:3Q

发表评论:

Powered by emlog 冀ICP备13011830号-1