从数据库中查询数据时,会经常使用到多张表的数据,有些数据需要从两张或多张表中共同获取。
举个例子,这里有两张表格,分别是学生信息表(表A)、学生成绩表(表B)。
stunum | stuname | major | age |
---|---|---|---|
20200101 | 张三 | 软件工程 | 18 |
20200102 | 李莉 | 计算机科学与技术 | 19 |
20200103 | 王五 | 信息技术 | 20 |
20200104 | 张小 | 软件工程 | 20 |
stunum | stumname | math | english | shujujiegou |
---|---|---|---|---|
20200101 | 张三 | 67 | 80 | 60 |
20200102 | 李莉 | 80 | 85 | 89 |
20200103 | 王五 | 75 | 75 | 90 |
20200104 | 张小 | 75 | 75 | 95 |
例一 假设我们要查询专业为转件工程的同学的各科成绩,可以看到专业信息在表A,成绩信息在表B,如果我们要查询的话,要以表A为基础,因为首先要查到专业为软件工程专业的学生,这时我们把表A作为左表,用左连接来查询。
查询语句为:
select A.stunum,A.stuname,A.major,B.math,B.english,B.shujujiegou #查询A表的学号、A表的姓名、A表的专业、以及B表数学、英语、数据结构成绩。
from A left join B #从A与B的左连接表中
where major="软件工程" and A.stunum=B.stunum #条件是专业为软件工程且学号相等
order by A.stumun asc; 按学号升序排列
查询结果为,从左到右字段分别为学号、姓名、专业、数学分数、英语分数、数据结构分数。
20200101 | 张三 | 软件工程 | 67 | 80 | 60 |
---|---|---|---|---|---|
20200104 | 张小 | 软件工程 | 75 | 75 | 95 |
这就是left join的用法,以左表为基础来查询。
例二 假设要查询数据结构分数在80分以上的同学的学号,姓名、专业、年龄。从表中可以看到成绩在表B中,所以要先从表B中查询到数据结构分数大于80分的同学,然后再去表A查询专业、年龄字段。
查询语句为:
select A.stunum,A.stuname,A.major,A.age,B.shujujiegou #查询学号、姓名、专业、年龄、数据结构分数
from A right join B #从A与B的右连接表中
where B.shujujiegou >'80'and A.stunum=B.stunum #条件是数据结构分数大于80且A与B的学号相等
order by B.shujujiegou asc;#按数据结构分数升序排列
查询结果为,从左到右字段分别为学号、姓名、专业、年龄、数据结构分数。
20200102 | 李莉 | 计算机科学与技术 | 19 | 89 |
---|---|---|---|---|
20200103 | 王五 | 信息技术 | 20 | 90 |
20200104 | 张小 | 软件工程 | 20 | 95 |
这就是right join的用法,以右表基础来查询。