INNER JOIN

多表联接建立记录集是十分有用的,因为某些情况下,我们需要把数字数据类型显示为相应的文本名称,这就碰到了多表联接建立记录集的问题。比如作一个会员注册系统,共有五个表,会员信息数据表member、会员身份表MemberIdentity、会员许可权表MemberLevel、会员类别表MemberSort和会员婚姻状况表Wedlock。假如想把会员注册信息全部显示出来,肯定要将这四个表连起来,否则大家看到的某些会员信息可能只是数据编号。

INNER JOIN

INNER JOIN 运算

组合两个表中的记录,只要在公共栏位之中有相符的值。

SELECT * FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2

INNER JOIN 运算可分为以下几个部分:

说明

可以在 FROM 子句中使用INNER JOIN运算。.这是最普通的联接类型。只要在这两个表的公共栏位之中有相符值,内部联接将组合两个表中的记录。

可以使用 INNER JOIN 与部门表及员工表选择每一个部门中的全部员工。反之,可以使用 LEFT JOIN或 RIGHT JOIN运算创建 outer join,从而选择所有部门(即使有些并没有员工)或所有员工(即使有些尚未分配到部门)。

若试图联接包含 Memo或 OLE Object数据的栏位,会导致错误。

可以联接任何两个相同类型的数值栏位。例如,可以联接 AutoNumber和 Long栏位,因为它们类型相似。但不能联接 Single 和 Double 类型的栏位。

下列示例显示如何在类标识符栏位联接类表及产品表:

在上面的示例中,类标识符是已被联接的栏位,但是它并不包含在查询输出中,因它并非被包含在 SELECT 语句之中。在这个示例中,若要包含联接栏位,将栏位名包含在 SELECT 语句中, Categories.CategoryID.

也可以使用下列语法,在一个 JOIN 语句中链接多个 ON 子句:

也可以使用下列语法,嵌套 JOIN 语句:

在一个 INNER JOIN 之中,可以嵌套 LEFT JOIN 或 RIGHT JOIN,但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOIN。

有关INNER JOIN的用法,现更加详细地说明如下:

以会员类别表来说,在其数据表中,1代表普通会员,2代表高级会员,3代表终身会员,在显示时,假如不将会员类别表与会员具体数据表相关联,那么假如我们现在看到的是一名普通会员的注册信息,我们只能看到其类别为1,而谁又会知道1代表的是普通会员呢?所以要将会员类别表与会员具体数据表相关联,关联后,1就显示为普通会员,2就显示为高级会员,3就显示为终身会员,这样多好?同理,其它两个表也要与会员具体数据表相关联才能把数据编号显示为相应的名称。

前天制作网站后台时碰到此问题,在面包论坛、狂迷俱乐部、蓝色理想、和5D多媒体论坛发了贴子求救,都没有获得答案,只好自己研究,花了两天时间终于成功,现将其写成教程供大家分享,希望大家少走弯路。

本教程是把五个表联在一起,假如愿意,您可以将更多的表联在一起,方法大同小异啦~

步骤一:用Access软体建立一个名为Member的资料库,在其中建五个表,分别为:会员信息数据表member、会员身份表MemberIdentity、会员许可权表MemberLevel、会员类别表MemberSort和会员婚姻状况表Wedlock。

●会员信息数据表member:

MemberID:自动编号,主键(ID号)

MemberSort:数字(会员类别)

MemberName:文本,会员姓名

Password:文本(会员密码)

MemberLevel:数字(会员许可权)

MemberIdentity:数字(会员身份)

Wedlock:数字(婚姻状况)

MemberQQ:文本(QQ号码)

MemberEmail:文本(会员邮箱)

MemberDate:日期/时间(会员注册日期)

●会员身份表MemberIdentity:

MemberIdentity:自动编号,主键(ID号)

IdentityName:文本(会员身份名称)

●会员许可权表MemberLevel:

MemberLevel:自动编号,主键(ID号)

LevelName:文本(会员许可权名称)

●会员类别表MemberSort:

MemberSort:自动编号,主键(ID号)

SortName:文本(会员类别名称)

●会员婚姻状况表Wedlock

Wedlock:自动编号,主键(ID号)

WedlockName:文本(会员婚姻状况类别)

说明:五个表建好后,您可以自行设置您想要的类别,如会员许可权,您可以设置两个类别--「未付费会员」和「已付费会员」,编号分别为「1」、「2」,如您设置了三个选项,那么第三个选项的编号当然就是「3」了。

下面我们所要作的工作就是把「1」、「2」之类的编号显示为「未付费会员」和「已付费会员」,否则,大家谁会知道「1」代表的是「未付费会员」,「2」代表的是「已付费会员」?

步骤二:建DSN数据源,建记录集

●运行DreamweaverMX软体,在会员注册信息显示页面建一个名为ConnMember(您也可以起其它的名称)的DSN数据源。

●点击伺服器行为面板中的「绑定」,建一个名为MemberShow的数据集,「连接」选择ConnMember,「表格」选择Member,「列」全选,「排序」选择MemberDate,降序。点击「高级」按钮,修改SQL框中自动生成的代码:

原代码为:

Select*

FROM Member

ORDER BY MemberDate DESC

将代码修改为:

修改完代码后,点击「确定」,大功告成!

现在,您可以打开记录集看一下,五个表中的栏位全部集成在MemberShow记录集中,您只要将相应的栏位绑定在该栏位想显示的单元格中即可。这下好了,所有的数字编号全部变成了相应的名称,如会员许可权,不再是「1」和「2」的数字形式了,而是变成了相应的名称「未付费会员」和「已付费会员」。其它的数字编号也变成了显示的文本名称,是不是很开心呢?

注重事项:

●在输入字母过程中,一定要用英文半形标点符号,单词之间留一半形空格;

●在建立数据表时,假如一个表与多个表联接,那么这一个表中的栏位必须是「数字」数据类型,而多个表中的相同栏位必须是主键,而且是「自动编号」数据类型。否则,很难联接成功。

●代码嵌套快速方法:如,想连接五个表,则只要在连接四个表的代码上加一个前后括弧(前括弧加在FROM的后面,后括弧加在代码的末尾即可),然后在后括弧后面继续添加「INNERJOIN表名XON表1.栏位号=表X.栏位号」代码即可,这样就可以无限联接数据表了:)

语法格式:

其实INNERJOIN……ON的语法格式可以概括为:

FROM(((表1INNERJOIN表2ON表1.栏位号=表2.栏位号)INNERJOIN表3ON表1.栏位号=表3.栏位号)INNERJOIN表4ONMember.栏位号=表4.栏位号)INNERJOIN表XONMember.栏位号=表X.栏位号

您只要套用该格式就可以了。

现成格式范例:

虽然我说得已经比较明白了,但为照顾初学者,我还是以本会员注册系统为例,提供一些现成的语法格式范例,大家只要修改其中的数据表名称和栏位名称即可。

连接两个数据表的用法:

语法格式可以概括为:

FROM表1INNERJOIN表2ON表1.栏位号=表2.栏位号

连接三个数据表的用法:

语法格式可以概括为:

FROM(表1INNERJOIN表2ON表1.栏位号=表2.栏位号)INNERJOIN表3ON表1.栏位号=表3.栏位号

连接四个数据表的用法:

语法格式可以概括为:

FROM((表1INNERJOIN表2ON表1.栏位号=表2.栏位号)INNERJOIN表3ON表1.栏位号=表3.栏位号)INNERJOIN表4ONMember.栏位号=表4.栏位号

连接五个数据表的用法:

语法格式可以概括为:

FROM(((表1INNERJOIN表2ON表1.栏位号=表2.栏位号)INNERJOIN表3ON表1.栏位号=表3.栏位号)INNERJOIN表4ONMember.栏位号=表4.栏位号)INNERJOIN表5ONMember.栏位号=表5.栏位号

连接六个数据表的用法:略,与上述联接方法类似,大家举一反三吧:)

从excel导入到access建立多表查询。最好首先建立表之间的关系,再修改SQL语句。这样不容易出错。