MySQL

联表查询

  • 内连接
    image
SELECT *
FROM A
INNER JOIN B
ON A.key = B.key ;
  • 左外连接
    image
SELECT *
FROM A
LEFT JOIN B
ON A.key = B.key ;
  • 右外连接
    image
SELECT *
FROM A
RIGHT JOIN B
ON A.key = B.key ;
  • 筛选左外连接
    image
SELECT *
FROM A
LEFT JOIN B
ON A.key = B.key
WHERE B.key IS NULL ;
  • 筛选右外连接
    image
SELECT *
FROM A
RIGHT JOIN B
ON A.key = B.key
WHERE A.key IS NULL ;
  • 嵌套结果
// 一个部门可以有多个员工
@Data
public class Department {
    private Integer id;
    private String name;
    private List<Employee> employees;
}
// 一个员工只能属于一个部门
@Data
public class Employee {
    private Integer id;
    private String name;
    private Department department;
}
@Mapper
public interface EmployeeMapper {
    Employee selectEmployeeById(Integer id);
}
@Mapper
public interface DepartmentMapper {
    Department selectDepartmentById(Integer id);
}
<!-- association 用于处理一对一或多对一的关联关系,即一个对象关联另一个对象 -->
<mapper namespace="com.example.EmployeeMapper">
    <resultMap id="employeeMap" type="com.example.Employee">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <association property="department" javaType="com.example.Department">
            <id property="id" column="dept_id"/>
            <result property="name" column="dept_name"/>
        </association>
    </resultMap>
    <select id="selectEmployeeById" resultMap="employeeMap">
        SELECT e.id, e.name, d.id AS dept_id, d.name AS dept_name
        FROM employee e INNER JOIN department d ON e.dept_id = d.id
        WHERE e.id = #{id}
    </select>
</mapper>
<!-- collection 用于处理一对多或多对多的关联关系,即一个对象包含多个对象 -->
<mapper namespace="com.example.DepartmentMapper">
    <resultMap id="departmentMap" type="com.example.Department">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <collection property="employees" ofType="com.example.Employee">
            <id property="id" column="emp_id"/>
            <result property="name" column="emp_name"/>
        </collection>
    </resultMap>
    <select id="selectDepartmentById" resultMap="departmentMap">
        SELECT d.id, d.name, e.id AS emp_id, e.name AS emp_name
        FROM department d LEFT JOIN employee e ON d.id = e.dept_id
        WHERE d.id = #{id}
    </select>
</mapper>
posted @   linycat  阅读(3)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示