select
列名列表
from
表名列表
where
....
隐式内连接:使用where条件消除无用数据
// 语法
SELECT * FROM emp, dept WHERE emp.dept_id = dept.id;
显式内连接
// 语法
select 字段列表 from 表1 [inner] join 表2 on 条件;
步骤
// 语法
select 字段列表 from 表1 left [outer] join 表2 on 条件;
查询的是左表所有数据以及其交集部分
例子
-- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称
SELECT t1.*, t2.name FROM emp t1 LEFT JOIN dept t2 ON t1.dept_id = t2.id;
// 语法
select 字段列表 from 表1 right [outer] join 表2 on 条件;
查询的是右表所有数据以及其交集部分
例子
SELECT * FROM dept t2 RIGHT JOIN emp t1 ON t1.dept_id = t2.id;
左右互换位置
概念:查询中嵌套查询,称嵌套查询为子查询
SELECT * FROM emp WHERE emp.salary = (SELECT MAX(salary) FROM emp);
>
>=
<
<=
=
IN (集合)
来判断
-- 子查询
SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部');
join_date
> ‘2011-11-11’) t2
WHERE t1.id = t2.dept_id;– 普通内连接
SELECT * FROM emp t1, dept t2 WHERE t1.dept_id
= t2.id
AND t1.join_date
> ‘2011-11-11’
```
多表查询可以使用同一个表,多个别名
例如:
查询所有员工的姓名及其直接上级的姓名, 没有领导的员工也需要查询
/*
分析:
1.姓名 emp, 直接上级的姓名 emp
emp 表的 id 和 mgr 是自关联
2.条件 emp.id = emp.mgr
3.查询左表的所有数据,和 交集数据
使用左外连接查询
*/
SELECT
t1.ename,
t1.mgr,
t2.`id`,
t2.`ename`
FROM emp t1
LEFT JOIN emp t2
ON t1.`mgr` = t2.`id`;