联表查询----内连接、外连接

联表查询–内连接、左外连接、右外连接、完全外连接

1.说明:联表查询可实现两个或多个表之间的连接查询,一般用于有主外键关系表之间的连查询,这里拿两个有主外键关系的表来举例说明联表查询的使用。
student表:其中classid为外键
这里写图片描述
class表:
这里写图片描述

2.内连接查询—查询出学生的所有信息

SELECT * FROM student a,class b WHERE a.classid = b.classid;

代码说明:其中a和b是给表取得别名,方便后边调用表中的属性。
查询结果如下:
这里写图片描述
内连接查询特点:只查询满足条件的结果

3.左外连接查询—查询出学生的所有信息
标准sql 92语法:LEFT JOIN 表名 ON 条件

SELECT * FROM student a LEFT JOIN class b ON a.classid = b.classid;

Oracle(+)语法:左表字段 = 右表字段(+)

SELECT * FROM student a,class b WHERE a.classid = b.classid (+); 

代码说明: Oracle(+)语法仅Oracle数据库支持,两种查询结果一样
查询结果如下:
这里写图片描述
左外连接特点: 从查询结果可以看出,查询出来的不仅是满足条件的结果,还包含左表student表中所有不满足条件的结果,class表的数据以null显示。

4.右外连接查询:—查询出学生的所有信息
标准sql 92语法:RIGHT JOIN 表名 ON 条件

SELECT * FROM student a RIGHT JOIN class b ON a.classid = b.classid;

Oracle(+)语法:左表字段(+) = 右表字段

SELECT * FROM student a,class b WHERE a.classid(+) = b.classid ; 

代码说明: Oracle(+)语法仅Oracle数据库支持,两种查询结果一样,注意Oracle(+)语法中(+)的位置,左外连接时在 = 的右边,右外连接时在 = 的左边。
查询结果如下:
这里写图片描述
右外连接特点: 从结果可以看出,右外连接查询结果不仅包含满足条件的结果,还包含右表class中所有不满足条件的结果,左表中的数据以null显示。

5.完全外连接 —查询出学生的所有信息

SELECT * FROM student a FULL OUTER JOIN class b ON a.classid = b.classid;

代码说明: MySQL数据库不支持完全外连接,Oracle数据库,其他数据库没有研究过,学习其他数据库的可以试试。
完全外连接特点: 查询结果不仅包含满足条件的结果,还包含左表中不满足条件的所有结果,右表中的数据以null显示,也包含右表中所有不满足条件的结果,左表数据以null显示。

—以上仅为个人学习心得,仅供参考。

### 关于 RuoYi-Vue-Pro 中查询的方法 在 `RuoYi-Vue-Pro` 项目中实现查询通常涉及多个实体之间的关联操作。为了高效地执行这些查询,推荐采用 MyBatis Plus 提供的功能来简化 SQL 编写过程。 对于查询的具体实施方式,在实际编码过程中可以利用 MyBatis Plus 的内置特性以及自定义 XML 映射文件完成复杂查询逻辑[^1]。当涉及到多张格的数据获取时,可以通过编写相应的 Mapper 接口并配置好对应的 @Select 注解或者通过 XML 文件中的 `<select>` 标签指定 SQL 查询语句来进行合检索。 下面是一个简单的例子展示如何在一个服务层方法里调用 DAO 层接口以达成两个之间基于某些条件的连接: ```java // 假设存在 User 和 Order , 并且想要根据用户的 ID 来查找该用户所有的订单记录. public List<Order> findOrdersByUserId(Long userId){ return orderMapper.selectList( new QueryWrapper<Order>() .eq("user_id", userId)); } ``` 如果需要更复杂的查询,则可以在 XML 配置文件中定义具体的 SQL 语法: ```xml <select id="findUserAndOrderInfo" resultMap="BaseResultMap"> SELECT u.*, o.* FROM user u INNER JOIN orders o ON u.id = o.user_id WHERE u.id=#{userId}; </select> ``` 上述代码片段展示了怎样创建一个名为 `findUserAndOrderInfo` 的查询命令,它会返回给定用户ID所对应的所有订单详情。这里使用了内连接 (`INNER JOIN`) 将 users 与 orders 结合起来,并设置了适当的结果映射以便正确解析数据对象。 #### 注意事项 - 对于较为简单的关系模型可以直接运用框架提供的便捷函数; - 如果遇到更为复杂的业务场景则建议手写SQL并通过XML形式维护; - 应始终考虑性能优化方面的问题,比如索引的应用等;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值