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

相关推荐

03-13 16:51
已编辑
门头沟学院 硬件开发
点赞 评论 收藏
分享
我是985研究生,最近学校在组织开题,大家都在非常紧张地准备,但我一直进入不了状态,很想做但是心又很浮躁。但我的室友们感觉都非常认真,每天醒来就开始看论文,睡着前最后一件事还是在看论文,我非常焦虑。我感觉自己甚至有点把大家当做假想敌了。这种比较心态还存在于生活的各种方面:看到有钱的同学会非常羡慕,看到朋友圈里面环游世界的留学生同学也会羡慕,看到那些工作后有自己的钱而过上较为阔绰的生活的时候还是羡慕,就仿佛只有自己一个人在阴暗爬行。而且这些比较是每时每刻的,为了不比较,我已经关闭了朋友圈,但是每次偶尔刷一下还是会难受很久。我知道比较是偷走幸福的小偷,但我好像控制不了,感觉自己是一个偷窥别人生活的...
若怜君欢:担心开题搞砸了,幻想拥有别人的生活,本质上是因为自卑,楼主小时候大概率是留守儿童或者父母关系很紧张,导致楼主没有安全感、焦虑、内耗。 这样的情况最好的办法就是建立自信和降低期待,建立自信不是一蹴而就,而是循序渐进,比如告诉自己允许自己第一次没把事情做好,失败了能搞清楚其中缘由而不是全盘否定自己,失败不是终点,放弃才是;降低期待只要记住一句话即可,能伴随你一生的,只有经验和学识,所以你对事情的态度应该更多地去思考它是否能带来学识和经验的增长,而不是仅仅用短期的利益作为唯一期待。 人生不是一成不变的,它是可以迭代更新的,去归纳总结自身的不足并结合实际去改进,去尝试一些新的思路和方法,不要固执钻牛角尖,也不要反复横跳,为自己设立一个高度聚集的精神内核,内核之上可以去尝试一切有利于自己更好的方式 以上就是我个人对生活的理解,共勉
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务