狂神MySQL--21、自连接及联表查询练习

MySQL查询操作与函数使用练习

21、自连接及联表查询练习

多个条件用and或or,一个语句里面只能出现一个where

22、分页及排序

注意排序和limit的顺序

注意where在order by前面

23、子查询和嵌套查询

on是联表条件,where是筛选条件

注意!子查询超过一行用 in 

24、MySQL常用函数

25、聚合函数及分组过滤

来源:21、自连接及联表查询练习_哔哩哔哩_bilibili

### MyBatis 查询教程 #### 使用 XML 配置方式实现查询 在 `MyBatis` 中执行查询可以通过编写 SQL 映射文件中的 `<select>` 元素完成。对于两个之间的关关系,比如订单(order)和客户(customer),可以定义如下映射语句: ```xml <select id="getOrderWithCustomer" resultMap="orderResultMap"> SELECT o.*, c.customer_name, c.contact_phone FROM orders o LEFT JOIN customers c ON o.customer_id = c.id WHERE o.order_id=#{id} </select> <resultMap type="com.example.Order" id="orderResultMap"> <association property="customer" javaType="com.example.Customer"> <result column="customer_name" property="name"/> <result column="contact_phone" property="phone"/> </association> </resultMap> ``` 这段代码展示了如何通过左连接(`LEFT JOIN`)获取指定 ID 的订单及其对应的客户信息[^1]。 #### 利用注解方式进行查询 除了传统的 XML 方式外,在某些场景下也可以采用基于 Java 注解的方式来简化开发过程。下面是一个简单的例子展示怎样利用 @Select 和其他相关注解来进行多合检索: ```java @Mapper public interface OrderMapper { @Select("SELECT o.*, p.product_name " + "FROM t_order o INNER JOIN t_product p ON o.pid=p.id " + "WHERE o.uid = #{userId}") List<OrderDTO> selectOrdersByUserId(@Param("userId") Long userId); } ``` 这里使用了内连接(`INNER JOIN`)来查找特定用户的全部订单记录以及每笔订单对应的商品名称[^2]。 #### 动态SQL支持下的复杂条件查询 当面对更复杂的业务逻辑需求时——例如带有多种筛选条件或多张格间的交叉引用,则可借助于 MyBatis 提供的强大动态 SQL 特性。这允许开发者构建灵活而高效的查询达式,从而更好地适应实际应用环境的要求。 ```xml <!-- order-mapper.xml --> <select id="findOrderByConditions" parameterType="map" resultType="OrderVO"> SELECT * FROM orders o <if test="customerId != null">AND customer_id = #{customerId}</if> <foreach collection="productIds" item="productId" open=" AND (" close=")" separator="OR"> EXISTS (SELECT 1 FROM order_items oi WHERE oi.order_id=o.id and oi.product_id=#{productId}) </foreach> ORDER BY create_time DESC LIMIT #{limit} OFFSET #{offset}; </select> ``` 上述片段说明了一个包含多个过滤参数(如顾客ID、商品列)并支持分页显示的结果集查询方案[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值