当前位置: 首页 > news >正文

SQL中的左连接,体会一对多

在这里插入图片描述
问题如下,解释这一行SQL语句


"LEFT JOIN %s ON %s.%s=%s.%s "

一、 LEFT JOIN 语法解释
  1. LEFT JOIN 是 SQL 中的一种连接操作,用于将两个或多个表中的行组合在一起。它会返回左表(即 LEFT JOIN 关键字左边的表,上述代码未指明左边的表)中的所有行,即使在右表(LEFT JOIN 关键字右边的表)中没有匹配的行。对于右表中没有匹配的行,结果集中对应的列会被填充为 NULL
  2. LEFT JOIN %s ON %s.%s=%s.%s 是一个 SQL 语句模板,其中 %s 是占位符,通常在 Java 中使用 String.format 方法来填充这些占位符。
  3. LEFT JOIN %s:指定要连接的右表,%s 会被替换为实际的表名。
  4. ON %s.%s=%s.%s:指定连接条件,ON 关键字后面跟着一个条件表达式,用于确定如何将左表和右表的行进行匹配。四个 %s 分别会被替换为左表名左表中的列名右表名右表中的列名。连接条件通常是两个表中具有相同含义的列,通过比较这些列的值来确定哪些行应该被组合在一起。
二、 例子

假设我们有两个表:department(部门表)和 employee(员工表),它们之间是一对多的关系,即一个部门可以有多个员工。

部门表(department

department_iddepartment_name
1销售部
2技术部
3财务部

员工表(employee

employee_idemployee_namedepartment_id
101张三1
102李四1
103王五2
104赵六2

使用Java,构造对应的 SQL 语句:


String leftTable = "department"; // 左表
String rightTable = "employee";// 右表

// 在下面这个语句中,用到本文开头的字符串
String join = String.format("LEFT JOIN %s ON %s.%s=%s.%s ", rightTable, leftTable, rightTable + "_id", rightTable, rightTable + "_id"); 

// 这里假设将占位符填充后的完整 SQL 查询语句 
String sql = "SELECT * FROM " + leftTable + " " + join;

生成的 SQL 语句如下:

SELECT * FROM department LEFT JOIN employee ON department.employee_id=employee.employee_id;
三、查询结果

可以看到,即使财务部没有对应的员工,它仍然出现在结果集中,员工信息部分显示为 NULL。这就是 LEFT JOIN 的作用,确保左表中的所有行都被包含在结果集中。

department_iddepartment_nameemployee_idemployee_namedepartment_id (from employee)
1销售部101张三1
1销售部102李四1
2技术部103王五2
2技术部104赵六2
3财务部NULLNULLNULL
四、总结

左连接,主要照顾左表的数据。从查询的结果表来看,左表冗余的数据,结果表保持存在,剩余右表字段为空;右表冗余的数据,在结果表直接删除。

相关文章:

  • android 图形开发的技能学习路线
  • 桥接模式的优点和典型实现
  • 套接字Socket
  • DeepSeek Smallpond 在火山引擎 AI 数据湖的探索实践
  • 【Axure高保真原型】纵向图片轮播
  • 如何在 HTML 中嵌入外部字体,有哪些注意事项?
  • 关于labview和C#调用 Bartender打印机条码
  • OpenFeign在微服务中的远程服务调用工作流程
  • 自动驾驶VLA模型技术解析与模型设计
  • STM32F103_LL库+寄存器学习笔记03 - GPIO设置输入模式,并轮询GPIO的电平状态
  • WPF 与 C# 融合开发:从基础到高级应用(一)
  • panda3d 渲染
  • Vue3 中使用 Sortablejs 实现拖拽排序功能 序号不更新问题
  • OPPO手机如何实时翻译会议视频?视频翻译轻松应对多语言场景
  • 协议学习——1 NCDSSB
  • 【Unity】 HTFramework框架(六十三)SerializableDictionary可序列化字典
  • [从零开始学习JAVA] 初识多线程
  • 【Kafka】Kafka生产者如何实现冥等的?
  • Llama3大模型本地部署与调用
  • Ansible内置模块之package
  • 千博企业网站管理系统2013/软文广告平台
  • 淘客网站做百度推广/朋友圈广告推广
  • 电子商务网站建设完整案例教程s2sh pdf下载/百度快照
  • 企业网站建设费计入什么科目/邢台市seo服务
  • 做ppt的素材免费网站/seo运营
  • 个人网站做捐赠发布违法吗/站长之家域名查询鹿少女