SQL多表联合查询(Access数据库表)
2012-04-13 18:24
162 查看
条件:Access数据库的三个表,a表、b表、c表,三个表结构不同,其中都有字段ID,a表为主表,其中的ID不一定b表、c表中都存在,建立此三个表的联合查询。
根据SQL语法,通过连接运算符可以实现多个表查询。连接可以在Select 语句的FROM子句或Where子句中建立,在FROM子句中指出连接时有助于将连接操作与Where子句中的搜索条件区分开来。
SQL-92标准所定义的FROM子句的连接语法格式为:
FROM join_table join_type join_table
[ON (join_condition)]
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
前提:假设已存在外部数据库,并且已经打开包含a表、b表、c表三表的Mdb数据库。根据SQL语法规则,写出如下代码:
1. 内查询(查询三个表中均存在的ID记录,任何一个表中不存在的id将均被过滤掉)
.版本 2
记录集句柄 = 外部数据库1.查询 (“select * from a表 inner join b表 on a表.id=b表.id inner join c表 on a表.id=c表.id ” )'+ “ where ……”) ' where 条件暂时省略
2. 外查询(left join ,列出左表中的全部ID,不管b、c表中有无该ID)
.版本 2
记录集句柄 = 外部数据库1.查询 (“select * from a表 left join b表 on a表.id=b表.id left join c表 on a表.id=c表.id ” )'+ “ where ……”) ' where 条件暂时省略
可是运行结果均为查询失败,如果仅仅两个表,查询则成功,三个或三个以上的表就会失败。
经过一天的捉摸,终于弄明白了问题原因,问题不在SQl,也不在易语言,而是没弄明白Access对SQL的支持,将上述代码改为如下代码,问题解决!
.版本 2
记录集句柄 = 外部数据库1.查询 (“select * from (a表 inner join b表 on a表.id=b表.id) inner join c表 on a表.id=c表.id ”) ' + “ where ……”) ' where 条件暂时省略
.版本 2
记录集句柄 = 外部数据库1.查询 (“select * from (a表 left join b表 on a表.id=b表.id) left join c表 on a表.id=c表.id ”) ' + “ where ……”) ' where 条件暂时省略
如果有四张表,可以写为:
.版本 2
记录集句柄 = 外部数据库1.查询 (“select * from ((a表 inner join b表 on a表.id=b表.id) inner join c表 on a表.id=c表.id) inner join d表 on a表.id=d表.id ”) ' + “ where ……”) ' where 条件暂时省略
问题很简单,想不到位则很头疼,为了众弟兄少走弯路,故尔拿出分享!是踩还是顶,随大家心意!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qq110216/archive/2008/11/06/3234944.aspx
根据SQL语法,通过连接运算符可以实现多个表查询。连接可以在Select 语句的FROM子句或Where子句中建立,在FROM子句中指出连接时有助于将连接操作与Where子句中的搜索条件区分开来。
SQL-92标准所定义的FROM子句的连接语法格式为:
FROM join_table join_type join_table
[ON (join_condition)]
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
前提:假设已存在外部数据库,并且已经打开包含a表、b表、c表三表的Mdb数据库。根据SQL语法规则,写出如下代码:
1. 内查询(查询三个表中均存在的ID记录,任何一个表中不存在的id将均被过滤掉)
.版本 2
记录集句柄 = 外部数据库1.查询 (“select * from a表 inner join b表 on a表.id=b表.id inner join c表 on a表.id=c表.id ” )'+ “ where ……”) ' where 条件暂时省略
2. 外查询(left join ,列出左表中的全部ID,不管b、c表中有无该ID)
.版本 2
记录集句柄 = 外部数据库1.查询 (“select * from a表 left join b表 on a表.id=b表.id left join c表 on a表.id=c表.id ” )'+ “ where ……”) ' where 条件暂时省略
可是运行结果均为查询失败,如果仅仅两个表,查询则成功,三个或三个以上的表就会失败。
经过一天的捉摸,终于弄明白了问题原因,问题不在SQl,也不在易语言,而是没弄明白Access对SQL的支持,将上述代码改为如下代码,问题解决!
.版本 2
记录集句柄 = 外部数据库1.查询 (“select * from (a表 inner join b表 on a表.id=b表.id) inner join c表 on a表.id=c表.id ”) ' + “ where ……”) ' where 条件暂时省略
.版本 2
记录集句柄 = 外部数据库1.查询 (“select * from (a表 left join b表 on a表.id=b表.id) left join c表 on a表.id=c表.id ”) ' + “ where ……”) ' where 条件暂时省略
如果有四张表,可以写为:
.版本 2
记录集句柄 = 外部数据库1.查询 (“select * from ((a表 inner join b表 on a表.id=b表.id) inner join c表 on a表.id=c表.id) inner join d表 on a表.id=d表.id ”) ' + “ where ……”) ' where 条件暂时省略
问题很简单,想不到位则很头疼,为了众弟兄少走弯路,故尔拿出分享!是踩还是顶,随大家心意!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qq110216/archive/2008/11/06/3234944.aspx
相关文章推荐
- 又一个通用分页存储过程,支持表别名,多表联合查询SQL语句
- SQL--联合查询【Union】
- SQL 联合查询 + XML解析
- sql left join 联合查询示例
- SQL三表联合查询
- sql-多表联合查询
- sql笔记(联合,连接查询)
- SQL联合查询:子表任一记录与主表联合查询
- Access数据库中的日期查询SQL
- Sql中联合查询中的”子查询返回的值不止一个“的问题
- SQL联合查询中的关键语法
- sql 联合查询的 优劣比较
- Hibernate Dao中直接使用sql实现复杂的多表联合查询
- 2015.7.30 第十五课 sql(新建数据库、创建表、注释、查询语句、新增、更新、删除、联合查询)
- Sql联合查询
- SQL 语句与性能之联合查询和联合分类查询
- Sql联合查询
- 20141104--SQL连接查询,联合查询
- 关于sql多表差异化联合查询的问题
- SQL 多表联合查询