1.4 Java多表查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lwz45698752/article/details/86488765


概述

  • SQL中的表对应Java中的类,从而多个表对应多个类
  • 内连接:内点积,不匹配的行滤除
  • 外连接:外点积
    在这里插入图片描述
    在这里插入图片描述

等值连接

  • 不添加过滤条件,会产生笛卡尔积错误
  • 例如:下图若无where条件,则每个员工信息和部门表匹配,左边100条员工记录,右边按理只对应相同部门号的部门名,但没有where条件,右边每个部门名都来匹配

在这里插入图片描述

两表连接(❤)

在这里插入图片描述

  • 上图未简写
  • 下图为简写形式
  • 若该列为一表独有,不需要指明,若该列是两表共有,即作为桥梁列,则要显式指明哪个表的这个列
  • 内连接时,若左表在右表中找不到对应的内容,则该项纪录被剔除,如员工属于某部门(左表),部门有部门名(右表),当某员工的部门为null时,则右表找不到,该项记录则被剔除

在这里插入图片描述


三个表连接

在这里插入图片描述


不等值连接

在这里插入图片描述

  • 使用between and语句

外连接

在这里插入图片描述
在这里插入图片描述

  • 同理可得右外连接
  • 这种方式不能实现全连接

  • 左表中多了一个数据记录,右表中找不到部门ID与之对应,则少的表(右表)添加“+”,形成左外连接
  • 左外连接:除了两表中都满足的条件输出(内连接)外,额外返回左表中不满足条件的记录
  • 左外连接右边补加号,使得行数相同

SQL99

using连接

  • using局限性在于列名要一样,数据类型也要一样
  • 如下例所示,两个表中的对应列名都叫department_id且数据类型相同才行
    在这里插入图片描述

自然连接

在这里插入图片描述

  • 所有列名一样来连接,即有多个连接条件(两表中的共有列名都相同作为条件来连接)

多表连接

在这里插入图片描述

  • 多个join和on配套使用,类比添加where过滤条件
  • 好处在于join可修改,如下文

on子句(❤)

在这里插入图片描述

  • 左外连接:left join
  • 右外连接:right join
  • 满外连接:full join

自连接

  • 看成特殊的多表连接方式,理解为复制了多份自己的表

在这里插入图片描述

  • 用法参照多表等值连接(有无前缀由列名是否共有决定)

练习

在这里插入图片描述

  • 注意第26点
    在这里插入图片描述-
  • 强行左外连接

在这里插入图片描述

  • 三个表的连接

在这里插入图片描述

  • 隐式三表连接(虽然查询的列名两个表就有,但过滤条件在第三个表中)

猜你喜欢

转载自blog.csdn.net/lwz45698752/article/details/86488765
1.4