暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

面试中常见的 10 大SQL查询

原创 外瑞古德 2022-10-24
1147

介绍

随着技术和数据的进步,工作机会正在迅速增加。如今,比起笔记本理论,每个人都对实践实践知识更感兴趣。同样,面试官也越来越聪明,现在,他们不再对了解 SQL 是什么、它有什么好处、SQL 的优点或缺点感兴趣,而是对如何使用基本概念解决现实世界很感兴趣问题。面试官要求你分享你的屏幕,打开一个记事本,然后开始为询问的问题编写解决方案。因此,在本篇博客中,我们将介绍一些常见的 SQL 查询。

SQL 面试问答 |  PassMyInterview.com

什么是 SQL?

结构化查询语言或 SQL 是用于与数据库交互或通信的关系数据库管理系统 (RDBMS) 的标准语言。它于 1970 年发明,通常发音为“Sequel”。在使用方面,SQL 以维护关系数据库而闻名。使用 SQL,可以创建数据库和表,插入记录,删除记录,获取记录,更新记录等。

SQL 在公司中扮演着重要的角色,因为许多公司使用数据库来存储大量数据,SQL 帮助他们顺利维护记录。

数据

众所周知,SQL 是基于 RDBMS 的,因此我们必须创建一些可以从中获取数据的表。大多数受访者共享他们的桌面并展示两三个我们必须执行查询的演示表。该博客考虑了两个表,“Employee_detail”和“Employee_salary”。第一个表包含 IT 员工的基本详细信息,例如 ID、姓名、职务、城市和加入日期。第二个表包括员工的工资详细信息,如净工资、变量和 ID。

– Employee_detail

行数         EmpId
全名
指定
入职日期
城市
1121拉希特·托马尔学徒2014 年 1 月 31 日巴黎
2321杰格·雷迪开发商2015 年 1 月 30 日新德里
3421瓦萨特丽莎组长27/11/2016钦奈

– Employee_salary

EmpId 网付多变的
121850002000
321100005000
421700003000

SQL面试题

Q1-借助上表,至少给出两种方法来找出员工的第二高薪水。

解决方案:

  1. 使用 N-1 规则查询

从 Employee_salary e1 中选择不同的 NetPay,其中 1=从 Employee_salary e2 中选择 count(distinct Salary),其中 e2.NetPay>e1.NetPay;

解释:-根据 N-1 规则,无论我们需要找到的最高薪水,都用 N 代替,减去 1,然后将其放入 where 条件中。首先,内部查询执行并计算员工的唯一最高薪水。最后,它将 count 的值与 N-1 进行比较,如果两者相等,则显示输出。

简单来说,我们为同一张表 Employee_salary 创建了两个别名 e1 和 e2,然后将 e1 的单行与 e2 的所有行进行比较。

注意:- 这里,N 的值为 2

  1. 使用最大聚合函数查询

select max(NetPay)from Employee_salary where NetPay Not in(Select max(NetPay) from Employee_salary );

解释:-通过执行内部查询,我们只是得到了第一高的薪水,但是当它与 where 条件比较时,它失败了,所以下一次它将获取第二高的薪水。

Q2-至少提供两种方法来获取工资超过 60k 和低于 95k 的员工详细信息。

解决方案:

  1. 在大于和小于运算符的帮助下查询

从 Employee_salary 中选择 *,其中 NetPay >= 60000 且 NetPay <= 95000;
  1. 借助 Between 和运算符进行查询

从 Employee_salary 中选择 *,其中 NetPay 介于 60000 和 95000 之间;

说明:-在这个查询中,我们使用简单的关系运算符和 between.. 以及检查工资范围的关键字。

Q3-编写一个 SQL 查询来获取姓名不以 V、R 或 S 开头的员工的详细信息。

解决方案 :

  1. 使用 Not 运算符的符号查询

Select * from Employee_detail where FullName like '[!VRS]%';
  1. 使用 Not 运算符作为关键字进行查询

Select * from Employee_detail where FullName not like '[VRS]%';

说明:- ' Like' 关键字用于模式匹配,它将全名的第一个字母与字符 V、R 和 S 进行比较,如果匹配,则不会显示该行。

Q4:- 编写一个查询来创建一个与Employee_detail 表结构相同的表,有数据和没有数据。

解决方案:

  1. 查询创建没有数据的表

创建表 Employee_details2 作为 Select * from Employee_detail where 1=2;
  1. 查询以创建包含数据的表

创建表Employee_details2 as select * from Employee_detail;

说明:-我们使用“as”关键字从另一个表中获取引用,并使用错误条件,即 1 等于 2,我们限制新表中的数据条目。

Q5:- 编写一个查询来显示 Employee_detail 表中前 50% 的记录和最后 50% 的记录。

解决方案:

  1. 查询以显示前 50% 的记录

select row_num, e1.* from Employee_detail e1 where row_num<=(select count(*)/2 from Employee_detail);
  1. 查询以显示最后 50% 的记录

从 Employee_detail e1 中选择 row_num,e1.*
减
选择 row_num,e2.* from Employee_detail e2 where row_num<=(Select count(*)/2) from Employee_detail)

说明:-在这个查询中,我们使用 count(*) 函数,它将计算总行数,然后使用“/”运算符将它们分成两部分。

Q6:- 编写一个 SQL 查询来获取不同/唯一的记录,使用或不使用不同的关键字。

解决方案 :

  1. 使用 Distinct 关键字进行查询

从 Employee_detail 中选择不同的 *;
  1. 不使用 Distinct 关键字进行查询

select * from Employee_detail union select * from Employee_detail;

说明:- 在此查询中,我们使用 union 关键字将employee_detail 与自身进行比较,并仅打印不同的记录。

Q7:-编写一个 SQL 查询将字符串“SHIKHA”拆分为多个列。

例如,输入:SHIKHA

输出:

小号

H

ķ

H

一个

解决方案:

Select Substr('SHIKHA',Level,1) From Dual Connect By Level<= Length('SHIKHA');

解释:要理解这个查询,我们需要了解以下术语:

Substr():-这个函数从给定的字符串中获取子字符串。

级别:-用于以数字格式查找列的层次级别。

Connect By:-顾名思义,它定义了父子层次关系。

长度:-此函数计算传递的字符串的大小。

Dual:-它只不过是 Oracle 创建的一个虚拟表。

Q8:-编写一个查询以仅在一个查询的帮助下添加电子邮件验证。

解决方案:

SELECT Email_id FROM Employee_detail where NOT REGEXP_LIKE(Email_id, '[A-Z0-9._%+-] +@ [A-Z0-9.-]+.[AZ]{2,4}', 'i') ;

说明:-要在 SQL 中执行电子邮件验证,我们使用聚合函数 REGEXP_LIKE。正则表达式会设置有效邮件的规则,like 会比较匹配字符串。

Q9:- 编写一个查询来计算和删除 Employee_detail 表中的重复行。

解决方案:

  1. 查询以计算重复或冗余行:

Select EmpId, count (EmpId) from Employee_detail Group by EmpId 有 count (EmpId)>1 Order by count (EmpId) desc;

说明:-要计算重复行,我们使用聚合函数以及 Group By 和 Have 子句。在这里,我们将具有相同 EmpId 的员工详细信息分组并按降序排列。

  1. 要删除多余的行:

  1. 首先,我们必须选择重复的行:

选择 EmpId FROM Employee_detail e1 WHERE EmpId
(从 Employee_detail e2 中选择 max (EmpId),其中 e1.EmpId=e2.EmpId);
  1. 最后,删除重复的行:

Delete FROM Employee_detail e1 WHERE EmpId (Select max (EmpId) from Employee_detail e2 where e1.EmpId=e2.EmpId);

说明:-在这个查询中,我们将 Employee 表的别名创建为 e1 和 e2,我们比较 Employee 的 Id,如果相同,则从表中永久删除该行。

Q10:- 编写一个查询,从 Employee_detail 表中查找偶数行和奇数行。

解决方案:

  1. 查询 Employee_detail 表中的偶数行:

Select * from(Select row_num as rn, Ed.* from Employee_detail Ed) where Mod(rn,2)=0;
  1. 查询 Employee_detail 表中的奇数行:

Select * from(Select row_num as rn, Ed.* from Employee_detail Ed) where Mod(rn,2)=1;

说明:-在这两个查询中,我们使用聚合函数“mod”,它计算行号的模数,如果它可以被 true 整除,则显示在 even(query1 的输出);否则,如果余数为 1,即不能被 2 整除,则在查询 2 中显示员工信息。

结论

SQL 是任何数据爱好者的必备语言。这是处理大量结构化数据的方法。如果您想在任何数据面试或软件开发面试中脱颖而出,您至少应该熟悉所有SQL 命令。该博客讨论了数据工程面试中的常见问题。主要见解是:

  1. 什么是 SQL,有哪些可能的方法可以找到员工的第 n 高薪水?

  2. 我们已经看到了执行模式匹配的方法是什么。

  3. 我们讨论了如何从另一个没有数据的现有表创建表。

  4. 我们讨论了关于正则表达式的简要说明。


原文标题:Top 10 Interview Queries on SQL

原文作者:Shikha Sharma 

原文链接:https://www.analyticsvidhya.com/blog/2022/10/top-10-interview-queries-on-sql/

最后修改时间:2022-10-24 14:32:02
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论