datagrid如何获取一行数据中的某个字段值_SQL中常见的面试题

大家在面试数据分析岗或其他岗位的时候,时常会被问到一些SQL题,我今天就将常被问到的一些SQL题及答案整理下,给大家做个参考!

案例所使用的表为:

9fba973f447ec79a437553fe95093abb.png

(一)各种连接函数的区别?

(1)inner join

内连接。返回两个表的交集。根据两个表共有的列来匹配其中的行,强调只有两个表中共有的行对应的行才能匹配出来。

ab628b99760e1ae61fbe2fadf440acb0.png
SELECT 

2ef9718666252c840c06088584f8c9a0.png
查询结果

tips:inner可以省略不写,可以连接后再去重,但是这么做的话,执行下来比较低,我们一般在做表连接之前,先去重。

(2)left join

左连接。以左表为基准,若右表中的对应行不满足条件,则结果会将右表中的这些值以null的形式匹配进来。(right join就是以右表为基准,和left join是相对应的)

a787fbf7ed04d1a6e77a468f873382c0.png
SELECT 

6fbf7c5b6310022848794582f9951b26.png

tips:如果需要的是左表独有的数据,可以使用where条件来过滤掉为null的值。

(3)cross join

交叉连接,结果是笛卡尔积,就是第一个表符合查询条件的行数乘以第二个表中符合查询的行数。

56bc4d461ae060dad446c2cdfdc5ae38.png
部分截图

(4)full join(MySQL中没有,所以我没实现)

全连接。若左表有的数据,而右表中没有,而右表中有的数据,而左表中没有,这种情况会在结果中以空值的形式匹配出来。

182b5411a554d415f7b1a9432a415438.png

tips:虽然MySQL中不支持全连接,但是可以使用union all来实现的。


(二)排序窗口函数?

row_number()、rank()、dense_rank(),这三个函数的作用都是返回相应规则的排序序号。

(1)row_number()

为查询出来的每一行记录都会生成一个序号,依次排序且不会重复。

语法:row_number() over(partition by 字段1 order by 字段2) # 字段1是分组的字段名称

dc7eef6a7897418c839528b7044c05fa.png

(2)rank()

使用rank函数来生成序号,over子句中排序字段值相同的序号是一样的,后面字段值不相同的序号将跳过相同的排名排下一个,rank函数生成的序号有可能是不连续的,即排名可能为1,1,3,是跳跃式排名,有两个第一名时接下来就是第三名。

语法:rank() over(partition by 字段1 order by 字段2)

1c1058b2b940cf9db15fb30b7574a31f.png

(3)dense_rank()

dense_rank函数在生成序号时是连续的,当出现相同排名时,将不跳过相同排名号,有两个第一名时仍跟着第二名,即排名为1,1,2这种。

语法:dense_rank() over(partition by 字段1 order by 字段2)

35f74b87bce2dd711185924e90d6942e.png

(三)on和where的区别?

数据库在连接多张表返回记录的时候,都会生成一个中间临时表。

(1)内连接:使用on或者where没有区别,过滤条件放在on或where中,其返回的结果是一样的。

(2)外连接(以左连接为例):

a. on是在生成临时表时使用的条件,不管on的条件是否为真,都会返回左表中的全部记录。

b. where是在临时表生成之后,再对临时表进行过滤的条件,这时已经没有left join的含义了,条件不为真的就全部过滤掉。


(四)主键和外键的区别?

(1)主键:是一张表中能够确定一条记录的唯一标志(数据库中的一条记录中有若干个属性,若某个属性组具有唯一标识一条记录的特性,那么该属性组就可以作为一个主键)。

(2)外键:用于和另外一张表进行关联。例如,A字段是A表中的主键,那么出现在B表中的A字段能够作为B表的外键,实现A,B表的连接查询。


(五)如何连接多个select?

草莓女孩:SQL中如何连接多个select?​zhuanlan.zhihu.com

(六)字符串常见操作函数?

草莓女孩:SQL中的字符串常见操作函数​zhuanlan.zhihu.com

(七) IN/EXIST的联系和区别?

这部分内容我写在了一个牛客网上的SQL题里了

草莓女孩:牛客网每日一练SQL题——使用含有关键字EXISTS查找未分配具体部门的员工的所有信息​zhuanlan.zhihu.com

(八)数据倾斜是什么?怎么解决?

大量相同的key被分配到同一个区内,一个节点承受着巨大的压力,而其他节点计算完毕后一直在等这个忙碌的节点,拖累了整体的计算时间,效率非常低。

如何解决?

  • 使用小表在左,大表在右的,使用/ + map join(table) / 连接,假设表A为小表,B为大表
# 
  • 连接之前先用group by去重,尽量避免使用distinct
  • 如果是由空值导致的数据倾斜,需要先过滤掉空值

最后,给大家推荐个写简历的好网站wondercv(不是应聘设计类的工作,简历模板不用太花哨,重要的是内容要丰富),我都是直接在上面修改的,很方便!

超级简历​www.wondercv.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值