Java实现数据库表中的七种连接【Mysql】

Java实现数据库表中的七种连接【Mysql】

  • 前言
  • 版权
  • 推荐
  • Java实现数据库表中的七种连接
    • 左外连接
    • 右外连接
    • 其他连接
  • 附录
    • 七种连接
    • SQL测试
    • Java测试
      • 转换方法
      • 类 Cla1
      • 类 Cla2
      • 类Cla3
  • 最后

前言

2023-8-4 16:51:42

以下内容源自《【Mysql】》
仅供学习交流使用

版权

禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://blog.csdn.net/qq_51625007
禁止其他平台发布时删除以上此话

推荐

Java实现数据库表中的七种连接

左外连接

  /*** 左外连接* 计算*     SELECT cla1.`id`,cla1.`type`,cla2.`name`*     FROM cla1*     LEFT JOIN cla2*     ON cla1.`id`=cla2.`id`*     (Where cla2.id IS NULL);** @param list1* @param list2* @param isNull 有没有括号中的IS NULL这条语句* @param out 输出吗?* @return*/public static  List<Cla3> leftJoin(List<Cla3> list1, List<Cla3> list2,boolean isNull,boolean out) {List<Cla3> leftJoin=new ArrayList<>();//左表遍历list1.forEach(c1->{//在右表中有没有找到AtomicBoolean flag= new AtomicBoolean(false);list2.forEach(c2->{//找到了if(c1.id.equals(c2.id)){//如果cla2.id is null,就不需要添加if (!isNull) {leftJoin.add(new Cla3(c1.id, c1.type, c2.name));}flag.set(true);}});//没有找到添加 右表属性 NULLif(!flag.get()){leftJoin.add(new Cla3(c1.id,c1.type,"null"));}});return leftJoin;}

右外连接

    /*** 右外连接* 计算*     SELECT cla2.`id`,cla1.`type`,cla2.`name`*     FROM cla1*     RIGHT JOIN cla2*     ON cla1.`id`=cla2.`id`*     (WHERE cla1.`id` IS NULL);** @param list1* @param list2* @param isNull 有没有括号中的IS NULL这条语句* @return*/public static  List<Cla3> rightJoin(List<Cla3> list1, List<Cla3> list2,boolean isNull,boolean out) {List<Cla3> rightJoin=new ArrayList<>();//右表遍历list2.forEach(c2->{//在左表中有没有找到AtomicBoolean flag= new AtomicBoolean(false);list1.forEach(c1->{//找到了if(c1.id.equals(c2.id)){//如果cla1.id is null,就不需要添加if (!isNull){rightJoin.add(new Cla3(c2.id, c1.type,c2.name));}flag.set(true);}});//没有找到添加 左表属性 NULLif(!flag.get()){rightJoin.add(new Cla3(c2.id,"null",c2.name));}});return rightJoin;}

其他连接

外连接* 左外+右外* 右外+左外
内连接* 左外-左外ISNULL* 右外-右外ISNULL
外连接-内连接

附录

七种连接

MySQL笔记:第06章_多表查询

在这里插入图片描述

SQL测试

CREATE DATABASE cla;USE cla;CREATE TABLE cla1(`id` 	VARCHAR(10),`type` 	VARCHAR(10)
);CREATE TABLE cla2(`id` 	VARCHAR(10),`name` 	VARCHAR(10)
);INSERT INTO cla1 VALUES('22','cde');
INSERT INTO cla1 VALUES('11','abc');
INSERT INTO cla1 VALUES('44','cdef');
INSERT INTO cla1 VALUES('55','cdefg');INSERT INTO cla2 
VALUES
('11','name1'),
('22','name2'),
('33','name3'),
('44','name4'),
('aa','nameaa');#leftJoin 
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
LEFT JOIN cla2
ON cla1.`id`=cla2.`id`
/*
id	type	name
22	cde	name2
11	abc	name1
44	cdef	name4
55	cdefg	\N
*/#leftJoin isnull
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
LEFT JOIN cla2
ON cla1.`id`=cla2.`id`
WHERE cla2.`id` IS NULL;
/*
id	type	name
55	cdefg	\N
*/#rightJoin 
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla1
RIGHT JOIN cla2
ON cla1.`id`=cla2.`id`
/*
id	type	name
11	abc	name1
22	cde	name2
33	\N	name3
44	cdef	name4
aa	\N	nameaa
*/#rightJoin ISNULL
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla1
RIGHT JOIN cla2
ON cla1.`id`=cla2.`id`
WHERE cla1.`id` IS NULL;
/*
id	type	name
33	\N	name3
aa	\N	nameaa
*/#innerJoin leftBefore
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
INNER JOIN cla2
ON cla1.`id`=cla2.`id`
/*
id	type	name
11	abc	name1
22	cde	name2
44	cdef	name4
*/#innerJoin rightBefore
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla2
INNER JOIN cla1
ON cla2.`id`=cla1.`id`
/*
id	type	name
11	abc	name1
22	cde	name2
44	cdef	name4
*/#outJoin leftBefore
#左1+右2
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
LEFT JOIN cla2
ON cla1.`id`=cla2.`id`
UNION ALL
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla1
RIGHT JOIN cla2
ON cla1.`id`=cla2.`id`
WHERE cla1.`id` IS NULL;
/*
id	type	name
22	cde	name2
11	abc	name1
44	cdef	name4
55	cdefg	\N
33	\N	name3
aa	\N	nameaa
*/#outJoin rightBefore
#右1+左2
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla1
RIGHT JOIN cla2
ON cla1.`id`=cla2.`id`
UNION ALL
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
LEFT JOIN cla2
ON cla1.`id`=cla2.`id`
WHERE cla2.`id` IS NULL;
/*
id	type	name
11	abc	name1
22	cde	name2
33	\N	name3
44	cdef	name4
aa	\N	nameaa
55	cdefg	\N
*/

Java测试

转换方法


package test.algo;import test.algo.main2.Cla1;
import test.algo.main2.Cla2;
import test.algo.main2.Cla3;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;public class testJoin {static List<Cla1> claList1 = new ArrayList<>();static List<Cla2> claList2 = new ArrayList<>();static List<Cla3> list1 = new ArrayList<>();static List<Cla3> list2 = new ArrayList<>();public static void main(String[] args) {test();init(claList1,claList2);leftJoin(list1, list2,false,true);/*{id: 22, type: cde, name: name2}{id: 11, type: abc, name: name1}{id: 44, type: cdef, name: name4}{id: 55, type: cdefg, name: null}*/leftJoin(list1, list2,true,true);;/*{id: 55, type: cdefg, name: null}*/rightJoin(list1, list2,false,true);/*{id: 11, type: abc, name: name1}{id: 22, type: cde, name: name2}{id: 33, type: null, name: name3}{id: 44, type: cdef, name: name4}{id: aa, type: null, name: nameaa}*/rightJoin(list1, list2,true,true);/*{id: 33, type: null, name: name3}{id: aa, type: null, name: nameaa}*/outJoin(list1, list2,true,true);/*{id: 22, type: cde, name: name2}{id: 11, type: abc, name: name1}{id: 44, type: cdef, name: name4}{id: 55, type: cdefg, name: null}{id: 33, type: null, name: name3}{id: aa, type: null, name: nameaa}*/outJoin(list1, list2,false,true);/*{id: 11, type: abc, name: name1}{id: 22, type: cde, name: name2}{id: 33, type: null, name: name3}{id: 44, type: cdef, name: name4}{id: aa, type: null, name: nameaa}{id: 55, type: cdefg, name: null}*/innerJoin(list1,list2,true,true);/*{id: 22, type: cde, name: name2}{id: 11, type: abc, name: name1}{id: 44, type: cdef, name: name4}*/innerJoin(list1,list2,false,true);/*{id: 11, type: abc, name: name1}{id: 22, type: cde, name: name2}{id: 44, type: cdef, name: name4}*/outJoin_InnerJoin(list1,list2,true,true);/*{id: 55, type: cdefg, name: null}{id: 33, type: null, name: name3}{id: aa, type: null, name: nameaa}*/outJoin_InnerJoin(list1,list2,false,true);/*{id: 33, type: null, name: name3}{id: aa, type: null, name: nameaa}{id: 55, type: cdefg, name: null}*/}/*** 初始两个表中的数据*/public static void test(){claList1.add(new Cla1("22", "cde"));claList1.add(new Cla1("11", "abc"));claList1.add(new Cla1("44", "cdef"));claList1.add(new Cla1("55", "cdefg"));claList2.add(new Cla2("11", "name1"));claList2.add(new Cla2("22", "name2"));claList2.add(new Cla2("33", "name3"));claList2.add(new Cla2("44", "name4"));claList2.add(new Cla2("aa", "nameaa"));}/*** 初始结果表中的数据*/public static void init(List<Cla1> claList1, List<Cla2> claList2){claList1.forEach(cla1 -> list1.add(new Cla3(cla1.getId(), cla1.getType(), "null")));claList2.forEach(cla2 -> list2.add(new Cla3(cla2.getId(), "null", cla2.getName())));}/***外连接-内连接* @param list1* @param list2* @param leftBefore 左边在前* @param out 是否输出* @return*/public static List<Cla3> outJoin_InnerJoin(List<Cla3> list1, List<Cla3> list2,boolean leftBefore,boolean out){List<Cla3> outJoin_InnerJoin=new ArrayList<>();outJoin_InnerJoin.addAll(outJoin(list1, list2, leftBefore, false));outJoin_InnerJoin.removeAll(innerJoin(list1, list2, leftBefore, false));if(out){System.out.println("--------------------outJoin_InnerJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");outJoin_InnerJoin.forEach(System.out::println);System.out.println("--------------------outJoin_InnerJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");}return outJoin_InnerJoin;}/*** 内连接* 左外-左外ISNULL* 右外-右外ISNULL* @param list1* @param list2* @param leftBefore 左边在前* @param out 是否输出* @return*/public static List<Cla3> innerJoin(List<Cla3> list1, List<Cla3> list2,boolean leftBefore,boolean out){List<Cla3> innerJoin=new ArrayList<>();if(leftBefore){innerJoin.addAll(leftJoin(list1, list2, false, false));innerJoin.removeAll(leftJoin(list1, list2, true, false));}else {innerJoin.addAll(rightJoin(list1, list2, false, false));innerJoin.removeAll(rightJoin(list1, list2, true, false));}if(out){System.out.println("--------------------innerJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");innerJoin.forEach(System.out::println);System.out.println("--------------------innerJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");}return innerJoin;}/*** 左外连接* 计算*     SELECT cla1.`id`,cla1.`type`,cla2.`name`*     FROM cla1*     LEFT JOIN cla2*     ON cla1.`id`=cla2.`id`*     (Where cla2.id IS NULL);** @param list1* @param list2* @param isNull 有没有括号中的IS NULL这条语句* @param out 输出吗?* @return*/public static  List<Cla3> leftJoin(List<Cla3> list1, List<Cla3> list2,boolean isNull,boolean out) {List<Cla3> leftJoin=new ArrayList<>();list1.forEach(c1->{AtomicBoolean flag= new AtomicBoolean(false);list2.forEach(c2->{if(c1.id.equals(c2.id)){if (!isNull) {leftJoin.add(new Cla3(c1.id, c1.type, c2.name));}flag.set(true);}});if(!flag.get()){leftJoin.add(new Cla3(c1.id,c1.type,"null"));}});if(out){System.out.println("--------------------leftJoin---"+((isNull)?"isNull":"----")+"-------------------------------");leftJoin.forEach(System.out::println);System.out.println("--------------------leftJoin---"+((isNull)?"isNull":"----")+"-------------------------------");System.out.println();}return leftJoin;}/*** 右外连接* 计算*     SELECT cla2.`id`,cla1.`type`,cla2.`name`*     FROM cla1*     RIGHT JOIN cla2*     ON cla1.`id`=cla2.`id`*     (WHERE cla1.`id` IS NULL);** @param list1* @param list2* @param isNull 有没有括号中的IS NULL这条语句* @return*/public static  List<Cla3> rightJoin(List<Cla3> list1, List<Cla3> list2,boolean isNull,boolean out) {List<Cla3> rightJoin=new ArrayList<>();list2.forEach(c2->{AtomicBoolean flag= new AtomicBoolean(false);list1.forEach(c1->{if(c1.id.equals(c2.id)){if (!isNull){rightJoin.add(new Cla3(c2.id, c1.type,c2.name));}flag.set(true);}});if(!flag.get()){rightJoin.add(new Cla3(c2.id,"null",c2.name));}});if (out){System.out.println("--------------------rightJoin---"+((isNull)?"isNull":"----")+"-------------------------------");rightJoin.forEach(System.out::println);System.out.println("--------------------rightJoin---"+((isNull)?"isNull":"----")+"-------------------------------");System.out.println();}return rightJoin;}/*** 外连接* 左外+右外* 右外+左外*     SELECT **     FROM tableA A*     FULL OUTER JOIN TableB B*     ON A.key=B.key** @param leftBefore 结果集左表在前还是右边在前* @param out 输出吗* @return*/public static List<Cla3> outJoin(List<Cla3> list1, List<Cla3> list2,boolean leftBefore,boolean out) {List<Cla3> outJoin=new ArrayList<>();List<Cla3> leftJoin = leftJoin(list1, list2,!leftBefore,false);List<Cla3> rightJoin = rightJoin(list1, list2,leftBefore,false);if (leftBefore){outJoin.addAll(leftJoin);outJoin.addAll(rightJoin);}else {outJoin.addAll(rightJoin);outJoin.addAll(leftJoin);}if(out){System.out.println("--------------------outJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");outJoin.forEach(System.out::println);System.out.println("--------------------outJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");}return outJoin;}}

类 Cla1

package test.algo.main2;public class Cla1 {public String id;public String type;public Cla1(String id, String type) {this.id = id;this.type = type;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getType() {return type;}public void setType(String type) {this.type = type;}@Overridepublic String toString() {return "{id: " + id + ", type: " + type + "}";}
}

类 Cla2

package test.algo.main2;public class Cla2 {public String id;public String name;public Cla2(String id, String name) {this.id = id;this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "{id: " + id + ", name: " + name + "}";}
}

类Cla3

需要重写equals()
id==id

package test.algo.main2;import java.util.Objects;public class Cla3 {public String id;public String name;public String type;public Cla3(String id, String type, String name) {this.id = id;this.type = type;this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getType() {return type;}public void setType(String type) {this.type = type;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Cla3 cla3 = (Cla3) o;return Objects.equals(id, cla3.id);}@Overridepublic int hashCode() {return Objects.hash(id);}@Overridepublic String toString() {return "{id: " + id + ", type: " + type + ", name: " + name + "}";}
}

最后

2023-8-4 17:04:28

我们都有光明的未来

祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/54188.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

macOS下Django环境搭建

1. macOS升级pip /Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip 2. 卸载Python3.9.5版本 $ sudo rm -rf /usr/local/bin/python3 $ sudo rm -rf /usr/local/bin/pip3 $ sudo rm -rf /Library/Frameworks/Python.framework 3. 安装P…

笔记本更换固态硬盘和清灰更换硅脂经历分享

本文仅供参考。 目录 购买 固态硬盘和固态硬盘盒 拆机工具 系统迁移 拆机 螺丝花了不要急 换硬盘 清灰 换导热硅脂 处理分区 购买 固态硬盘和固态硬盘盒 自己选购硬盘的时候一定要和自己电脑硬盘型号匹配。至于如何查看自己电脑硬盘型号&#xff0c;这个可以去自己…

Mac应用程序无法打开或文件损坏的处理方法

1. 打开系统偏好设置界面&#xff0c;进入安全性与隐私&#xff0c;如下图所示&#xff1a; 2. 点按左下角的锁头图标&#xff0c;解锁更改权限 3. 将允许从以下位置下载的应用&#xff0c;更改为 “ 任何来源 ” &#xff0c;然后再打开应用即可 有朋友就说了&#xff0c;我这…

一、ADAS技术概述

根据《国家车联网产业标准体系建设指南》对智能网联汽车定义&#xff1a;智能网联汽车是指搭载先进的车载传感器、控制器、执行器等装置&#xff0c;并融合现代通信与网络技术&#xff0c;实现车与X&#xff08;人、车、路、云端等&#xff09;智能信息交换、共享&#xff0c;具…

css在线代码生成器

这里收集了许多有意思的css效果在线代码生成器适合每一位前端开发者 布局&#xff0c;效果类&#xff1a; 网格生成器https://cssgrid-generator.netlify.app/ CSS Grid Generator可帮助开发人员使用CSS Grid创建复杂的网格布局。网格布局是创建Web页面的灵活和响应式设计的强…

工作记录------单元测试(持续更新)

工作记录------单元测试 之前的工作中从来没有写过单元测试&#xff0c;新入职公司要求写单元测试&#xff0c; 个人觉得&#xff0c;作为程序员单元测试还是必须会写的 于此记录一下首次编写单元测试的过程。 首先引入单元测试相关的依赖 <dependency><groupId>…

18. SpringBoot 如何在 POM 中引入本地 JAR 包

❤️ 个人主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;成功解决 BUG 合集 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; Spring Boot 是一种基于 Spring 框架的轻量级应用程序开发框架&#xff0c;它提供了快速开发应用程…

小程序 view下拉滑动导致scrollview滑动事件失效

小程序页面需要滑动功能 下拉时滑动&#xff0c;展示整个会员卡内容&#xff0c; 下拉view里包含了最近播放&#xff1a;有scrollview&#xff0c;加了下拉功能后&#xff0c;scrollview滑动失败了。 <view class"cover-section" catchtouchstart"handletou…

Mac电脑怎么使用“磁盘工具”修复磁盘

我们可以使用“磁盘工具”的“急救”功能来查找和修复磁盘错误。 “磁盘工具”可以查找和修复与 Mac 磁盘的格式及目录结构有关的错误。使用 Mac 时&#xff0c;错误可能会导致意外行为&#xff0c;而重大错误甚至可能会导致 Mac 彻底无法启动。 继续之前&#xff0c;请确保您…

Java上传文件图片到阿里云OSS

开通阿里云OSS 进入阿里云官网&#xff0c;开通对象存储 OSS服务进入对象存储 OSS管理控制台&#xff0c;在Bucket 列表中创建Bucket 在AccessKey管理中创建AccessKey ID和AccessKey Secret。保存起来&#xff0c;代码中需要 代码开发 pom引入依赖 <!-- 阿里云OSS -->…

单片机复位电路分析

来分析一下这个电路&#xff1a; 首先这里面有电容&#xff0c;所以是一个动态电路。哈哈哈 假设左上角的电压源是5V的代号为VOLT。 可以知道电容capacitor C1左边的电压也是5V&#xff0c;电容中间隔着一个绝缘体&#xff0c;所以不导电&#xff0c; 这个时候电流无法通过…

python文件与目录操作

目录 文件编码 文件的读取 打开文件 mode常用的三种基础访问模式 读取文件 关闭文件 with open语法 文件的写入操作 文件综合案例 a.txt内容 代码实现 b.txt文件 目录操作 前言 os模块 具体方法 os.path模块 具体方法 文件编码 前言&#xff1a;由于计算机…