数据分析基础问题总结——SQL(1)

1.sql如何解决数据倾斜问题?

在SQL数据库中,数据倾斜问题通常是指在查询操作中某些数据分布不均衡,导致一些查询或操作的性能下降。以下是一些解决SQL数据库中数据倾斜问题的常见方法:

①索引优化:确保表中经常被查询的列上有合适的索引,这可以加速查询操作并减轻数据倾斜的影响。

②分区表:如果数据库支持分区表,可以将表数据按照某个列的值(比如时间戳)进行分区,使得数据在物理存储上更均匀分布。

③优化查询语句:避免使用过于复杂的连接操作或聚合操作,以减少数据倾斜的可能性,尽量避免全表扫描,以提高查询效率。

④使用临时表:对于某些复杂查询,可以将查询结果存储在临时表中,然后再进行进一步的操作,这有助于平衡计算负载并减少数据倾斜的影响。

⑤使用样本查询:在某些情况下,可以使用随机样本查询来获取近似的查询结果,以减轻数据倾斜带来的影响。

⑥数据缓存:使用数据库的查询缓存功能,将经常被查询的数据缓存起来,以减少对倾斜数据的重复查询。

2.SQL中,where 和 having 的区别有哪些?

在SQL中,where 和 having 是两个用于筛选数据的关键字,但它们的适用场景和功能略有不同。其主要区别如下:

①应用对象不同:where 用于在执行查询(即数据被检索出来)之前对数据进行过滤,作用于表的行级别;而 having 用于在执行聚合函数(即sum(),count(),avg()等)后过滤结果,作用于查询的结果集。

②聚合函数:不能直接在 where 子句中使用聚合函数,可以在 having 子句中使用聚合函数。

③查询语句:where 用于普通的 select 查询,而having只能用于group by查询。

3.SQL中,union 和 join 的区别有哪些?

union 和 join 是在SQL查询中用于不同目的的两个不同的操作。

①union:用于将两个或多个具有相同列结构的结果集合并成一个单一的结果集。结果集中不会有重复的行,即使在不同的输入结果集中有相同的行也会被合并成一个。举例:

SELECT COLUMN1,COLUMN2 FROM TABLEAUNIONSELECT COLUMN1,COLUMN2 FROM TABLEB

②join:用于在多个表之间基于某些列的关联将数据组合在一起。通过指定连接条件,可以从多个表中选择相关的数据行,将它们组合成一个更大的结果集。根据连接条件,有不同类型的 join ,包括 inner join , left join , right join , full outer join 等等。距离:

SELECT COLUMN1,COLUMN2 FROM TABLEAINNER JOIN TABLEB ON TABLEA.COLUMN = TABLEB.COLUMN

其主要区别在于:union 用于合并多个结果集,确保结果集中没有重复行。join 用于将多个表中的数据联合在一起,根据指定的连接条件筛选关联的数据行。

4.SQL语句的执行顺序是怎样的?

SQL查询的执行顺序通常可以按以下步骤理解:

①FROM子句:从指定的表中获取数据。

②JOIN子句:如果在查询中使用了JOIN操作,根据连接条件将不同的表组合在一起。

③WHERE子句:过滤符合条件的行。

④GROUP BY 子句:如果使用了GROUP BY,那么根据指定的列对结果进行分组。

⑤HAVING子句:过滤符合条件的分组。

⑥SELECT子句:选择要返回的列,可以进行聚合操作(如SUM,COUNT等)。

⑦DISTINCT关键字:移除结果集中的重复行。

⑧ORDER BY子句:对结果集按照指定列进行排序。

⑨LIMIT/OFFSET子句:只返回指定数量的行。

5.SQL如何实现去重操作?

SQL去重方法如下:

①DISTICT关键字:在SELECT语句中使用,可以删除所有重复行,只保留不同值。

②GROUP BY子句:通常与聚合函数一起使用,它将查询结果按指定列分组,并对每个分组进行聚合计算。如果只需要列出不同的值,可用GROUP BY子句并省略聚合函数,这样会自动去重。

③使用子查询:在SELECT语句中嵌套一个子查询,可以选择唯一的值。

④UNION操作符:合并两个或多个查询的结果集,并自动去除重复行。

以上去重方法都可能会影响查询性能,需要谨慎使用。

6.SQL中,count(*) , count(字段) , count(distinct 字段)的区别是什么?

在SQL中,count 函数用于计算满足指定条件的行数。可以以不同的方式使用,具体区别如下:

①count(*)计算所有行的数量,无论列中的值是什么。

②count(字段)计算指定列非空值的数量,不包括NULL值。

③count(dinstinct 字段)计算指定列中不同非空值的数量,排除重复的值。

7.SQL中如何将'yyyy-MM-dd'的日期格式转换为'yyyyMMdd'形式?

在SQL中,可以用CAST或CONVERT函数将日期格式做转换。

举个在具体数据库中使用的示例:

# MySQL:
select cast(date_column as char(8)) from your_table;
# Oracle:
select to_char(date_column,'yyyyMMdd') from your_table;
# SQL Server:
select convert(varchar(8),date_column,112) from your_table;
# PostgreSQL:
select to_char(date_column,'yyyyMMdd') from your_table;

8.sql中如何求出两个'yyyyMMdd'格式的日期差多少天?

在SQL中,可以使用DATEDIFF函数计算两个日期之间的天数差异。举例:

select datediff(day,convert(date,'20220824',112),convert(date,'20230824',112)) from your_table;

9.sql中如何将时间戳转换为'yyyy-MM-dd'日期格式?

这个操作通常涉及到使用日期函数来格式化时间戳。以下是常见的示例:

# MySQL:
select date_format(timestamp_column,'%Y-%m-%d') from your_table

10.sql中,if 和 case when 的区别是什么?

if 和 case when 都是在SQL查询中用于条件判断和分支逻辑的语句,但它们在语法和用法上有一些区别。

①语法不同:

if语句是基于函数的条件判断语句。语法如下:

if(condition,vaule_if_true,value_if_false)

case when是基于表达式的条件判断语句。语法如下:

case when condition1 then result1 when condition2 then result2 ... else result end

②if语句只能根据条件返回单个值,不能用于控制程序流程;而case when可以根据多个条件执行不同的代码块,可用于控制程序流程。

③case when支持嵌套使用,可以实现更复杂的条件判断逻辑;而if函数只能处理简单的条件判断。

全部评论
实习会问得深嘛
点赞 回复 分享
发布于 2023-09-03 01:36 广东

相关推荐

04-10 11:02
已编辑
北方民族大学 全栈开发
“无名小卒,还是名扬天下?”我知道很多人都不觉得我能走到今天这一步,当然,也包括我自己。在我的人生里,有两部作品刻下了最深的烙印:《斗破苍穹》与《龙族》。它们总被人拿来对照:一边是萧炎的桀骜轻狂,一边是路明非的怯懦衰颓。有人说,天蚕土豆没见过魂天帝,但江南见过真凯撒。我时常觉得,自己就是那个衰小孩路明非。可路明非可以开挂,我不可以;我也无数次幻想过,能拥有萧炎那般年少轻狂的人生,可我没有他与生俱来的逆天天赋。我只是个平庸的普通人,一个看过《斗破苍穹》却开不了挂的路明非,只能一步一步往上爬。从我下定决心找实习的那一刻起,我就给自己定下了目标:“我一定要为字节跳动卖命.jpg”。萧炎有他的三年之约,我有我的两年半之约(其实是一年半)。2024.11.20,科大讯飞的第一封实习offer落进邮箱,我迈出了这场奔赴的第一步。2025.8.18,放弃百度转正的安稳机会,转身走进前路未卜的不确定里。我很感谢我在百度的mentor,是她从茫茫人海选中了我,给了我大厂实习的机会。即便有段时间我状态差、产出不理想,她依旧愿意认可我、希望我留下转正。2025.11.14,我选择走进字节跳动,以实习生的身份重新出发。2026.3.25 - 3.31,一周速通上海飞书,幸遇赏识我的伯乐,斩获Special Offer。被告知面试通过的那一刻,我的内心无比平静,就像这个offer本就该属于我。不是侥幸,是应得的。这一路,有人看轻过我的出身,不相信我能走到这里;也有人在我看不见前路的时候,替我举过灯。没有他们的鼓励与支撑,就没有今天站在这里的我。我看到了自强不息的激荡,那是一个双非的伟大乐章!我是雨夜迈巴赫,我要开启属于我的新篇章了。
在看牛客的本杰明很勇...:真心祝贺l总 我永远的偶像 我滴神
春招至今,你收到几个面试...
点赞 评论 收藏
分享
评论
5
82
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务