#连接查询
/*
概念:查询的字段来自于多个表
语法:
select
字段1,字段2
from 表1,表2
【where 连接条件】
笛卡尔乘积:
产生原因:没有加连接条件,导致结果为 表1 的行数*表2 的行数
分类:
一、传统模式的多表连接
等值连接(where)——非等值连接
二、sql99推出的标准,使用join关键字实现连接
内连接——外连接
三、自连接
*/
#一、传统模式的多表连接
#也叫等值连接
/*
特点有
①表的顺序没有要求
②n表连接,至少需要n-1个连接条件
③一般需要为表起别名,这样可以提高语句简洁度,并且防止字段有歧义
④可以添加分组、排序、筛选,一起混合使用
*/
#①案例1:查询员工名、部门名
SELECT `last_name`,`department_name`
FROM `employees`,`departments`
WHERE
`employees`.`department_id`=`departments`.`department_id`;
#②为表起别名
/*
一般需要为表起别名,好处:
a、提高语句简洁度
b、防止字段有歧义,比如说 两张表中都有name字段,使用b.name 或者a.name 这样表示就没有歧义
c、提高效率
如果已经为表起别名,则使用字段时,只能用别名限定而不能用表名限定
*/
SELECT e.`last_name`,d.`department_name`
FROM `employees`
e,`departments` d
WHERE e.`department_id`=d.`department_id`;
#③添加筛选条件
#案例:查询 工资>5000的工种名和员工名、工资
SELECT job_title,last_name,salary
FROM employees e,jobs j
WHERE e.`job_id`=j.`job_id`
AND salary>5000;
#④添加分组和筛选
#01案例:查询每个部门的员工个数和部门名,每个部门人数大于5
SELECT COUNT(*) 个数,department_name
FROM employees e,departments d
WHERE e.`department_id`=d.`department_id`
GROUP BY e.`department_id`
HAVING 个数>5;
#⑤排序
#01案例:查询每个部门的员工个数和部门名,每个部门人数大于5,并按照人数倒序排序
SELECT COUNT(*) 个数,department_name
FROM employees e,departments d
WHERE e.`department_id`=d.`department_id`
GROUP BY e.`department_id`
HAVING 个数>5
ORDER BY 个数 DESC;
#⑥ 三表连接
#案例:查询员工名、部门名和所在城市
SELECT last_name,department_name,city
FROM employees e,departments d,locations l
WHERE e.`department_id`=d.`department_id`
AND d.`location_id`=l.`location_id`;
MySQL多表连接等值连接学习
最新推荐文章于 2024-04-18 01:50:00 发布