**多表连接查询**(等值查询)//(n个表连接至少需要n-1个连接条件)
select 表1的字段名,表2的字段名
from 表1名 ‘表1的别名’,表2名 ‘表2的别名’
where 连接的条件 and 其他查询条件;
例:(两表连接)查询工资>5000的员工名、部门名
select e.last_name,d.department_name
from employees e,departments d
where e.department_id=d.department_id
and e.salary>5000;
例:(三表连接)查询工资>5000的员工名、部门名和所在城市
select e.last_name,d.department_name,l.city
from employees e,departments d,locations l
where e.department_id=d.department_id
and d.location_id=l.location_id
and e.salary>5000;
**内连接查询**//inner可以省略,表的顺序可以颠倒
select 表1的字段名,表2的字段名
from 表1名 ‘表1的别名’ inner join 表2名 ‘表2的别名’
on 连接的条件 where 其他的查询条件;
例:查询工资>5000的员工名、部门名
select e.last_name,d.department_name
from departments d join employees e
on e.department_id=d.department_id
where e.salary>5000;
**外连接查询**(左连接,右连接 牢记一种就好)//outer可省略
右连接(右边是主表)
select 表1的字段名,表2的字段名
from 表1名 '表1的别名' right outer join
表2名 '表2的别名'
on 连接的条件
where 其他的查询条件;
左连接(左边是主表)
select 表1的字段名,表2的字段名
from 表1名 ‘表1的别名’ left outer join
表2名 ‘表2的别名’
on 连接的条件
where 其他的查询条件;
例:查询哪个城市没有部门
select l.city,d.department_name
from locations l left outer join
departments d
on l.location_id=d.location_id
where d.department_id is null;
**全外连接**//MySQL不支持
select 表1的字段名,表2的字段名
from 表1名 ‘表1的别名’ full outer join
表2名 ‘表2的别名’
on 连接的条件
where 其他的查询条件;
**自连接查询**//自己与自己连接
select 别名1.字段名,别名2.字段名
from 表名 ‘别名1’ inner join 表名 ‘别名2’
on 连接的条件
where 其他的查询条件;
例:查询员工名和上级领导的名字
select e.last_name,m.last_name
from employees e inner join employees m
on e.manager_id=m.employee_id;
**子查询**//子查询放在小括号内,子查询优先于主查询执行,可嵌套多层
select 字段1,字段2 from 表1
where 字段名 关键字(select 字段1 from 表2);
例:谁的工资比Abel高
(1)查询Abel的工资
select salary from employees
where last_name = 'Abel'
(2)查询工资大于(1)的员工信息
select * from employees where salary>(
select salary from employees
where last_name = 'Abel' );
**使用的数据表和相应包含的字段名**
departments//部门信息表(department_id,department_name,manager_id,location_id)
employees//员工信息表(employee_id,last_name,salary,department_id,manager_id)
locations//城市信息表(location_id,city)
MySQL多表连接查询
最新推荐文章于 2020-08-17 22:18:04 发布