SQL语句多表联查的实现方法示例
前言
最近面试实习生,发现一般来说,公司喜欢通过一些 SQL 语句来考察你对数据库的使用熟不熟悉。所以我来总结一下我在面试中遇到多表联查是怎么联查的。
三表联查
首先来说多表联查的一些知识点。
多表是指等于或者多余三个表以上的数据库查询。多表联查的类型有:
- 内连接:join,inner join
- 外连接:left join,left outer join,right join,right outer join,union
- 交叉连接:cross join
解释一下,外连接是指将两个表进行合并,如果有不相同的列,那么另外一个表将显示 null。而内连接是指内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。也就是说,运算符可以是 =,也可以是 >、>=、<=、<、!>、!<和<>。
内连接
假如我们有两个表
?1 2 3 4 5 6 7 | student. table id name clsId 1 tjc 1 2 zhangsan 2 3 李四 3 4 刘五 4 5 黄六 5 |
1 2 3 4 5 6 | class. table clsId clsName 1 软件1班 2 软件2班 3 软件3班 4 软件4班 |
为了查询上面两个表,我们可以使用两种查询语句:
?1 2 | select * from student as s,class as as c where s.clsId = class.clsId select * from student as s inner join class as c on s.clsId = class.clsId |
两种结果都是:
id name clsId clsId clsName
1 tjc 1 1 软件1班
2 zhangsan 2 2 软件2班
3 李四 3 3 软件3班
4 刘五 4 4 软件4班
外连接
外连接跟内连接不同之处,如果查询的表中,如果通过关联标示符中,一个表的数据而另外一个表没有响应的数据项,那么就显示 null。
左连接
查询 SQL 语句为:
?1 | select * from student as s left join class as c on s.clsId = c.clsId |
以左表为基准,如果右表没有相应的数据项,那么右表显示为 null。
右连接
?1 | select * from student as s right join class as c on s.clsId = c.clsId |
以右表为基准,如果左表没有相应的数据项,那么左表显示为 null。
全连接
?1 | select * from student as s full outer join class c on s.clsId = c.clsId |
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
交叉连接
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
?1 | select * from student as s cross join class as c order by s.id |
附:多表联合查询训练
示例:求既学过“001”号课又学过 “002”号课的所有学生的学号
?1 2 3 | Select S1.S# From SC S1, SC S2 Where S1.S# = S2.S# and S1.C#=‘001' and S2.C#=‘002 ; |
示例:求“001”号课成绩比“002”号课成绩高的所有学生的学号
?1 2 3 | Select S1.S# From SC S1, SC S2 Where S1.S# = S2.S# and S1.C#=‘001 ' and S2.C#=‘002' and S1.Score > S2.Score; |
总结
到此这篇关于SQL语句多表联查实现的文章就介绍到这了,更多相关SQL语句多表联查内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/T1014216852/article/details/79522896
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。