多表连接查询

多表查询常涉及到到表连接的问题,主要涉及到内连接:INNER JOIN,外连接:LEFT JOIN(or LEFT OUTER JOIN),RIGHT JOIN(or RIGHT OUTER JOIN),FULL JOIN和交叉连接:CROSS JOIN。INNER JOIN也叫等值链接。内连接具有排他性,而OUTER JOIN却是包容性的。

表连接进行查询都是会产生一张中间的临时表,然后再将这张临时表返回给用户。通用的SQL语句:SELECT (待查询字段名) FROM 表一 (JOIN TYPE) 表二ON (JOIN CONDITION) [其他对临时表记录进行过滤的条件];

几种连接方式查询结果区别大致如下:

INNER JOIN:只返回两个表中连接字段相同的行(即符合条件的行);

LEFT JOIN: 返回包括左表中的所有记录和右表中联结字段相等的记录;

RIGHT JOIN: 返回包括右表中的所有记录和左表中联结字段相等的记录;

FULL JOIN:两个连接表的所有记录;

CROSS JOIN:不带WHERE子句,返回所有数据行的笛卡尔乘积.         

表一:TAB_EMP

ID

EMP_NAME

DEPT

1

Eric Huang

1

2

Alice

3

3

Peter

1

4

Green

 

 

表二:TAB_DEPT

ID

DEPT_NAME

1

研发部

2

财务部

3

国际事业部

4

综合管理部

5

销售部

 

INNER JOIN 方式:

SQL>SELECT t1.emp_name, t2.dept_nameFROM tab_emp t1INNERJOIN tab_dept t2ON t1.dept=t2.id;

执行结果:



 

分析:可以看出采用INNER JOIN方式时,只会列出满足连接条件的记录;

LEFT JOIN 方式:

SQL>SELECT t1.emp_name, t2.dept_nameFROM tab_emp t1LEFTJOIN tab_dept t2ON t1.dept=t2.id;

执行结果:



 

分析:可以看出采用LEFT JOIN方式时,左表中的记录和右表中联结字段相等的记录会全部列出,而右表中连接字段不相等的字段全部为null;

RIGHT JOIN 方式:

SQL>SELECT t1.emp_name, t2.dept_nameFROM tab_emp t1RIGHTJOIN tab_dept t2ON t1.dept=t2.id;

执行结果:

 

分析:可以看出采用RIGHT JOIN方式时,返回包括右表中的所有记录和左表中联结字段相等的记录;,若左表中连接字段不相等的字段全部为null;

FULL JOIN 方式:

SQL>SELECT t1.emp_name, t2.dept_nameFROM tab_emp t1FULLJOIN tab_dept t2ON t1.dept=t2.id;

执行结果:



 

 

分析:可以看出采用FULL JOIN方式时,左表的所有记录会全部返回,右表的所有记录也会全部返回,匹配的就直接列出,不匹配的某一边的记录值为null就行;

 

CROSS JOIN方式:

值得注意的是该方式语法上和其他几种有点差别,不能用on子句。

SELECT * FROM [表一] CROSS JOIN [表二] 或者

SELECT * FROM [表一], [表二]

SQL> SELECT t1.emp_name, t2.dept_nameFROM tab_emp t1CROSSJOIN tab_dept t2;



 

分析:最后返回的记录数实际上就是两张表记录数的乘积。该类型的JOIN句法不需要连接条件,一个表中的所有行分别都会连接另一个表的所有行,得到的结果被称为一个笛卡尔积。

 

            最后总结一下,实际项目开发中CROSS JOIN用得比较少,它是不能使用ON关键字的,其它都要用。一般先进行连接获取到需要的新表数据,然后使用其他子句如where子句进行过滤,group by子句进行聚合,order by子句进行排序等等操作。

采用JOIN方式多表连接查询时,如果如果用到了GROUP BY,GROUP BY 的排序顺序必须和SELECT中列出的字段顺序的一致. 这可能是由于GROUP BY 决定了表的排序方式, 如果是左外连接, 如果右边没有对应的话,还要填补空值. 如果排序方式对应不起来, 就会错乱。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis-Plus提供了多种方法来实现多表连接查询。其中,常见的方法有基于select的查询方法、基于Mybatis-plus的多表联查以及基于join语句的查询方式。 在基于select的查询方法中,可以通过组合多个Mapper的查询方法来实现多表连接查询。这种方式需要在Mapper接口中定义多个查询方法,并在XML文件中编写对应的SQL语句,然后在Service中调用这些方法并进行结果的组合。这种方法比较灵活,但需要手动编写SQL语句,稍显繁琐。 基于Mybatis-plus的多表联查是一种更加简洁方便的方法。Mybatis-plus在Mybatis的基础上进行了增强,可以将原先的半ORM增强为真正的ORM。通过使用Mybatis-plus的Wrapper(查询条件包装类)和Lambda表达式,可以方便地实现多表连接查询。同时,还可以结合单表查询的方法进行组合运用,从而达到多表查询的效果。 另外,基于join语句的查询方式也是一种常用的多表连接查询方法。在这种方式下,可以使用Mybatis的动态SQL编写出强大的数据库交互代码,具有很强的灵活性。通过编写join语句,可以将多个表以特定的条件进行连接,并获取所需的结果集。这种方法适用于对多个表进行复杂的数据查询操作。 综上所述,根据项目需求和个人偏好,可以选择适合的方法来实现Mybatis-Plus的多表连接查询。每种方法都有其特点和适用场景,需要根据具体情况进行选择和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值