关联查询
之前介绍的内容都是针对一个表进行操作的。在实际开发中,我们经常会把一些信息拆成多个表,好处是便于维护,缺点就是查询起来比较复杂。
关联查询,就是查询多个表的信息。使用关联查询,两个表之间必须有相同的字段进行关联才可以。
内连接(常用)
连接两个表的时候,取的是两个表中都存在的数据。相当于数学中的取交集。
左连接(了解)
连接两个表时,取的是左边表中的所有数据,如果左表中的数据右表中没有对应的,用null来填充。
关键词:left join
右连接(了解)
连接两个表时,取的是右表中特有的数据,对于左表中不存在的数据,用null填充。
关键词:right join
内连接的详解
语法格式:
select * from 表1 inner join 表2 on 表1.列 = 表2.列
内连接语法2:
select * from 表1,表2 where 表1.列= 表2.列
例1:查询学生信息及学生的成绩
有两个表,一个是学生信息表students,一个是成绩表scores,他们通过学生编号studentNo进行关联
注意:
on后面的条件的字段,一定要写清楚是哪个表的字段,语法是 表名.字段名
select * from students inner join scores on students.studentNo = scores.studentNo
上面的结果是一个新的表,把两个表和成一个新的表返回出来。
写法2:通过where:
select * from students,scores where students.studentNo = scores.studentNo
例2:查询课程信息和课程成绩,课程信息的表是courses,课程成绩是scores
注意:
我们可以通过as 给表起别名,在后面on关联的时候就可以使用别名了。
他们的关联字段是courseNo
select * from courses as cour inner join scores as sco on cour.courseNo = sco.courseNo
例3:查询张三的成绩,要求结果显示姓名,课程号和成绩
注意:
1我们先通过内连接关联两个表获取想要的字段,再通过where去筛选新表
2as起别名,as关键字可以省略
select stu.name,sc.courseNO,sc.ccore from students stu
inner join scores sc
on stu.studentNo = sc.studentNo
where stu.name = '张三'