Foxtable(狐表)用户栏目专家坐堂 → 如何查询sql数据库中的多表数据


  共有28455人关注过本帖树形打印复制链接

主题:如何查询sql数据库中的多表数据

帅哥哟,离线,有人找我吗?
唐尸三摆手
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
如何查询sql数据库中的多表数据  发帖心情 Post By:2008/9/7 20:06:00 [只看该作者]

  狐狸他爹,我想将数据源sql server连接到FOXTABLE中,然后将后台几个数据的表中部分字段数据提取放到一个表中,并将查询结果显示到FOXTABLE中,请问如何能够实现?请指教!

 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2008/9/7 20:39:00 [只看该作者]

、多表查询

有的时候,你可能希望查询表的列来自于多个表,可以通过JOIN语句来实现这样的功能。JOIN语句可以让你从已经定义了相互关系的工作表中检索记录,而不用管记录和工作表之间的关系是一对一、一对多还是多对多。

语法:

SELECT 字段列表 FROM 表1 INNER JOIN 表2 ON 表1.列名 = 表2 .列名

因为字段来自于两个表,所以如果对于两个表都有的字段,必须明确表的名称。
ON关键词指定两个表通过那一列进行连接,指定的字段必须具备相同的数据类型和长度。

示例:

SELECT 订单明细.*, 产品名称 FROM 订单明细 INNER JOIN 产品 ON 订单明细.产品ID = 产品.产品ID ORDER BY 订单ID

上述语句生成的查询表,包括订单明细的所有列,以及该订单明细对应的产品名称(来源于产品表)

INNER JOIN要求两个表必须都有对应的记录,才会在查询表中生成记录。你还可以用LEFT JOIN 或者 RIGHT JOIN,前者只要求左边的表有对应的记录即可,后者只要求右边的表有对应的记录即可。

数据不仅可以来自于两个表,还可以来自于更多的表,例如下面的语句:

SELECT 订购日期, 订单明细.*, 产品名称 FROM (订单明细 INNER JOIN 产品 ON 订单明细.产品ID = 产品.产品ID) INNER JOIN 订单 ON 订单明细.订单ID = 订单.订单ID ORDER BY 订购日期

上面的查询表的列来自于三个表,其中订购日期来自于订单表,产品名称来自于产品表,其余来自订单明细表。

下面的查询,列来自于四个表:

SELECT 订购日期,公司名称,产品名称, 数量, 订单明细.单价, 折扣, (数量 * 订单明细.单价 * (1-折扣)) AS 金额 FROM ((订单明细 INNER JOIN 产品 ON 订单明细.产品ID = 产品.产品ID) INNER JOIN 订单 ON 订单明细.订单ID = 订单.订单ID) INNER JOIN 客户 ON 订单.客户ID = 客户.客户ID

在上面的查询中,因为产品表和订单明细表都有单价列,所以字段列表中对于单价列的引用,要明确引用的是哪一个表的单价列,例如:订单明细.单价

此外,在有多个JOIN语句的情况下,靠前的JOIN语句要用圆括号括起来,如前面的例子所示。


 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2008/9/7 21:18:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.table

我学习SQL时间也不长,可能效率不是最高的,参考一下吧

 回到顶部
帅哥哟,离线,有人找我吗?
twt3485
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:60 积分:392 威望:0 精华:0 注册:2008/8/31 21:40:00
  发帖心情 Post By:2008/9/7 21:53:00 [只看该作者]

建议LXL版主,为帮助初学者,希望你能以示例做一个教程,把未入门的网友引进门,一步一步从制表开始,讲解如何入手,注意那些问题,怎样做,最好带图例,由浅入深,完成一个示例的全部制作过程.谢谢你.

 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2008/9/7 22:10:00 [只看该作者]

以下是引用twt3485在2008-9-7 21:53:00的发言:
建议LXL版主,为帮助初学者,希望你能以示例做一个教程,把未入门的网友引进门,一步一步从制表开始,讲解如何入手,注意那些问题,怎样做,最好带图例,由浅入深,完成一个示例的全部制作过程.谢谢你.

我对狐表也是还没完全弄懂,教程都没完整的看完一遍。
一个完整的程序都没做出来。
上次想把易表里面的图书管理系统给移植过来,可惜每次做一会,就停一会,一直没连续的时间完成。

[此贴子已经被作者于2008-9-7 22:36:44编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2008/9/8 12:25:00 [只看该作者]

以下是引用lxl在2008-9-7 20:39:00的发言:

、多表查询

有的时候,你可能希望查询表的列来自于多个表,可以通过JOIN语句来实现这样的功能。JOIN语句可以让你从已经定义了相互关系的工作表中检索记录,而不用管记录和工作表之间的关系是一对一、一对多还是多对多。

语法:

SELECT 字段列表 FROM 表1 INNER JOIN 表2 ON 表1.列名 = 表2 .列名

因为字段来自于两个表,所以如果对于两个表都有的字段,必须明确表的名称。
ON关键词指定两个表通过那一列进行连接,指定的字段必须具备相同的数据类型和长度。


请问这段说明对外部表sql-sever数据查询也同样适用吗

[此贴子已经被作者于2008-9-8 12:25:28编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2008/9/8 14:23:00 [只看该作者]

以下是引用唐尸三摆手在2008-9-8 12:25:00的发言:

请问这段说明对外部表sql-sever数据查询也同样适用吗

[此贴子已经被作者于2008-9-8 12:25:28编辑过]

适用
只要帮助文件里面没有用红字特别说明的地方就是通用的


 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2008/9/8 20:31:00 [只看该作者]

select a.code,b.name,c.deptcode from a,b,c where a.code=b.code and a.code=c.itemcode


这条语句在SQL 查询管理器中能够正常执行,在FOXTABLE增加外部查询表的预览窗口中也可以执行,为什么保存成表时报错?

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2008/9/8 20:51:00 [只看该作者]

以下是引用唐尸三摆手在2008-9-8 20:31:00的发言:
select a.code,b.name,c.deptcode from a,b,c where a.code=b.code and a.code=c.itemcode


这条语句在SQL 查询管理器中能够正常执行,在FOXTABLE增加外部查询表的预览窗口中也可以执行,为什么保存成表时报错?


这是一个bug,今天晚上已经处理好,明天的更新,将不再有这个问题。


 回到顶部