ACCESS数据库中如何实现多表联合查询?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACCESS数据库中如何实现多表联合查询?相关的知识,希望对你有一定的参考价值。

1、Access 数据库多表联合查询,每次连接之前须将连接符前面的内容放在括号里面,示例如:select 表a.字段1,表b.字段1,表c.字段1,表d.字段1 from ((表a inner join 表b on 表a.字段=表b.字段) inner join 表c on 表c.字段=表a.字段)inner join 表d on 表a.字段=表d.字段
2、如果每个联合字段不止一个可将on后面条件加(),如:select 表a.字段1,表b.字段1,表c.字段1,表d.字段1 from (表a inner join 表b on (表a.字段1=表b.字段1 and 表a.字段2=表b.字段2)) inner join 表c on 表c.字段=表a.字段
3、如果要一次联合一个表多次,但条件不同,可以每次连接此表时给此表换个别名,用别名操作即可,如:select aa.字段1,表b.字段1,表c.字段1,bb.字段2 from ((表a as aa inner join 表b on aa.字段1=表b.字段) inner join 表c on 表c.字段=表a.字段)inner join 表a as bb on 表a.字段=bb.字段2.
参考技术A 使用SQL语句可查询。支持标准SQL语句。 追问: 老师你好 我现在做了3个表 但是我不知道该怎么把它们连起来 实现查询 回答: SQL语句不会用,请学习SQL语句使用帮助。有具体的表,说你想如何查询,发我。我可以帮你看一下。 追问: 比如表1 是A公司从北京发往 天津 大连 青岛的运费,表2 是B公司从北京发往 天津 大连 青岛的运费 表3是C公司从北京 发往 天津 大连 青岛的运费。我该怎么做? 回答: 那你想如何查询? 追问: 是做一个表 把所有公司 启运地 目的地 100KG 300KG 500KG 输入数据好 还是分别每个公司做一个表 好 每个公司做一张表 维护 修改都比较方便 可我不知道 如果每个公司都做一张表 我该怎么把他们连接起来 共查询使用? 追问: 比如我要查询 不同公司 从 北京----天津 的运费 回答: 那要看数据量了。正确数据结构是将所有的数据统一放一张表中,添加公司字段用来区别。各公司数据可以分类查询可得。你目前这种做法,是将各类数据分别存放,再统一查询。这样对数据整体处理时就比较麻烦。 补充: 你的表联合主键为公司,始发地,目的地。即可。全部为一张表。这样你查询什么内容都可以。 追问: 那是不是只能做在一个表里面了? 回答: 做一个表,你分类查询方便。你把你的数据库发过来,我给你设计。 补充: Q:二七三四0二六8四。把你当前数据库发来,给你改数据库结构。 补充: 方式:二七三四0二六八四。加我。本回答被提问者采纳

hibernate实现多表联合查询

以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下。最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别。  

    hibernate很多实现都是靠喜欢配关系,但是如果两张表,数据量都非常大的时候,并不合适配关系。

    例如:student表和score表需要做联合查询。

    1)sql: select s.id,s.name,sc.score from student as s,score as sc where s.id = sc.userId;

    (字段都是用的数据库中字段名称)

    2)HQL: select s.id,s.name,sc.score from Student as s,Score as sc where s.id = sc.userId;

    (上面字段都是 javabean的属性)

     如果我们按1)查询的话,必须调用 session.createSQLQuery();方法

     如果按2)查询,还是调用 session.createQuery();

     只是要注意,平时我们查询的时候,例如:“from Student ”查询的结果集 封装的全都是student对象,但是2)执行的结果集里面不是对象,而是一系列数组。需要转换成需要的样式。

下面 是查询的一段代码:

Session session = getHibernateTemplate().getSessionFactory()
   .getCurrentSession();
   StringBuffer sb = new StringBuffer(" select user.username,user.truename,user.sex,user.idnum,user.level,s.sumScore from Score as s,Examuseras user where s.id.userId = user.id ");
   if(score != null){
    if(score.getExamId()!=null && !"".equals(score.getExamId())
      && !"null".equals(score.getExamId())){
     sb.append(" and s.examId =:examId ");
    }
    if(score.getExamPlace()!=null && !"".equals(score.getExamPlace())
      && !"null".equals(score.getExamPlace())){
     sb.append(" and s.examPlace =:examPlace ");
    }
    if(score.getUsername()!=null && !"".equals(score.getUsername())
      && !"null".equals(score.getUsername())){
     sb.append(" and s.username like:username ");
    }
   }
   sb.append(" order by s.sumScore desc ");
   Query q = session.createQuery(sb.toString());
   if(score != null){
    if(score.getExamId()!=null && !"".equals(score.getExamId())
      && !"null".equals(score.getExamId())){
     q.setParameter("examId",score.getExamId());
    }
    if(score.getExamPlace()!=null && !"".equals(score.getExamPlace())
      && !"null".equals(score.getExamPlace())){
     q.setParameter("examPlace",score.getExamPlace());
    }
    if(score.getUsername()!=null && !"".equals(score.getUsername())
      && !"null".equals(score.getUsername())){
     q.setParameter("username","%"+score.getUsername()+"%");
    }
   }
   List list = q.list();

需要将查询的结果集 进行一下转换:

List stuList = scoreService.findAllScore(queryScore, null); // 返回的结果集
   if(stuList != null && stuList.size()>0){
    list = new LinkedList();
    StudentScore st;
    for(int i = 0; i < stuList.size();i++){
     st = new StudentScore();
     Object[] object = (Object[])stuList.get(i);// 每行记录不在是一个对象 而是一个数组
     String userId =  (String)object[0];
     String username =  (String)object[1];
     String truename =  (String)object[2];
     String sex =  (String)object[3];
     String idnum =  (String)object[4];
     String level =  (String)object[5];
     Double sumScore =  Double.parseDouble(String.valueOf(object[6]));
     String paperId =  (String)object[7];
     // 重新封装在一个javabean里面
     st.setUserId(userId);
     st.setUsername(username);
     st.setTruename(truename);
     st.setIdnum(idnum);
     st.setLevel(DictSwitch.getValue("DICT_LEVEL",level));
     st.setSex(DictSwitch.getValue("DICT_SEX",sex));
     st.setPaperId(paperId);
     st.setSumScore(sumScore);
     st.setExamplace(DictSwitch.getValue("DICT_EXAMSTATION",examplace));
     list.add(st); // 最终封装在list中 传到前台。
    }

以上是关于ACCESS数据库中如何实现多表联合查询?的主要内容,如果未能解决你的问题,请参考以下文章

Access数据库中多表联合查询,并显示记录

Access的Left join多表联合查询

Access select where 数据库查询 多表联合查询

如何实现多表关联查询

vb SQL多表联合查询问题(Access数据库表)

hibernate实现多表联合查询