大白话:目的就是关联多张表,等值方式,等值的主表方式,区间值方式,自连接方式
from join on ⭐️
where
group by
having
select distinct
order by
limit
from 表 join 表 on 连接条件:查询字段来自多个表
定义:多表关联查询
笛卡尔集错误: select 字段1,字段2 from 表1,表2
条件:没用连接条件关联字段
结果集:每个字段1的数据匹配所有的字段2的数据
连接 | sql92标准 | sql99标准 |
---|---|---|
内连接 | 等值连接,非等值连接,自连接 | 等值连接,非等值连接,自连接 |
外连接 | 无 | 左外连接,右外连接,全外连接 |
等值连接:两张表合并后,显示【查询条件】相等的对象
非等值连接:两张表合并后,显示【查询条件】区间的对象
自连接:同一张表想象成两张不同的表,显示【查询条件】相等的对象
左外连接:两张表合并后,以左为主表,将主表全部值查出来,从表没有值显示null
右外连接:两张表合并后,以右为主表,将主表全部值查出来,从表没有值显示null
全外连接:两张表合并后,将两张表全部值查出来,没有值显示null
99sql:外连接就是等值的一种方式
#99sql:连接条件写在on,筛选条件写在where
⭐️内连接:
(2)表的前后顺序没有要求
(2)inner 加不加都可以
⭕️等值连接:三表连接时,where不用写三个相等,写两个等于就行,n个表就是n-1个相等
select 字段1,字段2
from 表1 inner join 表2
on 表1.链接字段=表2.链接字段 //(连接条件)
where //筛选条件
⭕️非等值连接:区间连接
表1:学生+学生成绩
表2: 成绩评级+成绩区间(小)+成绩区间(大)
求:表1中的学生成绩评级
select 字段1.学生,表2.评级
from 表1 inner join 表2
on 表2.成绩区间(小)b< 表1.学生成绩 <表2.成绩区间(大)
where //筛选条件
⭕️自连接:同一张表想像成两张表
//员工表同样是领导表
select 员工
from 表1 inner join 表1
on 表1.员工名ID= 表1.领导名ID
where //筛选条件
⭐️外连接:外连接就是等值连接的一种方式(等值+主表+null)
(1)outer 加不加都可以
⭕️左外连接:左面为主表
select 查询列表
from 表名1 别名1 left outer join 表名2 别名2
on 连接条件
where 筛选条件
⭕️右外连接:右面为主表
select 查询列表
from 表名1 别名1 right outer join 表名2 别名2
on 连接条件
where 筛选条件
⭕️全外连接:oracle支持,mysql不支持,主表和从表所有内容都查出来, 匹配不上的用null代替
select 查询列表
from 表名1 别名1 full outer join 表名2 别名2
on 连接条件
where 筛选条件
92sql:不常用
#92sql:筛选条件和连接条件都写在where里,用and隔开
内连接:
(1)表的前后顺序没有要求
(2)from之间相连用逗号(,)
等值连接:三表连接时,where不用写三个相等,写两个等于就行,n个表就是n-1个相等
select 字段1,字段2
from 表1,表2
where 表1.链接字段=表2.链接字段 //(连接条件)
and //筛选条件
非等值连接:区间连接
表1:学生+学生成绩
表2: 成绩评级+成绩区间(小)+成绩区间(大)
求:表1中的学生成绩评级
select 字段1.学生,表2.评级
from 表1,表2
where 表2.成绩区间(小)b< 表1.学生成绩 <表2.成绩区间(大)
自连接:同一张表想像成两张表
//员工表同样是领导表
select 员工
from 表1,表1
where 表1.员工名ID= 表1.领导名ID
and 筛选条件
本文地址:https://blog.csdn.net/lzyPM/article/details/107140591