`

多对多关系联合查询

 
阅读更多

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

在关系型数据库中通常通过三张表来表示这种多对多关系。即:项目表记录项目信息、雇员表记录雇员信息、中间表记录雇员、项目关系。在中间表中项目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
分享到:
评论

相关推荐

    ThinkPHP5联合(关联)查询、多条件查询与聚合查询实例详解

    在ThinkPHP5中,联合查询通常是指通过数据库中的外键关系,将两个或多个表关联起来进行查询。为了说明这一点,假设我们有两个表:`darling_project`(项目表)和`darling_version`(版本号表)。 **项目表结构**: `...

    SQL多表联合查询.rar

    SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言,而多表联合查询是SQL中一种重要的数据检索方法,尤其在处理复杂的数据关联时显得尤为重要。 在关系数据库中,数据通常分散在多个表中,每...

    mybatis联合查询

    在处理复杂的数据库关联查询时,MyBatis 提供了多种解决方案,包括一对一、一对多、多对一以及多对多关系的映射。下面将详细讲解这些概念以及如何在 MyBatis 中进行操作。 1. **一对一关联查询(One-to-One)**: ...

    hibernate多表联合查询

    ### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。...希望本文能对你理解Hibernate的多表联合查询有所帮助。

    多表联合查询

    通过对上述代码的分析,我们可以看到多表联合查询在Hibernate中的具体实现细节。这种方法不仅能够高效地整合不同表中的数据,还能够方便地进行分页展示,极大地提升了开发效率和用户体验。在实际项目开发中,熟练...

    HQL多对多的查询语句分析

    在HQL中,处理多对多关系查询通常涉及到联合表(junction table)的概念。联合表是在数据库层面创建的,用于存储两个表之间的关联信息。在Java代码中,这通常通过一个中间实体或集合来表示。例如,对于学生和课程的...

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

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

    组态王数据库多表联合查询教程及工程

    7.5KVADODBGrid 控件查询不同的数据库表格用户教程,多表联合查询教程

    EF6多对多,一对多关系映射样例代码

    在这个例子中,`Student`和`Course`实体通过`ICollection`属性相互关联,`OnModelCreating`方法中的`HasMany`和`WithMany`用于定义多对多关系,`Map`方法则用于指定联合表的列名和表名。 接下来,我们讨论一对多...

    java学习--多对多,一对多关系(学校与学生,学生与课程)

    在数据库设计中,一对多关系通常用外键实现,而多对多关系则需要一个联合主键的中间表。在Java中,这些对应于实体类的属性和集合,以及ORM框架中的映射配置。 此外,理解这些关系对于设计高效的数据结构和数据库...

    mysql数据库的多表设计和各种查询(连接查询\子查询\联合查询\报表查询),以及数据库备份和恢复

    3. 联合查询(UNION):联合查询用于合并两个或更多SELECT语句的结果集,但要求所有查询返回相同数量和类型的列。 4. 报表查询(Report Query):这类查询通常涉及聚合函数(如SUM, AVG, COUNT等)和GROUP BY语句,...

    MyBatis 多表查询之一对多、多对一、多对多以及数据库资料.rar

    本资料包主要涵盖了MyBatis中的一对多、多对一、多对多这三种关系的查询方法,并结合了相关的数据库知识。 首先,我们来了解MyBatis中的“一对多”关系。在数据库设计中,一对多关系意味着一个父表记录可以与多个子...

    上传一个带合计的联合查询(转别人的,与大家分享)

    Access提供了多种查询方式,其中之一就是联合查询,这在处理多个表的数据整合时非常有用。"上传一个带合计的联合查询"这个标题揭示了我们要讨论的主题——如何在Access中进行复杂的联合查询,并且包含计算字段。 ...

    EntityFramework 多关键词联合搜索一个字段

    本文将深入探讨如何使用Entity Framework(EF)实现多关键词联合搜索一个字段的功能。Entity Framework作为.NET框架中主流的对象关系映射(ORM)工具,允许开发者以面向对象的方式操作数据库,而无需关注底层的SQL...

    Mybatis实现多表联合查询和批量插入

    在实际开发中,经常需要对多个表进行联合查询,或者对大量数据进行批量插入。本文将详细介绍如何使用Mybatis实现多表联合查询和批量插入。 一、多表联合查询 在实际开发中,经常需要对多个表进行联合查询,例如,...

    mybatis之多对多

    2. **联合主键(Composite Key)**:由于多对多关系表通常由两个外键构成,因此可能需要用到联合主键,确保每条记录的唯一性。 3. **集合映射(Collection Mapping)**:在MyBatis的XML映射文件中,我们需要定义一...

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

    在易语言中,与ACCESS数据库进行交互是常见的操作,特别是涉及到多表关联查询时,能够帮助开发者获取更复杂的数据关系。 在ACCESS数据库中,多表关联查询是数据挖掘和分析的关键技术。它允许我们从多个表中提取数据...

    Hibernate ORM - 多对多双向连接表关联关系

    本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...

    MyBatis-Plus多表联合查询并且分页(3表联合)

    除了多表联合查询外,我们还可以使用 MyBatis-Plus 的分页功能来对查询结果进行分页。例如: ```java @Select("SELECT * FROM ai_model WHERE ai_model.application_id = #{applicationId}") @Join("ai_application...

    Test多表联合增删改查,struts两个JAVABEAN

    我们可以定义一对多、多对一或多对多的关系映射,简化多表操作。 对于Android开发,虽然与Web开发的主要技术栈不同,但两者在数据处理上有共通之处。例如,Android中的SQLite数据库也可以进行类似的多表操作,可以...

Global site tag (gtag.js) - Google Analytics