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) 去重的方法?
select distinct uid from table
想计算表***有多少个不重复的uid,结合count函数即可:count(distinct uid)
(3) 对查询数据进行分类?
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
sql中比较数值大小,限定数值范围的操作符很多,但是常用的>,<就不多说了,这里重点说一下between的两端,between操作符选取介于两个值之间的数据范围内的值。例如:btween 30 and 60 其实等价于 ≥30 and ≤60。
inner_join: 内连接,根据两个表共有的列来匹配其中的行,强调只有两个表共有的列值对应的行才能匹配出来。
left join/right join/all join: (左,右,全)外连接,以left join为例,如果指定了需要匹配的列名,无论右表对应行是否包含满足连接条件的数据,左表的数据都会提取出来,则结果会将右表的这些值以空值的形式匹配进来。
cross join: 交叉连接,结果是笛卡尔积,就是第一个表符合查询条件的行数乘以第二个表符合查询条件的行数。
在使用连接函数时,会使用on来指定连接条件,但是有一点需要记住:例如在left join中,无论on的条件是否真,都会返回左边中全部的值。
但是where就不一样来,where一般都是用在临时表生成以后(连接函数完成之后),对数据进行筛选。
(7) 索引的作用?
索引是为了提高数据库查询数据的速度而增加的标志符号(通过创建唯一性索引,可以保证表中每一行数据的唯一性)。索引主要建立在①经常搜索的列;②主键所在列;③外键所在列。
索引包括聚集索引与非聚集索引,它们的区别在于索引记录的顺序与表记录的顺序是否一致。
聚集索引: 可以理解为索引记录的顺序与表记录的顺序一致,SQL默认在依次递增的主键上建立聚集索引,例如,id为1的数据在第一条,id为2的数据在第二条。聚集索引会按照主键的顺序来排序。就像用字典找字,对于认识的字可以通过拼音排序对应正文找到页码。
在(1)各个命令的执行顺序中我们提过,where的执行顺序
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
<p> 为什么要学习本专刊 (1)数据分析面试日益激烈,招聘门槛提高,对业务、技术的综合考察难度上升; (2)网上对数据分析面试题型的整理与解析质量参差不齐,缺少框架清晰、内容全面的学习资料; (3)直击数据分析面试热点问题; </p>