数据库查询连接(JOIN)用法 | 您所在的位置:网站首页 › 插叙的内容可以去掉 › 数据库查询连接(JOIN)用法 |
概述
工作中写SQL语句时需要用到在多个表之间各查询点数据,然后组合,利用mybatis返回给一个bean对象。 现在把这几个连接总结下,方便下次用时参考。 JOIN下面是学生表student: idnamesexage001aaaboy10002bbbgirl10003cccgirl10004dddboy10005eeegirl10006fffboy10下面是学生成绩表grades: idmathchineseenglish001909495002919793003929896004939291007949090008959596现在,查询学生的数学成绩并对应姓名。可以先用不使用连接的SQL语句查询: select student.name, grades.math from student,grades where student.id = grades.id这样的查询结果为: namemathaaa90bbb91ccc92ddd93 INNER JOIN先看一下用INNER JOIN 的SQL语句查询上面的内容写法: select student.name, grades.math from student inner join grades on student.id = grades.idINNER JOIN定义:在查询的几个表中,每个表都存在至少一个匹配时,INNER JOIN 关键字返回行。也就是共有部分,即,几个表的交集。 LEFT JOIN把上面内连接(INNER JOIN)的关键字改为left join效果如何呢? select student.name, grades.math from student left join grades on student.id = grades.id下面是查询结果: namemathaaa90bbb91ccc92ddd93eeefff会发现学生eee和fff没有成绩,原因是因为: LEFT JOIN定义:关键字会从左表 (student) 那里返回所有的行,即使在右表 (grades) 中没有匹配的行。 RIGHT JOIN有了LEFT JOIN,肯定会想,有没有RIGHT JOIN呢?答案是,有的。 select student.name, grades.math from student right join grades on student.id = grades.id下面是查询结果: namemathaaa90bbb91ccc92ddd939495会发现,多了两列没有名字,只有成绩的行。 RIGHT JOIN定义:关键字会右表 (grades) 那里返回所有的行,即使在左表 (student) 中没有匹配的行。 FULL JOIN有了左连接,有了右连接,还有了内连接(交集),那有没有取并集的连接呢?答案是,有的。 select student.name, grades.math from student full join grades on student.id = grades.id查询结果,想必也知道了: namemathaaa90bbb91ccc92ddd93eeefff9495FULL JOIN定义:只要查询的某个表存在匹配,FULL JOIN 关键字就会返回行。 但是:MySQL中没有FULL JOIN,那么MySQL中要用FULL JOIN的效果怎么办呢? UNION用法: select student.name, grades.math from student left join grades on student.id = grades.id union select student.name, grades.math from student right join grades on student.id = grades.idUNION定义:UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 注意: UNION和UNION ALL区别:UNION ALL会列出所有结果,有重复,UNION没有重复。 总结 INNER JOIN: 如果查询的表中都有至少一个匹配,则返回行LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行FULL JOIN: 只要其中一个表中存在匹配,就返回行UNION:合并多个SELECT 语句的结果集 |
CopyRight 2018-2019 实验室设备网 版权所有 |