任何熟悉SQL和关系数据库的人都遇见过大量的连接类型。最简单的说,连接(join)会把两个表的内容组合到一个虚拟表或者recordset内。假如数据表有效地规一化,或许你会经常从某一个表中选出特定的信息再从另一个表中选出关联信息。这样做就需要简单的“同等连接(equijoin)”。
为了了解实际的连接操作,现在让我们假设在一个数据库内存放了某类软件的相关记录。某个表(Software)包含了软件产品的名称、软件的版本以及其他有关细节: http://www.acnow.net/ dbvDn7g
此主题相关图片如下:
http://www.acnow.net/
另一个表(Releases)则存储了软件发布历史的信息,其中包括发布日期和发布状态等(比如测试版、当前版、过时等): http://www.acnow.net/ dbvDn7g
此主题相关图片如下:
http://www.acnow.net/ jT
上表中还包含了一个列,内容指向软件表中采用的ID号。所以,通过这种索引软件表的方式,你就知道发布表中software_ID 等于 2的软件是Rome。
你采用连接组合信息,这样就不需要在两个表之间来回折腾了。不过,除了组合信息之外还可以通过连接把有关信息合并。这样,只要发布表内的software_ID 匹配软件表内的ID,你就把匹配信息一起放到一个记录内。
/ jT
代码如下: http://www.acnow.net/ dbvDn7g
SQL = "SELECT * FROM Software, Releases WHERE software.ID = releases.softwareID"
net/ jT
仔细分析以上的语句,首先注意到两个表名列在了FROM的后面。再根据所采用的连接,今后你可能还会发现语法会有所变化(或者连接类型有变),但是以上的语法是最基本的,显示了数据的联合选择方式。这里的WHERE 子句用来比较特定的ID值。在Software 表内,存在ID 列。同样的,Releases 表内则有个software_ID 列。为了明确你在WHERE 子句里要比较的值,你用表名作为前缀,后面还加上了一个点号(.)。
以下是连接选取数据之后的结果: http://www.acnow.net/ dbvDn7g
此主题相关图片如下:
http://www.acnow.net/ jT
注意:在创建连接的时候要仔细考虑选出数据的列。以上代码采用 * 通配符是为了让读者关注于SELECT 代码行的其他部分。但是,正如你从上图看到的那样,你无法选出softwareID 列,因为这一列没有作为recordset部分的增加值。它的作用就是为WHERE 子句所用。