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基础语法之多表连接查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库之多表查询

编程之路:MySql系列之多表查询

MySQL数据篇之多表操作-----保姆级教程

多表查询之多表查询的概述

MySQL之多表查询

MySQL之多表查询