大家好,在日常学习中分享一下所学的笔记,希望可以帮助到大家~

本篇将多表联查分为三部分来介绍:

1. 通过Select子句进行查询

2.  通过内连接 inner join进行查询

3. 通过外连接left join,left outer join,right join,right outer join,union进行查询
 

一、通过SELECT子句进行多表查询

语法:

select  字段名

from 表1,表2 …

where 表1.字段 = 表2.字段

and其它查询条件

例:以学生表student和班级表class为例

Select   student.sid,  student.sname,  student.classid, class.classid,  class.classname

from student,class

where student.classid = class.classid

注意:上面的代码中,以两张表相同的字段信息作为条件,进行两个表联查,但在实际开发中不建议这样使用,最好用主外键约束来实现。

二、通过内连接 inner join进行查询

语法:

select  字段名

from 表1

inner join 表2

on 表1.字段 =

例:以学生表student和班级表class为例

mysql连表查询为啥数据会多出来 数据库连表查询语句_sql

select   student.sid,  student.sname,  student.classid, class.classid,  class.classname

from student

inner join class

on student.classid = class.classid

mysql连表查询为啥数据会多出来 数据库连表查询语句_sql_02

这种场景下得到的是满足某一条件的student,class内部的数据;正因为得到的是内部共有数据,所以连接方式称为内连接。

三、通过外连接left join,left outer join,right join,right outer join,union进行查询

1.left join

语法:

select  字段名

from 表1

left join 表2

on 表1.字段 =

例:以学生表student和班级表class为例

mysql连表查询为啥数据会多出来 数据库连表查询语句_数据库_03

select   student.*  , class.*

from student

left join class

on student.classid = class.classid

结果如下,class表中不存在的记录填充Null:

mysql连表查询为啥数据会多出来 数据库连表查询语句_mysql连表查询为啥数据会多出来_04

这种场景下得到的是student的所有数据,和满足某一条件的class的数据;

2.left outer join(相当于left join  +  [where 表2.字段 is null])

语法:

select 字段名

from 表1

left join 表2

on表1.字段 =

where 表2.字段isnull

例:以学生表student和班级表class为例

mysql连表查询为啥数据会多出来 数据库连表查询语句_database_05

select   student.sid,student.sname,class.classid,class.classname

from student

left join class

on student.classid = class.classid

where class.classid is null

mysql连表查询为啥数据会多出来 数据库连表查询语句_数据库_06

这种场景下得到的是student中的所有数据减去"与class满足同一条件 的数据",然后得到的student剩余数据 

3.right join

语法:

select  字段名

from 表1

right  join 表2

on 表1.字段 = 表2.字段

例:以学生表student和班级表class为例

mysql连表查询为啥数据会多出来 数据库连表查询语句_字段_07

select  student.*  , class.*

from student

right join class

on student.classid = class.classid

mysql连表查询为啥数据会多出来 数据库连表查询语句_mysql连表查询为啥数据会多出来_08

 这种场景下得到的是class的所有数据,和满足某一条件的student的数据;

4.right outer join(相当于right join  +  [where 表1.字段 is null])

语法:

select 字段名

from 表1

right join 表2

on表1.字段 = 表2.字段

where表1.字段isnull

例:以学生表student和班级表class为例

mysql连表查询为啥数据会多出来 数据库连表查询语句_sql_09

select   student.sid,student.sname,class.classid,class.classname

from student

right join class

on student.classid = class.classid

where student.classid is null

mysql连表查询为啥数据会多出来 数据库连表查询语句_数据库_10

这种场景下得到的是class中的所有数据减去 "与student满足同一条件 的数据“,然后得到的class剩余数据;

4.left join  union right join

语法:

select  字段名

from 表1

left join 表2

on 表1.字段 = 表2.字段

union

select  字段名

from 表1

right  join 表2

on 表1.字段 = 表2.字段

例:以学生表student和班级表class为例

mysql连表查询为啥数据会多出来 数据库连表查询语句_mysql连表查询为啥数据会多出来_11

select   student.*  , class.*

from student

left join class

on student.classid = class.classid

union

select  student.*  , class.*

from student

right join class

on student.classid = class.classid

mysql连表查询为啥数据会多出来 数据库连表查询语句_mysql连表查询为啥数据会多出来_12

 这种场景下得到的是满足某一条件的公共记录,和独有的记录

以上分享希望能帮到你,有错误及时指正哦~