4-2 SQL进阶考点整理

【SQL考点整理】

在初步了解SQL的基本语法后,可以通过牛客的在线编程练习进行巩固。但在校招中还是会有一些相关的考题,光靠编程练习可能没法照顾周全,仍然需要我们在日常进行总结,应对笔试面试

 (1) SQL的执行顺序

   有以下典型的SQL查询语句:

SELECT

DISTINCT <select_list>

FROM <left_table>

JOIN <right_table>

ON <join_condition>

WHERE <where_condition>

GROUP BY <group_by_list>

HAVING <having_condition>

ORDER BY <order_by_condition>

LIMIT <limit_number>
各个命令的执行顺序如下:

 

这里的执行顺序需要背诵下来,注意select的语句虽然写在SQL的第一行,但执行顺序却是靠后的。

(2) 去重的方法

distinctdistinct函数是最常用的去重函数现有table1,数据内容如下:

若想取出表中所有不重复的uid,可以直接
 select distinct uid from table

想计算表***有多少个不重复的uid,结合count函数即可:count(distinct uid)

 (3) 对查询数据进行分类

 case when 函数是日常写sql的时候最常使用的语法之一使用的方法非常简单
 case when col1 in (‘a’,’b’) then 1
      when col1 in (‘c’,’d’) then 2
      else 0 end as flag

在使用case when的时候需要注意函数只会返回第一个符合条件的值如果你写成这样,col1的值为a的时候已经被判成了1,不会返回2.

case when col1 in (‘a’,’b’) then 1
     when col1 in (‘a’) then 2
     else 0 end as flag 

(4) between操作符

      sql中比较数值大小限定数值范围的操作符很多但是常用的>,<就不多说了这里重点说一下between的两端between操作符选取介于两个值之间的数据范围内的值例如:btween 30 and 60 其实等价于 ≥30 and ≤60。


(5) 各种连接方式的区别?

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

left join/right join/all join: (左,右,全)外连接,以left join为例,如果指定了需要匹配的列名,无论右表对应行是否包含满足连接条件的数据,左表的数据都会提取出来,则结果会将右表的这些值以空值的形式匹配进来。

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


(6) where on的区别

 在使用连接函数时会使用on来指定连接条件但是有一点需要记住例如在left join中无论on的条件是否真都会返回左边中全部的值

但是where就不一样来where一般都是用在临时表生成以后连接函数完成之后),对数据进行筛选

结合(1)中的执行顺序可以更好的理解on的执行在前where的执行在后

(7) 索引的作用?

索引是为了提高数据库查询数据的速度而增加的标志符号(通过创建唯一性索引,可以保证表中每一行数据的唯一性)。索引主要建立在经常搜索的列;主键所在列;外键所在列。

索引包括聚集索引与非聚集索引,它们的区别在于索引记录的顺序与表记录的顺序是否一致。

聚集索引:   可以理解为索引记录的顺序与表记录的顺序一致,SQL默认在依次递增的主键上建立聚集索引,例如,id为1的数据在第一条,id为2的数据在第二条。聚集索引会按照主键的顺序来排序。就像用字典找字,对于认识的字可以通过拼音排序对应正文找到页码。

非聚集索引:   可以理解数据存储在一个地方,索引指向数据存储的位置,索引的顺序与表中数据记录的顺序不一定一致。例如说,建立数据表登记学生考试成绩,字段包括姓名,学号与分数。假定该表按照成绩排序、学号信息错乱,可以考虑构建非聚集索引,第一名对应1,第二名对应2……,想要提取第10个学生的学号,查找索引10指向的数据即可。就像用字典找字,不认识的字可以采用部首结合笔画等信息在检字表中搜索,找到页码。比如查"张"字,检字表中"张"的页码是60页,检字表中"张"的上面是"驰"字,但页码却是100页,"张"的下面是"弩"字,页面是200页。很显然,在正文里面这些字并不是真正的分别位于"张"字的上下方,而检字表中连续的"驰、张、弩"三字实际上就是他们在非聚集索引中的排序。

(8) where和having的区别?

在(1)各个命令的执行顺序中我们提过,where的执行顺序

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

<p> 为什么要学习本专刊 (1)数据分析面试日益激烈,招聘门槛提高,对业务、技术的综合考察难度上升; (2)网上对数据分析面试题型的整理与解析质量参差不齐,缺少框架清晰、内容全面的学习资料; (3)直击数据分析面试热点问题; </p>

全部评论
在命令执行顺序,Select 应该先于Having。在(8)中也提到,在使用Having时可以直接使用 Select后聚合函数的别名,说明Select是先执行的。也可以参考这个https://blog.csdn.net/weixin_43618989/article/details/105896711
4 回复 分享
发布于 2021-06-21 17:24

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务