MySQL基础语法之多表连接查询
Posted yuwenS.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基础语法之多表连接查询相关的知识,希望对你有一定的参考价值。
mysql的多表连接查询
总结了MySQL中对多张表的连接查询
多表查询语法分为 SQL92 语法和 SQL99 语法
SQL92语法
连接查询:也可以叫跨表查询,需要关联多个表进行查询
- 内连接
基础语法
select 字段,字段,字段,...
from 表名,表名....
where 条件;
// 如果觉得表名太复杂,可以给表取个新名
select 字段,字段,字段,... // (当需要规定要查询哪张表中的字段时需要) 表名.字段
from 表名 新表名,表名 新表名....
where 条件;
如果不加条件的话,会产生笛卡尔积现象
将学生姓名和属于的班级名查询出来 根据两张表的班级 id 相等为条件
select u.name,c.class_name
from user u , class c
where u.class_id = c.class_id
- 自连接
基础语法跟内连接一样,不过不是对于两张表的连接,而是对于一张表的连接
select u.name,t.name
from user u , user t
where u.teacher_id = t.id // 查询学生名字和他对应老师的名字,根据学生的老师id和老师的id相等为条件查询
SQL99语法
- 内连接
基础语法
跟SQL92的基本内连接语法差不多
select 字段,字段,字段,...
from 表名
inner join 表名 // (一般不加inner关键字)
on 条件
inner join 表名
on 条件;
(也可以给表取新表名)
select 字段,字段,字段,... // (当需要规定要查询哪张表中的字段时需要) 表名.字段
from 表名 新表名
inner join 表名 新表名 // (一般不加inner关键字)
on 条件
inner join 表名 新表名
on 条件;
将学生姓名和属于的班级名查询出来 根据两张表的班级 id 相等为条件
select u.name,c.class_name
from user u
join class c
on u.class_id = c.class_id
- 外连接
外连接分为 左外连接 和 右外连接
外连接的一般查询的是当按条件匹配完之后,另一张表还有一些数据没有匹配上,但是需要显示出来,这时候就需要外连接了
基础语法
select 字段,字段,字段,...
from 表名
outer (right/left) join 表名 // (一般不加inner关键字) (如果写的是right那么就是右连接,如果是left那么就是左连接)
on 条件;
// (也可以给表取新表名)
select 字段,字段,字段,... // (当需要规定要查询哪张表中的字段时需要) 表名.字段
from 表名 新表名
outer (right/left) join 表名 新表名 // (一般不加outer关键字) (如果写的是right那么就是右连接,如果是left那么就是左连接)
on 条件;
如何选择是加 right 或 left 呢?
考虑在与自己的需求,想把哪个做为主表,并且如果这个主表在前面就用 left 如果在后面就用 right ,通俗的来说,就是你想将哪一张表没有匹配的数据也显示出来,就用哪张表做主表
查询每个班级对应的老师,如果那个班级没有老师,也要显示出来
select u.teacher_name,c.class_name
from user u
right join class c // (因为是要将所有班级给显示出来并且 class 表在后面,所以用右连接)(如果将 class 表放前,那么就用左连接)
on u.class_id = c.class_id;
总结
写sql语句一定要有耐心,要仔细,加油!!!
单表查询的操作在这:https://blog.csdn.net/qq_45334037/article/details/117336542
以上是关于MySQL基础语法之多表连接查询的主要内容,如果未能解决你的问题,请参考以下文章