SQL逻辑语句(持续更新example)

0 前言

在刚开始接触SQL的时候,觉得不就是几个命令嘛

select t1.xx
from xxxx t1
join xxx t2 
	on t1.a = t2.a
where t1.b = "xxx"
group by t1.c
having t1.d < xxx
order by t1.e

对的,一般学MySQL这种数据库入门时,在书上和教程上可以学到的就这些,实际常用的应该也是这些。

要不是在数仓的岗位实习一段时间,我还真就信了这东西有这么简单。

这东西倒像是解释了啥叫简单即是复杂啊,命令简单,但是在实际用起来,逻辑上就没那么简单了,可能是因为我现在用的还不算多,也可能是暂时还没深入研究到关系型的数学理论基础吧,很多时候,逻辑上拐不过来,就是处于一种能看懂,但自己写不出来,然后别人一写,哦,不难啊…

不对,怎么有种高中物理题既视感。

看来还是缺少实践,所以在此记录一下简单的SQL,没想到的逻辑。

1.使用一条SQL求出几个球队之间的所有比赛组合(笛卡尔积)

SQL题目
一个team表里,存了多个球队的信息,比如1, 2, 3, …,这些球队之间两两互相笔试,用一句sql显示所有可能的比赛组合。

思路
使用笛卡尔积连接,然后加限定条件。

select a.name	"主队"
		,b.name "客队"
from team		a
	,team		b
where a.name < b.name

两张表做查询,在不加任何条件的时候,两张表会做笛卡尔积,通过where小于条件限定,会排出重复的数据。

2. 如何判断表中是否含有重复记录(count(distinct))

说来惭愧,在数仓岗位也实习了2个月左右了,虽然因为各种各样的原因,真正实习的时间很短。。。

今天部门的master叫我开发一个表的逻辑,我写的结果发现同一条记录会出现296条。。。master说肯定是中间 join 的表时,未处理,有重复,将数据放大了,叫我查一下。嘿嘿嘿,学了一招。

假设user_info表中,user_id为主键,看看是否存在一个user_id对应多条记录的情况:

select  count(1)	--查看一共有多少条记录
		,count(distinct user_id)	--查看一共有多少个用户
from user_info

看这两个结果是否一致就行了。

当然,这个只能看出来有没有一对多的情况,但是具体是哪一个对应多条记录就不知道了。

3. MySQL中不支持row_number()函数,如何实现?

参考来源:
MySQL中row_number的实现

4. 查询在A表,不在B表中的记录的几种方式

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值