sql面试题_sql_分组查询左连接和右连接的区别
Posted 平凡加班狗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql面试题_sql_分组查询左连接和右连接的区别相关的知识,希望对你有一定的参考价值。
面试常考分组查询题目汇总
分组查询题目一
有如下表结构,数据如下
.表test结构:
grop score
a 胜
b 负
a 负
b 胜
请写出sql语句,使检索结果如下
组 胜 负
a 1 1
b 1 1
这很明显是一一道分组查询的题目,那么应该如何解答呢
分析
完整数据如下
SELECT grop as '组' ,
count(case when score='胜' then score end) as '胜',
count(case when score='负' then score else null end) as '负'
from test1 GROUP BY grop
SELECT grop '组',
count(case when score='胜' then score end) '胜' ,
count(case when score='负' then score end) '负'
FROM test1 group by grop
能写到这步就可以了
分组查询题目二
表a结构
aid aname
1 a
2 b
表b结构
bid aid bname
1 1 111111
2 2 222222
3 1 333333
要求
检索结果
aid aname bcount
1 a 2
2 b 1
分析,如果是左连接,那么就会是这样,我们的表b的 bid为3的数据直接就丢失了
连接查询:内连接、外连接(左连接、右连接)
如果是右连接呢
联合查询
什么叫联合查询,这里我们注意看联合查询和连接查询的区别
联合查询结果是将多个select语句的查询结果合并到一块因为在某种情况下需要将几个select语句查询的结果合并起来显示。
比如需要查询两个公司的所有员工的信息,这就需要从甲公司查询所有员工信息,再从乙公司查询所有的员工信息,然后将两次的查询结果进行合并。
可以使用union和union all关键字进行操作
注意
其中union选项有两个选项可选
all:表示无论重复都输出
distinct: 去重(整个重复)(默认的)
== 特别注意联合查询需要两张表的表结构是一样的,否则会报错==
我们继续看题
要求根据a表和b表
检索出结果
aid aname bcount
1 a 2
2 b 1
这sql语句要怎么写呢
好家伙,感觉还是不对
完了,这下好了,不会了
检查后发现,是我数据库里面 b表数据不对,其实我查出来是正确的
再查询一下,就对了
select aid,
aname,
(select count(*) from b where a.aid=b.aid) as bcount
from a
以上是关于sql面试题_sql_分组查询左连接和右连接的区别的主要内容,如果未能解决你的问题,请参考以下文章