首页 > 数据库 > 数据库开发技术 > 《MySQL 入门教程》第 18 篇 连接查询
select d.dept_id,
e.dept_id,
dept_name,
e.emp_name,
e.sex
from employee e
join department d on e.dept_id = d.dept_id
where dept_name = '人力资源部';
dept_id|dept_id|dept_name |emp_name |sex|
-------|-------|-------------|-----------|---|
2| 2|人力资源部 |诸葛亮 |男 |
2| 2|人力资源部 |黄忠 |男 |
2| 2|人力资源部 |魏延 |男 |
select d.dept_id,
e.dept_id,
dept_name,
e.emp_name,
e.sex
from employee e, department d
where dept_name = '人力资源部'
and e.dept_id = d.dept_id;
内连接(INNER JOIN);
左外连接(LEFT OUTER JOIN);
右外连接(RIGHT OUTER JOIN);
交叉连接(CROSS JOIN);
自然连接(NATURAL JOIN);
自连接(Self Join)。
select d.dept_id, e.dept_id, d.dept_name, e.emp_name
from department d
left join employee e on (e.dept_id = d.dept_id)
order by d.dept_id desc;
dept_id|dept_id|dept_name |emp_name |
-------|-------|-----------|----------|
6| |保卫部 | |
5| 5|销售部 |法正 |
5| 5|销售部 |庞统 |
5| 5|销售部 |蒋琬 |
5| 5|销售部 |黄权 |
...
table1 RIGHT JOIN table2
table2 LEFT JOIN table1
select d.dept_id, e.dept_id, d.dept_name, e.emp_name
from employee e
right join department d on (e.dept_id = d.dept_id)
order by d.dept_id desc;
select *
from
(select 1 as id) t1
left join (select 2 as id) t2 on t1.id = t2.id;
id|id|
--|--|
1| |
select *
from
(select 1 as id) t1
left join (select 2 as id) t2 on t1.id = t2.id
union all
select *
from
(select 1 as id) t1
right join (select 2 as id) t2 on t1.id = t2.id
where t1.id is null;
id|id|
--|--|
1| |
| 2|
select d.dept_id, e.dept_id, d.dept_name, e.emp_name
from department d
left join employee e on (e.dept_id = d.dept_id and e.emp_id = 0);
dept_id|dept_id|dept_name |emp_name|
-------|-------|-------------|--------|
1| |行政管理部 | |
2| |人力资源部 | |
3| |财务部 | |
4| |研发部 | |
5| |销售部 | |
6| |保卫部 | |
select d.dept_id, e.dept_id, d.dept_name, e.emp_name
from department d
left join employee e on (e.dept_id = d.dept_id)
where e.emp_id = 0;
连接条件是等值连接,即 t1.col1 = t2.col1;
两个表中的列必须同名同类型,即 t1.col1 和 t2.col1 的类型相同。
select d.dept_id,
e.dept_id,
dept_name,
e.emp_name,
e.sex
from employee e
join department d using (dept_id)
where dept_name = '人力资源部';
select d.dept_id,
e.dept_id,
dept_name,
e.emp_name,
e.sex
from employee e
natural join department d
where dept_name = '人力资源部';
select e.emp_name as "员工姓名",
m.emp_name as "经理姓名"
from employee e
left join employee m on (m.emp_id = e.manager)
where e.dept_id = 1
order by e.emp_id;
员工姓名|经理姓名|
-------|--------|
刘备 | |
关羽 |刘备 |
张飞 |刘备 |
select e.emp_id, d.dept_name, e.emp_name, j.job_title
from employee e
join department d on (d.dept_id = e.dept_id)
join job j on (j.job_id = e.job_id)
where e.emp_id = 10;
emp_id|dept_name |emp_name |job_title |
------|-----------|----------|------------|
10|研发部 |廖化 |程序员 |
原文作者:SQL编程思想;如有侵权,请联系管理员删除。