数据库相关问题


一、排序的窗口函数

  1. row_number(): 1,2,3
    依次排序,在排序时序号连续不重复。
  2. rank(): 1,1,3
    并列跳跃排名,并列即相同的值保留重复名次。遇到下一个不同值时,跳跃到总共的排名。
  3. DENSE_RANK(): 1,1,2
    组内的数据按ORDER BY子句排序,然后给每一行赋一个序号,形成一个序列。该序列从1开始,每次ORDER BY表达式的值发生变化时,该序列的序号值也随之增加。如果有值相同的话,序号也是相同的(认为null时相等的)。
    序列返回时序号无间隔。

二、IN 和 EXISTS 区别

  1. 内外表查询
    (1) IN先执行内表查询获取结果集,然后对外表查询匹配结果集,返回数据。
    (2)EXISTS先执行外表查询,将外表中的每一条数据代入内表查询中,看是否满足条件。
    EXISTS返回的结果是一个 boolean 值 true 或者 false ,而不是某个结果集。因为它不关心返回的具体数据是什么,只是外层查询需要拿这个布尔值做判断。
  2. 索引
    IN在内表查询和外表查询中都会用到索引,EXISTS只在内表查询中使用索引。
  3. 效率
    如果外表较小,子查询的结果集较大时,使用EXISTS,效率高
    如果外表较大,子查询的结果集较小时,使用IN,效率更高
  4. not innot exists
    not exists的效率比not in的效率高,与子查询的结果集无关。
    not in对内外表都进行了全表扫描,没有用到索引。not exists对内表使用了索引。

三、索引

四、连接

将两个表的数据连接在一起。

  1. 外连接
    左外连接:根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,
    如果找不到与左表匹配的,用null表示。
    右外连接:显示右表所有数据及左表中符合条件的记录,左边不符合条件的记录用null表示。
  2. 内连接
    两表中符合条件的记录。
  3. 交叉连接
    使用笛卡尔积的连接。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值