欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

多表查询练习

程序员文章站 2022-05-09 09:25:48
...

建表

  • 系统用户表 sys_user

多表查询练习

  • 客户详细信息表 customer

多表查询练习

  • 数据字典表 base_dict

多表查询练习
说明

用户可以对多个客户信息进行管理,客户信息中的客户来源,客户所属行业等等信息从数据字典表中获取。

在项目定义的客户持久化类如下:

public class Customer implements Serializable {

	private static final long serialVersionUID = 1L;
	private Integer cust_id;          // 客户编号
	private String cust_name;         // 客户名称
	private Integer cust_user_id;    // 负责人id
	private Integer cust_create_id;  // 创建人id
	private String cust_source;      // 客户信息来源
	private String cust_industry;    // 客户所属行业
	private String cust_level;       // 客户级别
	private String cust_linkman;     // 联系人
	private String cust_phone;       // 固定电话
	private String cust_mobile;      // 移动电话
	private String cust_zipcode;     // 邮政编码
	private String cust_address;     // 联系地址
	private Date cust_createtime;    // 创建时间	
	private Integer start;            // 起始行
	private Integer rows;             // 所取行数
	//getter and setter ...
}

需求

根据查询条件,分页查询某用户管理的客户信息

分析

dao接口中,定义方法:

List<Customer> selectCustomerList(Customer customer);

SQL语句:

第一部分

select 
	cust_id,
	cust_name,
	cust_user_id,
	cust_create_id,
	b.dict_item_name cust_source,
	c.dict_item_name cust_industry,
	d.dict_item_name cust_level,
	cust_linkman,
	cust_phone,
	cust_mobile,
	cust_createtime   

指定查询的字段名,由于方法的返回值为Customer列表,因此字段要和Customer
的属性名一样。

第二部分

FROM
	customer a
LEFT JOIN 
	(
		SELECT
			dict_id,
			dict_item_name
		FROM
			base_dict
		WHERE
			dict_type_code = '002'
	) b ON a.cust_source = b.dict_id
LEFT JOIN (
		SELECT
			dict_id,
			dict_item_name
		FROM
			base_dict
		WHERE
			dict_type_code = '001'
	) c ON a.cust_industry = c.dict_id
LEFT JOIN (
		SELECT
			dict_id,
			dict_item_name
		FROM
			base_dict
		WHERE
			dict_type_code = '006'
	) d ON a.cust_level = d.dict_id

使用3个左外连接完成多表查询。左外连接和内连接的区别是:前者是在后者的基础上,确保左表的显示,即左表去匹配右表,若符合就显示,否则为null。注:sql语句中,001表示客户所属行业,002表示客户来源,006表示客户级别。

第三部分

where
	cust_name like "%"#{cust_name}"%"
	and cust_source = #{cust_source}
	and cust_industry = #{cust_industry}
	and cust_level = #{cust_level}
limit #{start},#{rows}

查询条件。

相关标签: 多表查询