实际项目开发中MySQL多表查询的两个例子
1. 例子一
1.1 需求分析
通过院校名称模糊查询院校信息和所在地区,其中院校表中的area属性与地区表id关联,查询时要综合查询这两个表。
1.2 dto对象
package com.banner.po;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.data.mongodb.core.mapping.Field;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/**
* <p>
* 院校信息表
* </p>
*
* @author banner
* @since 2023-03-11
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class Institution implements Serializable {
/**
* 学院id
*/
private Long id;
/**
* 院校名称
*/
@NotEmpty(message = "院校名不为空")
private String institutionName;
/**
* 该院校所属地区
*/
@NotNull(message = "未指定院校地区")
private Integer area;
/**
* 院校所隶属的部门,例:教育部...
*/
private String dependent;
/**
* 院校所具有的特性
*/
private String peculiarity;
/**
* 院校官网的网址
*/
@NotEmpty(message = "官网地址不为空")
private String institutionUrl;
public Institution(Long id,String institutionName,String institutionUrl){
this.id = id;
this.institutionName = institutionName;
this.institutionUrl = institutionUrl;
}
}
dto继承institution,并设置地区名称这个独有属性
package com.banner.dto;
import com.banner.po.Institution;
import lombok.Data;
/**
* @author rjj
* @date 2023/3/29 - 10:42
*/
@Data
public class InstitutionDto extends Institution {
private String cname;
}
1.3 sql语句
SELECT
i.*, p.cname
FROM
institution i,
place p
WHERE
i.institution_name LIKE #{institutionName}
AND i.area = p.id
从institution表中根据院校名模糊查询,and条件连接在地区表中查出院校地区名称
1.4 请求与结果
2. 例子二
2.1需求分析
2.2 dto对象
同1.1
2.3语句
SELECT
i.*, p.cname
FROM
institution i,
place p
WHERE
i.area IN (
SELECT
id
FROM
place
WHERE
parent_id = #{placeId}
)
AND i.area = p.id
当前我们知晓的学院地区id为二级地区,而由请求传来的id为一级地区id,故先在地区表中根据一级地区id查询出所有其子二级地区,再在院校表中查询出地区id在子二级地区id中的院校