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_分组查询左连接和右连接的区别的主要内容,如果未能解决你的问题,请参考以下文章

sql语句左连接右连接区别

08_MySQL DQL(SQL99标准)_多表连接查询中的内连接

SQL中的左连接与右连接,内连接有啥区别

SQL小知识_长期总结

左连接和右连接有啥区别

sql面试题