sql面试题_sql_分组查询、左连接和右连接的区别

10 篇文章 0 订阅
3 篇文章 0 订阅

面试常考分组查询题目汇总

分组查询题目一

有如下表结构,数据如下
.表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
			
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值