一个项目允许多个雇员参加、每个雇员允许参加多个项目,所以项目和雇员的关系式多对多关系。
在关系型数据库中通常通过三张表来表示这种多对多关系。即:项目表记录项目信息、雇员表记录雇员信息、中间表记录雇员、项目关系。在中间表中项目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)))
.list();
相关推荐
在ThinkPHP5中,联合查询通常是指通过数据库中的外键关系,将两个或多个表关联起来进行查询。为了说明这一点,假设我们有两个表:`darling_project`(项目表)和`darling_version`(版本号表)。 **项目表结构**: `...
SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言,而多表联合查询是SQL中一种重要的数据检索方法,尤其在处理复杂的数据关联时显得尤为重要。 在关系数据库中,数据通常分散在多个表中,每...
在处理复杂的数据库关联查询时,MyBatis 提供了多种解决方案,包括一对一、一对多、多对一以及多对多关系的映射。下面将详细讲解这些概念以及如何在 MyBatis 中进行操作。 1. **一对一关联查询(One-to-One)**: ...
### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。...希望本文能对你理解Hibernate的多表联合查询有所帮助。
通过对上述代码的分析,我们可以看到多表联合查询在Hibernate中的具体实现细节。这种方法不仅能够高效地整合不同表中的数据,还能够方便地进行分页展示,极大地提升了开发效率和用户体验。在实际项目开发中,熟练...
在HQL中,处理多对多关系查询通常涉及到联合表(junction table)的概念。联合表是在数据库层面创建的,用于存储两个表之间的关联信息。在Java代码中,这通常通过一个中间实体或集合来表示。例如,对于学生和课程的...
Mybatis实现一对一、一对多关联查询,关联查询:多个表联合查询,只查询一次,通过resultMap里面的、标签配置一对一、一对多;涉及到的一对一、一对多关系: - 班级classes、班主任teacher是一对一的关系 - 班级...
7.5KVADODBGrid 控件查询不同的数据库表格用户教程,多表联合查询教程
在这个例子中,`Student`和`Course`实体通过`ICollection`属性相互关联,`OnModelCreating`方法中的`HasMany`和`WithMany`用于定义多对多关系,`Map`方法则用于指定联合表的列名和表名。 接下来,我们讨论一对多...
在数据库设计中,一对多关系通常用外键实现,而多对多关系则需要一个联合主键的中间表。在Java中,这些对应于实体类的属性和集合,以及ORM框架中的映射配置。 此外,理解这些关系对于设计高效的数据结构和数据库...
3. 联合查询(UNION):联合查询用于合并两个或更多SELECT语句的结果集,但要求所有查询返回相同数量和类型的列。 4. 报表查询(Report Query):这类查询通常涉及聚合函数(如SUM, AVG, COUNT等)和GROUP BY语句,...
本资料包主要涵盖了MyBatis中的一对多、多对一、多对多这三种关系的查询方法,并结合了相关的数据库知识。 首先,我们来了解MyBatis中的“一对多”关系。在数据库设计中,一对多关系意味着一个父表记录可以与多个子...
Access提供了多种查询方式,其中之一就是联合查询,这在处理多个表的数据整合时非常有用。"上传一个带合计的联合查询"这个标题揭示了我们要讨论的主题——如何在Access中进行复杂的联合查询,并且包含计算字段。 ...
本文将深入探讨如何使用Entity Framework(EF)实现多关键词联合搜索一个字段的功能。Entity Framework作为.NET框架中主流的对象关系映射(ORM)工具,允许开发者以面向对象的方式操作数据库,而无需关注底层的SQL...
在实际开发中,经常需要对多个表进行联合查询,或者对大量数据进行批量插入。本文将详细介绍如何使用Mybatis实现多表联合查询和批量插入。 一、多表联合查询 在实际开发中,经常需要对多个表进行联合查询,例如,...
2. **联合主键(Composite Key)**:由于多对多关系表通常由两个外键构成,因此可能需要用到联合主键,确保每条记录的唯一性。 3. **集合映射(Collection Mapping)**:在MyBatis的XML映射文件中,我们需要定义一...
在易语言中,与ACCESS数据库进行交互是常见的操作,特别是涉及到多表关联查询时,能够帮助开发者获取更复杂的数据关系。 在ACCESS数据库中,多表关联查询是数据挖掘和分析的关键技术。它允许我们从多个表中提取数据...
本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...
除了多表联合查询外,我们还可以使用 MyBatis-Plus 的分页功能来对查询结果进行分页。例如: ```java @Select("SELECT * FROM ai_model WHERE ai_model.application_id = #{applicationId}") @Join("ai_application...
我们可以定义一对多、多对一或多对多的关系映射,简化多表操作。 对于Android开发,虽然与Web开发的主要技术栈不同,但两者在数据处理上有共通之处。例如,Android中的SQLite数据库也可以进行类似的多表操作,可以...