连接查询的分类:按年代分为sql192标准仅仅支持内连接,sql199标准支持内连接,左外连接,右外连接,交叉连接
按功能分为内连接,外连接,交叉连接
sql92标准:内连接包括1.等值连接:select name,boyname
form boys,beauty
where beauty.boyfriend_id = boys.id;
多表等值连接的结果为多表的交集部分
n表连接至少需要n-1个连接条件
多表的顺序没有要求
一般需要为表起别名
2.非等值连接:select salary,grade_level
form employees e,job_grades g
where salary between g.'lowest_sal' and 'highest_sal';
3.自连接:select e.employee_id,e.last_name,m.employee_id,m.last_name
from employees e,employees m
where e.'manager_id' = m.'employee_id';
sql99语法:包括内连接(inner),外连接(left outer ,right outer,full outer),交叉连接(cross join)
语法:select 查询列表
form 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
特点:添加排序,分组,筛选
inner可以省略
筛选条件放在where后面,连接条件放在on后面,提高分离性
1.内连接:select 查询列表
form 表1 别名
inner join 表2 别名
on 连接条件
等值连接:select last_name,department_name
form employee e
inner join department d
on e.'department_id' = d.'department_id';
非等值连接:select salary,grade_level
from employee e
join job_grades g
on e.'salary' between g.'lowest_sal' and g.'highest_sal'
group by grade_level;
自连接:select e.last_name,m.last_name
from employees e
join employees m
on e.'manager_id' = m.'employee_id'
where e.'last_name' like '%k%';
2.外连接 :用于查询一个表中有,一个表中没有的
特点:外连接的查询结果是主表中的所有记录
如果从表中有和它匹配的值,则显示出来,没有显示null
select * from beauty;
select * from boys;
左外连接:left join左边的是主表
select b.name,bo.*
form beauty b
left outer join boys bo
on b.'boyfriend_id' = bo.'id';
右外连接:right join右边的是主表
select b.name,bo.*
form boys bo
right outer join beauty b
on b.'boyfriend_id' = bo.'id';
全外连接:等于内连接的结果,加上表1有但表2没有的,加上表2有表一没有的
use girls;
select b.*,bo.*
from beauty b
full outer join boys bo
on b.'boyfriend_id' = 'bo.id';
交叉连接:select b.*,bo.*
form beauty b
cross join boys bo;