Java EE数据访问框架技术(第二章:Mybatis多表关系映射)

目录

一、多表关系表设计

二、一对一

三、表连接查询sql

内连接

左/右外连接


一、多表关系表设计

项目开发中,在进行数据库表结构设计时,会根据业务需求以及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表之间也存在着各种联系

多表关系主要由以下三种组成:

  • 一对一
  • 多对一(一对多)
  • 多对多

二、一对一

一对一通常表示两张表之间的数据是一一对应关系,在实际开发中通常用来做单表的拆分

例如:

用户表

基本信息:用户id,姓名,性别,手机号,邮箱

身份信息:生日,民族,身份证号码,发证单位,身份证有效期(开始时间 结束时间)

当一张表表示的字段较多,且常用的只有基本信息,身份信息使用较少的情况下,为了提高查询效率,可以将一张用户大表拆成两个小表;基本信息**-user表 身份证信息-user_card表**

此时,user表和user_card表就是一对一关系

一对一表关系中,为了维护数据的一一映射关系,通常在一张表中定义一个关联字段,通过该字段映射另一张表中的数据id

例如:

user表:

id,name,sex,mobile,email,card_id

user_card表:

id,birthday,nationality,idcard,issued,expire_begin,expire_end

其中user表的card_id列对应user_card表的id列

三、表连接查询sql

内连接

select 别名1.列名1,别名2.列名2,...

from 表1 别名1 inner join 表2 别名2

on 连接条件

其中:inner可以省略

内连接查询两个表都有的数据

左/右外连接

select 别名1.列名1,别名2.列名2,...

from 表1 别名1 left join 表2 别名2

on 连接条件
select 别名1.列名1,别名2.列名2,...

from 表1 别名1 right join 表2 别名2

on 连接条件

左/右外连接查询左/右表所有的数据

//1、通过左外连接试下查询所有用户的用户名和生日信息

select name,birthday

from t_user t1 left join t_user_card t2

on t1.card_id=t2.id
//2、通过内连接查询张三用户的身份证号码

select name,idcard

from t_user t1 inner join t_user_card t2

on t1.card_id=t2.id

where name='张三'
//3、通过右外连接查询所有身份证号码、用户名

select idcard,name

from t_user t1 RIGHT JOIN t_user_card t2

on t1.card_id=t2.id

相关推荐
一 乐2 小时前
二手交易平台|基于springboot + vue二手交易平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序
SelectDB2 小时前
同等资源下 Apache Doris 4.2 vs StarRocks 4.1.1:1TB SSB 与 TPC-H 性能实测
大数据·数据库·数据分析
这个DBA有点耶2 小时前
数据库集群与分布式架构:三条技术路线对比、金仓KES RAC实测数据与决策框架
数据库·程序员·架构
MayBaymax2 小时前
MongoDB 索引与事务
java·数据库·mongodb
SelectDB3 小时前
Doris vs ClickHouse:企业 OLAP 走向下一阶段,两种技术路线如何选择
大数据·数据库·数据分析
vx-程序开发3 小时前
【计算机毕设】django校园跑腿服务系统83141
java·数据库·vue.js·spring boot·spring·elasticsearch·django
一 乐3 小时前
养老院管理系统|基于springboot + vue养老院管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计
这个DBA有点耶4 小时前
InnoDB页结构深入:页分裂、页合并、填充因子——B+树底层机制全解析
数据库·mysql·架构
山岚的运维笔记4 小时前
mysql 专业笔记 -- 第 36 章:MySQL 管理
运维·数据库·笔记·后端·mysql·oracle·dba
阳光宅男@李光熠5 小时前
【电子通识】一起学习TDK的EMC基础——电池兼容设计方法概述
java·前端·数据库