`

多对多关系联合查询

 
阅读更多

       一个项目允许多个雇员参加、每个雇员允许参加多个项目,所以项目和雇员的关系式多对多关系。

在关系型数据库中通常通过三张表来表示这种多对多关系。即:项目表记录项目信息、雇员表记录雇员信息、中间表记录雇员、项目关系。在中间表中项目id、雇员id作为联合主键。

建表sql语句如下:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for `em`

-- ----------------------------

DROP TABLE IF EXISTS `em`;

CREATE TABLE `em` (

  `eid` int(11) NOT NULL AUTO_INCREMENT,

  `ename` varchar(20) DEFAULT NULL,

  PRIMARY KEY (`eid`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

 

-- ----------------------------

-- Records of em

-- ----------------------------

INSERT INTO `em` VALUES ('1', 'zhangsan');

INSERT INTO `em` VALUES ('2', 'lisi');

INSERT INTO `em` VALUES ('3', 'wangwu');

INSERT INTO `em` VALUES ('4', 'maliu');

 

-- ----------------------------

-- Table structure for `mid`

-- ----------------------------

DROP TABLE IF EXISTS `mid`;

CREATE TABLE `mid` (

  `eid` int(11) NOT NULL DEFAULT '0',

  `pid` int(11) NOT NULL DEFAULT '0',

  PRIMARY KEY (`eid`,`pid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

-- ----------------------------

-- Records of mid

-- ----------------------------

INSERT INTO `mid` VALUES ('1', '1');

INSERT INTO `mid` VALUES ('1', '2');

INSERT INTO `mid` VALUES ('2', '1');

INSERT INTO `mid` VALUES ('2', '2');

INSERT INTO `mid` VALUES ('3', '2');

 

-- ----------------------------

-- Table structure for `pro`

-- ----------------------------

DROP TABLE IF EXISTS `pro`;

CREATE TABLE `pro` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `pname` varchar(20) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

 

-- ----------------------------

-- Records of pro

-- ----------------------------

INSERT INTO `pro` VALUES ('1', 'oa');

INSERT INTO `pro` VALUES ('2', 'erp');

INSERT INTO `pro` VALUES ('3', 'mail');

 

下面需求来了,要求查询出同时参加项目编号分别为1、2的人员信息。

sql语句如下:

select * from em where eid in (select rr.eid from ( select count(*) cun, eid from mid where pid in (1,2) group by eid) as rr where rr.cun>1)

 

Hiberante分页查询:

List<Em> ems= session.createCriteria(Em.class)
                         //必需创建一个别名,pros为Em中包 含的Pro的list.
                         .createAlias("pros","pros")
                         //id为传进来进行查询的项目ID
                         .add(Restrictions.eq("pros.id",new Integer(2)))
                         .setFirstResult(0)
                         .setMaxResult(2)
                         .list();

 

  • 大小: 1.5 KB
0
1
分享到:
评论

相关推荐

    Mybatis实现一对一、一对多关联查询

    Mybatis实现一对一、一对多关联查询,关联查询:多个表联合查询,只查询一次,通过resultMap里面的、标签配置一对一、一对多;涉及到的一对一、一对多关系: - 班级classes、班主任teacher是一对一的关系 - 班级...

    SQL语言查询基础:连接查询 联合查询 代码

    SQL语言查询基础:连接查询 通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,...

    易语言ACCESS数据库多表关联查询例程

    ACCESS数据库多表关联查询例程 系统结构:易语言ACCESS数据库多表关联查询例程源码,ACCESS数据库多表关联查询例程 ======窗口程序集1 | | | |------ _按钮1_被单击 | | | |------ _按钮2_被单击 | |

    Yii多表联合查询操作详解

    本文针对Yii多表联查进行汇总描述,供大家参考,具体内容如下 1、多表联查实现方法 有两种方式一种使用DAO写SQL语句实现,这种实现理解起来相对轻松,只要保证SQL语句不写错就行了。缺点也很明显,比较零散,而且不...

    MySQL 多表关联一对多查询实现取最新一条数据的方法示例

    主要介绍了MySQL 多表关联一对多查询实现取最新一条数据的方法,结合实例形式详细分析了MySQL 多表关联一对多查询实现取最新一条数据相关原理、实现方法与操作注意事项,需要的朋友可以参考下

    xQuery定性与定量空间联合查询组件

    在进行以MapX为平台的GIS开发中,经常会遇到进行空间方位关系和空间拓补关系以及空间距离关系的查询,该组件以MapX和空间定性推理组件为基础,集成了同时对属性数据库进行查询的方法,多方位实现了空间查询。

    Hibernate学习笔记_songjignhao_1

    包括:一对多双向关联关系、一对多双向自身关联关系、一对一关联关系(主键关联、外键关联)、一对多与一对一结合、多对多关联关系、Map、Set、List与Bag映射关系、查询排序(内存排序和数据库排序)、联合主键的映射...

    五、MySQL联合查询学习笔记(详解)

    9、 联合查询 union 联合 合并:将多条查询语句的结果合并成一个结果 语法: 查询语句1 UNION 查询语句2 UNION … 应用场景:要查询的结果来自多个表,且多个表之间没有直接的连接关系,但查询的信息相同 特点: 1、...

    小议ORACLE和MYSQL的联合查询差异.pdf

    小议ORACLE和MYSQL的联合查询差异.pdf

    端到端的基于知识图谱的问答系统,分为实体识别和关系分类两部,在BERT基础上做多任务联合训练。.zip

    构建知识图谱的过程通常包括数据抽取、知识融合、实体识别、关系抽取等多个步骤,涉及到自然语言处理、机器学习、数据库技术等多种技术手段。知识图谱的不断完善有助于实现从海量信息中挖掘深层次、有价值的知识,...

    Quicksql,为多数据源提供更简单、更安全、更快的统一SQL分析引擎.zip

    此外,一个sql查询可以连接或联合来自quicksql中多个数据存储的数据。例如,可以对一种情况执行统一的SQL查询,即一部分数据存储在ElasticSearch上,而另一部分数据存储在配置单元上。最重要的是qsql不依赖任何中间...

    数据结构与程序的关系

    5.3 数据结构与程序的关系服务器程序在对定票/领票进行操作时需对数据库数据库数据结构,也就是数据表进行查询和修改:在定票/领票过程中都需要对数据库中的所有表,进行联合查询、修改。

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...

    SQL(结构化查询语言)是用于管理和操作关系数据库的标准编程语言

    SQL(结构化查询语言)是用于管理和操作关系数据库的标准编程语言。当涉及到多表操作时,SQL 提供了各种功能,如连接(JOIN)、子查询、联合(UNION)等,以便从多个表中检索或操作数据。

    DbEntry.Net4.1教程

    目前,数据库部分已经支持多主键、多表联合查询、快速分页、隐式数据库事务、连贯API查询、ActiveRecord风格查询、动态对象、部分保 存、自动创建数据表、一对一、一对多、多对多关系等功能,具体实现请参阅 Samples...

    绿茵GIS地理信息管理与查询系统

    (3) 联合查询 根据空间信息和属性信息进行联合查询。 (4) 提供快速查找定位工具 通过地名、坐标、图幅号等多种方式定位到每个位置,查找到某类信息、某个图形要素和属性信息。 (5) 计算功能...

    96篇文献 知识图谱/时序知识图谱/故障溯源/故障诊断/三元组抽取/联合抽取

    知识图谱是一种以图形结构表示、存储和查询知识的技术,其中节点表示实体,边表示实体之间的关系。它能够整合多源异构数据,构建语义关联网络,为信息检索、智能推荐、数据挖掘等应用提供了强大支持。 知识图谱在...

    MySQL笔试题一条语句解决问题多表联查聚合查询

    中等难度笔试题,包括select / insert / update / delete 语法...多表联合查询,排序、分组等功能运用 包括但不限于MySQL,也可推广至Oracle、DB2等常见关系型数据库 考验的包括基本的CRUD水平,以及边界情况的判断处理

    androidSqlite

    sqlite多表联合查询,增加,android多对一的映射关系

Global site tag (gtag.js) - Google Analytics