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.条件字段=条件