-- ------------------- 关联查询(多表查询)------------------------------- --
/*
查询出员工及其所在部门(员工姓名、所在部门名称)
*/
-- 交叉连接查询(笛卡尔乘积查询,不常用,会产生两表的记录数乘积条记录)
SELECT LAST_NAME,DEPARTMENT_NAME FROM ssh_employee,ssh_department;
-- 多表查询的规则 1)、确定查询的表; 2)、确定查询的字段; 3)、确定表与表之间的连接条件
-- 1、内连接查询 (满足条件的才会显示)
SELECT LAST_NAME,DEPARTMENT_NAME -- b、确定查询的字段
FROM ssh_employee,ssh_department -- a、确认查询表格
WHERE ssh_employee.DEPARTMENT_ID =ssh_department.ID;-- c、表与表之间的连接条件
-- 内链接另一种写法
SELECT LAST_NAME,DEPARTMENT_NAME
FROM ssh_employee -- 查询的副表
INNER JOIN ssh_department-- 主表
ON ssh_employee.DEPARTMENT_ID =ssh_department.ID; -- 两表关联条件
-- 开发常用别名写法,代码更直观(别名 AS 可省略)
SELECT e.LAST_NAME,d.DEPARTMENT_NAME
FROM ssh_employee AS e -- 查询的副表
INNER JOIN ssh_department AS d-- 主表
ON e.DEPARTMENT_ID =d.ID; -- 两表关联条件
-- 查询每一个部门的员工
-- 使用如果使用内连接查询。则不能显示员工数为0的部门
/*
2、左(外)连接查询:使用左边表的数据去匹配右表的数据,如果符合连接条件的结果则显示右表数据,不符合则显示NULL;
但是左表的数据一定是完全显示的
备注:其中 OUTER 可以省略,所以也称左连接查询
*/
SELECT d.DEPARTMENT_NAME, e.LAST_NAME;
FROM ssh_department d -- 左表
LEFT OUTER JOIN ssh_employee e -- 右表
ON d.ID = e.DEPARTMENT_ID;
/*
3、右(外)连接查询:使用右边表的数据去匹配右表的数据,如果符合连接条件的结果则显示左表数据,不符合则显示NULL;
但是右表的数据一定是完全显示的
备注:其中 OUTER 可以省略,所以也称右连接查询
*/
-- 查询每一个部门的员工
SELECT d.DEPARTMENT_NAME,e.LAST_NAME
FROM ssh_employee e-- 左表
RIGHT OUTER JOIN ssh_department d-- 右表
ON d.ID = e.DEPARTMENT_ID;
/*
4、自连接查询(虚拟一张上级部门表,采用内或外连接查询)
查询部门的上级部门
*/
SELECT a.DEPARTMENT_NAME,b.DEPARTMENT_NAME
FROM ssh_department a
LEFT OUTER JOIN ssh_department b
ON a.PARENT_DEPARTMENT=b.ID;
mysql数据库联表查询(四)
最新推荐文章于 2024-06-11 16:09:08 发布