5、案例如下:
/*查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
* 思路:该需求用到分组查询
* 1、先查询每个工种有奖金的员工的最高工资
* 2、根据1的结果继续筛选,选择最高工资>12000;
* */
<select id="queryByGroup" resultType="map"> select job_id 工种编号,max(salary) 最高工资 from myemployees.employees where commission_pct is not null GROUP BY job_id having 最高工资 > 12000 </select>
结果:
6、案例如下:
/*查询员工姓名、部门名和所在城市,城市名以s开头
* 思路:员工名出现在员工表employees中,部门名出现在departments表中,而城市名出现在 locations表中
* 此案例涉及到了三表查询,根据employees表的外键department_id连接到departments表,然后根据departments表的
* 外键location_id连接到locations表
* */
<select id="queryMoreTables" resultType="map"> select concat(first_name,' ',last_name) 姓名,department_name 部门名,city 城市名 from myemployees.employees e,myemployees.departments d,myemployees.locations l where e.department_id=d.department_id and d.location_id=l.location_id and city like 's%' order by department_name desc </select>
结果:
7、案例如下:
/*案例:查询所有的部门里面员工个数大于3的部门名以及具体的员工数量,查询结果按员工数量降序排序,
* 这里用内连接(自然连接或普通连接)去实现,内连接:就是两张表只显示符合连接条件的行(可以理解为取两张表的交集)
* 所以内连接可能会丢失信息
* */
<select id="queryInner" resultType="map"> SELECT department_name,COUNT(*) FROM myemployees.departments d inner join myemployees.employees e on d.department_id=e.department_id GROUP BY department_name HAVING COUNT(*)>3 ORDER BY COUNT(*) desc; </select>
结果:
8、 案例如下:
/*查询姓名中包含字符K的员工的名字及其上级的名字
因为员工表中既包含打工仔和打工仔的boss,所以,可以通过员工的manager_id找到employee_id,进 而找到boss的name
* 当表中的某一个字段和这张表中另外字段相关时,可以用自连接,所以此查询使用自连接
* */
<select id="querySelfJoin" resultType="map"> SELECT e.first_name 员工名,m.first_name 老板名 from myemployees.employees e join myemployees.employees m on m.employee_id=e.manager_id WHERE e.first_name like '%k%'; </select>
结果: