数据分析面试问题-SQL

本文详细介绍了SQL查询的执行顺序,表连接的不同类型,包括INNERJOIN、LEFTJOIN等,以及窗口函数如ROW_NUMBER、RANK等的应用。此外,还涵盖了索引的作用、排名与排序的区别、ON与WHERE在连接中的角色,主键和外键的概念,以及数据插入、删除操作和字符串操作函数。
摘要由CSDN通过智能技术生成

1SQL 的执行顺序

FROM - ON - JOIN - WHERE - GROUP BY - WITH - HAVING - SELECT - DISTINCT - ORDER BY - LIMIT

在 SQL 中,查询语句的执行顺序通常是按照以下步骤进行的:

  1. FROM:首先,从指定的表(或视图)中获取数据,这是查询的基本数据源。
  2. WHERE:然后,根据 WHERE 子句中的条件筛选出满足条件的行。
  3. GROUP BY:如果查询包含 GROUP BY 子句,则将结果按照指定的列进行分组。
  4. HAVING:在分组后,根据 HAVING 子句中的条件筛选出满足条件的分组。HAVING 子句可以被认为是 WHERE 子句针对分组后的结果的过滤器。
  5. SELECT:选择要检索的列,并且对数据进行计算、转换等操作。
  6. DISTINCT:如果查询包含 DISTINCT 关键字,则去除结果集中重复的行。
  7. ORDER BY:按照指定的列对结果集进行排序。
  8. LIMIT / OFFSET:如果使用了 LIMIT 或 OFFSET 子句,最后根据这些子句来限制结果集的大小或移动结果集的起始位置。

需要注意的是,虽然这是一般情况下的执行顺序,但在实际执行过程中,数据库系统可能会对查询进行优化和重排,以提高性能。

2、表连接方式有哪些及其区别?

(1)一般情况下

在 SQL 中,连接是用于联合两个或多个表的操作,以便获取相关的数据。

有几种连接方式,主要包括 INNER JOIN、LEFT JOIN(或 LEFT OUTER JOIN)、RIGHT JOIN(或 RIGHT OUTER JOIN)和 FULL JOIN(或 FULL OUTER JOIN)。以下是它们的主要区别:

  1. INNER JOIN:INNER JOIN 返回两个表中符合连接条件的行。如果某一行在其中一个表中没有匹配行,则该行不会包含在结果中。
  2. LEFT JOIN (或 LEFT OUTER JOIN):LEFT JOIN 返回左表中的所有行,以及右表中符合连接条件的行。如果在右表中没有匹配的行,则结果集中右侧的列将包含 NULL 值。
  3. RIGHT JOIN (或 RIGHT OUTER JOIN):RIGHT JOIN 返回右表中的所有行,以及左表中符合连接条件的行。如果在左表中没有匹配的行,则结果集中左侧的列将包含 NULL 值。
  4. FULL JOIN (或 FULL OUTER JOIN):FULL JOIN 返回左右两个表中的所有行,如果在其中一个表中没有匹配的行,则另一个表中对应的列将包含 NULL 值。

在实际应用中,选择连接方式取决于你需要的结果。如果你只想获取两个表中匹配的行,可以使用 INNER JOIN。如果你想保留左表中的所有行,并且将右表中匹配的行加入,可以使用 LEFT JOIN。同样,RIGHT JOIN 是保留右表中的所有行,而 FULL JOIN 保留两个表中的所有行。

连接操作可以根据数据之间的关系和业务需求来选择,因此了解不同连接方式的特点对于写出准确的 SQL 查询语句是很重要的。

(2)若没有共同的字段,用什么连接?union union all的区别?

如果没有共同的字段,你可以使用CROSS JOIN连接方式。CROSS JOIN会返回两个表的笛卡尔积,即两个表的所有可能组合。

union与union all的区别在于,union 进行去重,而union all不去重

3、窗口函数有哪些

窗口函数(Window Functions)是一种SQL中强大的工具,用于在查询结果集中执行聚合、分析和计算操作。下面是一些常见的窗口函数:

  1. ROW_NUMBER():为结果集中的每一行分配一个唯一的数字。
  2. RANK():为结果集中的每一行分配一个排名,相同的值将获得相同的排名,但是会跳过相同排名数量。
  3. DENSE_RANK():与RANK()类似,但是不会跳过相同排名数量,排名是连续的。
  4. NTILE(n):将结果集划分为n个相等大小的桶,并为每个桶中的行分配一个桶号。
  5. LEAD(column, offset, default):获取当前行之后第offset个行的值。
  6. LAG(column, offset, default):获取当前行之前第offset个行的值。
  7. FIRST_VALUE(column):获取分组中第一行的指定列的值。
  8. LAST_VALUE(column):获取分组中最后一行的指定列的值。
  9. SUM(), AVG(), COUNT(), MIN(), MAX():这些聚合函数也可以用作窗口函数,用于在窗口内执行聚合操作而不是整个结果集。
  10. PERCENT_RANK():为结果集中的每一行计算百分比排名。
  11. CUME_DIST():计算当前行在整个分组中的累积分布百分比。
  12. PERCENTILE_CONT():计算分组中指定百分位数的近似值。
  13. LAG() OVER (PARTITION BY ... ORDER BY ...):在指定分区内根据指定顺序获取前一行的值。
  14. LEAD() OVER (PARTITION BY ... ORDER BY ...):在指定分区内根据指定顺序获取后一行的值。

这些窗口函数可以在SELECT语句的SELECT列表、ORDER BY子句和GROUP BY子句中使用,并且通常与OVER子句一起使用,以定义窗口的边界和排序规则。窗口函数提供了强大的功能,可以在查询结果中进行复杂的分析和处理。

4.索引的作用?

索引:通过创建索引,可以保证表中数据的唯一性)。

索引主要建立在①经常搜索的列;②主键所在列;③外键所在列索引包括聚集索引与非聚集索引,它们的区别在于索引记录的顺序与表记录的顺序是否一致。

5.排名函数与排序函数?

排序函数: order by (默认asc升序,指定desc降序),例如将表格数据按照考试成绩从低到高排序。

排名函数: rank, dense rank, row number ,得到的成绩的排序后,根据成绩的高低对学生排名,100分对应第一名,99分第二名。

它们的区别在于:row number:    根据成绩排序生成连续的序列号,1,2,3,4,5……;

rank:  和row number 不同,rank 考虑了相同分数学生的排名问题。如第一名100分,第2名两个人并列99分,那么98分的同学排名第四。

dense rank:    和rank的区别在于,同样考虑了分区内的排名,但dense rank的输出结果是连续的。如第一名100分,第2名两个人并列99分,那么98分的同学排名第三。

6.on  where 的区别?

数据库在连接多张表返回记录时,都会生成一个中间临时表。在内连接中,使用on或者where没有区别。在外连接里,例如使用left join时:on是在生成临时表时使用的条件,不管on的条件是否为真,都会返回左边表中的全部记录。where条件是在临时表生成好后,再对临时表进行过滤的条件。

7.主键和外键?

主键是一张表中能够确定一条记录的唯一标志。

外键用于和另一张表进行关联。

8.向表中插入数据?

insert into table name values:     普通插入数据模式insert or ignore into:    如果没有则插入数据,如果有则忽略insert or replace into:    如果不存在就插入,存在就更新

9.删除表中数据?

delete  :    删除表中数据,可以指定具体数据(where)

drop column/ drop table :    删除列数据,与delete 不同,drop函数会将数据以及表的结构全部删除。

truncate:    仅删除数据,且默认删除所有数据。和delete不同,truncate不能用where进行筛选,但删除速度比delete快

10.字符串常见操作函数?

concat():    将多个字符串连接成一个字符串,连接符用“”包起来

concat_ws(); 将多个字符串连接成一个字符串,在最开始的位置指定连接符(指定一次即可)

group concat():    将group by产生的同一个分组中的值连接起来,返回一个字符串。

like():     需要与通配符一起使用('%'代表任意字符出现任意次数;'_'仅能匹配单个字符)

substr():     用于从字段中提取相应位置的字符。

regexp() :    正则表达式匹配函数

11. In/exist的联系与区别

子查询过程中,Inexist函数效率比较:当进行连接的两个表大小相似,效率差不多;如果子查询的内表更大,则exist的效率更高如果子查询的内表小,则in的效率高。

Exist的原理:    使用exist时,若子查询能够找到匹配的记录,则返回true,外表能够提取查询数据;使用 not exist 时,若子查询找不到匹配记录,则返回true,外表能够提取查询数据。

 

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是大数据分析工程师面试集锦3中关于sql/sparksql/hiveql的问题和回答: 1. 什么是SQLSQL(Structured Query Language)是一种用于管理关系型数据库的标准语言,它可以用来查询、插入、更新和删除数据。 2. 什么是SparkSQL? SparkSQL是Apache Spark中的一个模块,它提供了一种用于处理结构化数据的API,可以将结构化数据作为RDD(Resilient Distributed Datasets)来处理,同时还支持SQL查询和DataFrame API。 3. 什么是HiveQL? HiveQL是Apache Hive中的一种查询语言,它类似于SQL,但是可以用于查询和分析存储在Hadoop分布式文件系统中的大数据集。 4. 什么是SQL注入攻击? SQL注入攻击是一种利用应用程序中的漏洞,向数据库中注入恶意代码的攻击方式。攻击者可以通过注入恶意代码来获取敏感信息或者破坏数据库。 5. 什么是Spark的RDD? RDD(Resilient Distributed Datasets)是Spark中的一个核心概念,它是一个不可变的分布式数据集,可以被分区和并行处理。RDD可以从Hadoop分布式文件系统、本地文件系统、Hive、HBase等数据源中创建。 6. 什么是Hive的分区? Hive的分区是将数据按照某个字段进行划分,将相同字段值的数据存储在同一个分区中,以便于查询和管理。分区可以提高查询效率和数据管理的灵活性。 7. 什么是Hive的Bucket? Hive的Bucket是将数据按照某个字段进行划分,并将相同字段值的数据存储在同一个Bucket中。Bucket可以提高查询效率和数据管理的灵活性,同时还可以用于数据的随机抽样和均匀分布。 8. 什么是Hive的UDF? Hive的UDF(User-Defined Function)是用户自定义的函数,可以用于扩展Hive的查询功能。UDF可以是一元函数、二元函数或者聚合函数,可以用Java或者其他编程语言编写。 9. 什么是Hive的UDAF? Hive的UDAF(User-Defined Aggregation Function)是用户自定义的聚合函数,可以用于扩展Hive的聚合查询功能。UDAF可以用Java或者其他编程语言编写。 10. 什么是Hive的UDTF? Hive的UDTF(User-Defined Table-Generating Function)是用户自定义的表生成函数,可以用于扩展Hive的查询功能。UDTF可以返回一个或多个表,可以用Java或者其他编程语言编写。 ### 回答2: 随着大数据技术的不断发展,大数据分析工程师的需求越来越大。在大数据分析工程师的面试中,SQL、Spark SQL和HiveQL都是必须掌握的技能。 SQL常见问题: 1.请简单说明什么是SQL语言? SQL(Structured Query Language)是一种用于管理关系数据库的语言,它可以用来创建、读取、更新和删除数据库中的数据。 2.请介绍SQL中的SELECT语句? SELECT语句是SQL中最常用的语句之一,它可用于从数据库中查询信息。SELECT语句所包含的子句有FROM、WHERE、GROUP BY、HAVING和ORDER BY等。 3.如何用SQL实现表的关联查询? 表的关联查询是SQL中非常常见的操作之一。对于两个表的关联查询,我们需要使用JOIN子句,JOIN子句必须指定两个表之间的连接条件。 Spark SQL常见问题: 1.请简单说明什么是Spark SQL? Spark SQL是Spark生态系统中的一部分,它是一个高性能的分布式SQL引擎,可以在Hadoop上运行,支持SQL语言和Spark的数据操作,并且提供比基本RDD操作更有效的数据处理方法。 2.请简单介绍Spark SQL的DataFrame? DataFrame是Spark SQL的一项核心功能,类似于传统SQL中的表,它是一个分布式的行列数据集合。DataFrame支持多种数据源,包括HDFS、Hive、MySQL等,并支持多种数据格式。 3.如何使用Spark SQL进行聚合操作? Spark SQL支持所有常见的聚合操作,例如COUNT、SUM、AVG、MAX和MIN等。聚合操作需要使用GROUP BY 子句对数据进行分组,然后使用聚合函数对数据进行汇总。 HiveQL常见问题: 1.请简单说明什么是HiveQL? HiveQL是Apache Hive用于查询和分析数据的SQL-like语言。它将Hadoop HDFS中的结构化数据映射为一张数据库表,并提供了一个HiveQL控制台,可以使用标准的SQL语言对表进行查询和增强。 2.请简单介绍HiveQL中的自定义函数(UDF)? UDF(User-Defined Function)是HiveQL中的一项常见功能,它允许用户自定义函数来处理数据。用户可以根据具体需求编写自己的UDF函数。 3.如何使用HiveQL进行数据导入导出? HiveQL可以通过LOAD DATA和INSERT INTO语句实现数据导入和导出。HiveQL支持多种格式的数据源,例如CSV、JSON和Parquet等。 总之,SQL、Spark SQL和HiveQL都是大数据分析工程师必须熟练掌握的技能,面试时需要注意细节,并根据具体情况进行灵活应对。 ### 回答3: SQL/SparkSQL/HiveQL是大数据分析工程师必备的技能之一,因此在面试过程中也会经常涉及到这方面的问题。下面将针对SQL/SparkSQL/HiveQL的面试目予以分析。 1. SQL语言的优势? SQL是结构化查询语言的缩写,主要用于管理关系数据库中的数据。在数据管理方面,SQL具有以下几个优点: (1)数据统计分析方便 (2)适合大规模数据处理 (3)易于使用,不需要编程技能 (4)容易维护和管理数据库 (5)支持事务管理 2. SQL的五种语句分类? SQL语言的五种语句分类分别为:数据定义语言DDL,数据查询语言DQL,数据操纵语言DML,事务控制语言TCL及数据控制语言DCL。 (1)数据定义语言DDL:用于定义数据库的结构,包括创建、修改和删除表、视图、索引等。 (2)数据查询语言DQL:用于查询数据库中的数据,包括SELECT语句,其中包含子查询、聚合函数、连接查询等。 (3)数据操纵语言DML:用于对数据库中的数据进行操作,包括插入、更新和删除等。 (4)事务控制语言TCL:用于维护数据库中的事务,包括COMMIT、ROLLBACK、SAVEPOINT等。 (5)数据控制语言DCL:用于控制数据库用户的访问权限和安全性,包括GRANT和REVOKE等。 3. SparkSQL与HiveQL的联系和区别? SparkSQL是Apache Spark中的SQL解决方案,支持在Spark平台上对数据进行分析和处理。它能够支持多种数据源,这是它与HiveQL最大的不同点。 HiveQL是Apache Hadoop生态圈中的数据仓库模块,在处理大规模数据分析方面有很强的优势。与SparkSQL的数据源兼容性不同,HiveQL主要支持Hadoop生态圈中的各种存储格式。 另外,SparkSQL支持交互式分析和实时计算,而HiveQL更适合批处理分析。在实时处理方面,SparkSQL有更好的性能表现。 4. HiveQL中mapreduce与tez的区别?优点? MapReduce是Hadoop生态圈中最核心的应用框架之一,用于处理和分析大批量数据。在HiveQL的MapReduce模式中,所有的查询都需要经过MapReduce的过程进行计算和处理。 与之不同的是,Tez运行MapReduce作业时,它自己通过DAG(有向无环图)自动完成Map和Reduce操作。这对于那些需要耗费大量计算资源的任务来说是非常有好处的。此外,Tez可以减少HiveQL中的查询时间,提高查询效率,适用于大规模数据处理和分析。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值