sql 多表联查

多表联查

多表联查分为三类:内连接(inner join )、左连接(left join)、右连接(right  join )

内连接(inner join 、join )

SELECT  * FROM  表A  as a inner join 表B  as b  ON a.连接字段=b.连接字段

解析:inner join 和ON 是内连接的关键词,内连接是取得表A和表B能通过连接字段关联起来的数据。

连接字段可以有多个,用and或者or 关联 如:ON a.连接字段1=b.连接字段1 and a.连接字段2=b.连接字段2 or a.连接字段3=b.连接字段3

PS: as 是给表A,表B取个别名的方便ON关键词后面指定那张表的连接字段,也可以不用as,直接表A.连接字段,如:

SELECT * FROM 表A  inner join 表B  ON 表A.连接字段=表B.连接字段

示例:学生表student 

     

课程表Course                 

       

select* from Student s inner join Course c ON  s.Id=c.StudentId

 

通过student表的id和Course表的StudentId 取到了能关联的张三李四王五的记录、赵六关联不上所以没有记录

左连接(left join)

SELECT  * FROM  表A  as a left join 表B as b ON a.连接字段=b.连接字段

解析:left join和ON 是左连接的关键词,左连接是以左边表A为主表,表B为子表,先查询出表A中的数据,然后关联表B如果关联上了就将数据查询出来,如果表B中没有关联上数据则对应字段为null。

示例:学生表student                                    

   

课程表Course

 

select* from Student s left join Course c ON  s.Id=c.StudentId

 

通过student表的id和Course表的StudentId 取到了能关联的张三李四王五的记录、赵六关联不上所以Course表对应的记录为null

右连接(right join)

SELECT  * FROM  表A  as a right join 表B as b ON a.连接字段=b.连接字段

解析:right join和ON 是右连接的关键词,右连接是以右边表B为主表,表A为子表,先查询出表B中的数据,然后关联表A如果关联上了就将数据查询出来,如果表A中没有关联上数据则对应字段为null。

示例:学生表student

   

课程表Course 

   

select* from Student s right join Course c ON  s.Id=c.StudentId

 

这里之所以数据和内连接(inner join )数据一致,是因为右边表B所有的数据都能关联到左边,如果将student表放置在右边(Course c right join Student s)则和左连接一致

三个表以上连接查询

SELECT  * FROM  表A  as a right join 表B as b ON a.连接字段=b.连接字段  INNER JOIN 表C as c ON c.连接字段=a.连接字段

连接查询如果待条件语句:

SELECT  * FROM  表A  as a right join 表B as b ON a.连接字段=b.连接字段 WHERE a.条件字段=条件
原文地址:https://www.cnblogs.com/YorkQi/p/14801060.html