Mysql连接查询

Mysql连接查询

分类:
按年代分类:
 sql92标准
 sql99标准【推荐】
内连接:【inner join = join】
 等值连接
 非等值连接
 自连接
外连接:
 左外连接【left outer join = left join】
 右外连接【right outer join = right join】
交叉连接

sql99标准

语法:
select 查询的列
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序条件】

student表
Mysql连接查询_第1张图片
class表
Mysql连接查询_第2张图片
(一)内连接【inner join = join】
JOIN等同于INNER JOIN,即内连接,不满足ON条件的会直接过滤掉,不显示。
①等值连接
案例1:
select *
from student s 【inner】 join class c
on s.class_id = c.id;
Mysql连接查询_第3张图片
案例2:
select *
from student s 【inner】 join class c
on s.class_id = c.id
where s.name like ‘%小%’;
Mysql连接查询_第4张图片
②非等值连接
BETWEEN … AND …
案列:
select *
from student s join class c
on s.class_id between c.id and c.id
where c.id=1 or c.id=2
Mysql连接查询_第5张图片
③自连接
同一个表自己连接
案列:
select *
from student s join student c
on s.id = c.class_id;
Mysql连接查询_第6张图片
(二)外连接
外连接可分为一个主表一个从表:
 外连接的查询结果为主表中的所有记录
 如果从表中有和它匹配的,则显示匹配的值
 如果从表中没有和它匹配的,则显示null
 外连接查询结果=内连接结果+主表中有而从表没有的记录
左外和右外调换两个表的顺序也可以实现同样的效果
①左外连接【left outer join = left join】
左外连接,将左边的表作为主表,不满足ON条件的会保留左边那张表的数据,右边表数据直接显示NULL。
案列:
select *
from student s left join class c
on s.class_id = c.id;
Mysql连接查询_第7张图片
②右外连接【right outer join = right join】
右外连接,将右边的表作为主表,不满足ON条件的会保留右边那张表的数据,左边表数据直接显示NULL。
案列:
select *
from student s right join class c
on s.class_id = c.id;
Mysql连接查询_第8张图片
(三)交叉连接
相当于用sql99语法的标准来实现笛卡尔乘积
案列:
select *
from student s cross join class c
on s.class_id = c.id;
Mysql连接查询_第9张图片

你可能感兴趣的:(Mysql,mysql,sql,数据库,java)