这是对许多重要问题的总结,这些潜在问题有可能在与SQL相关的工作面试中提出。 您无需担心下一次面试的机会,因为Java Code Geeks在这里为您服务! 您可能会被问到的大多数事情都收集在下面的列表中。
通常,SQL一词基本上与数据库连接。 本文试图介绍SQL的概念,SQL的基本查询,并介绍一些高级和复杂的SQL查询。 此外,我们还将详细介绍高级数据库概念,例如触发器,函数,视图和过程。
问题和答案将尽可能详尽地涵盖在内,并且在必要时还包含查询。 这样可以确保您了解其中的每一点,并为面试做好充分的准备。 首先,我们将介绍有关SQL的基本概念。 此外,我们将转向在SQL下定义的各种可能的查询。 稍后,我们将深入讨论一些数据库概念,以提供有关复杂数据库操作的见解。 最后,我们将研究一些默认情况下在SQL中可用的标准函数。
目录
SQL基础
1. SQL代表什么?
SQL是结构化查询语言的缩写。 SQL是用于在任何数据库中创建普通数据库查询的已定义标准。 定义该标准的目的是确保从一个数据库切换到另一个数据库时的更改量极低。
它与SQL如何关联?
RDBMS是关系数据库管理系统的缩写。 RDBMS包含承载结构化数据的关系数据库。 可以使用一些标准的预定义语句来查询此结构化数据。 SQL是这些预定义语句(称为查询)的标准。
3. SQL中的表是什么?
RDBMS中的结构化数据存储在称为表的单元中。 表格是按列形式组织的行的集合。 表的结构是使用一组列定义的。 例如,一个用户表可以包含列user_id,密码和电子邮件。
4. SQL中的数据类型是什么?
列的数据类型指定特定列保存的数据类型。 各个数据库的数据类型不同,这取决于它们如何解释和存储数据。 因此,SQL没有为数据类型定义任何特定的标准。
5.如何在SQL中定义记录?
在SQL表中,一条记录定义为具有与每个列关联的唯一标识符的列数据集。 数据集可能包含各种数据类型的值。 一条记录也可以被视为普通表格中的一行。 与普通表相似,每个SQL表可以包含多个记录。
6. SQL中有哪些不同类型的查询?
SQL中有3种主要的查询类型。 这些类型列出并解释如下:
- DDL:数据定义语言查询是一种查询,用于定义表中数据的结构和数据类型。 这些查询包括CREATE,ALTER和DROP查询。
- DML:数据操作语言查询是用于从数据库表中插入,更新或删除数据的查询。 这些查询包括INSERT INTO,UPDATE,SELECT和DELETE查询
- DCL:数据控制语言查询是用于管理目的的查询。 管理任务包括创建用户,数据库分区,向用户提供授权,向用户分配角色以及创建用户。
7.我们如何从名为“用户”的表的“用户名”列和“电子邮件”中选择数据?
为此,SQL定义了一个标准的SELECT查询。 可以使用以下查询执行以上操作:
SELECT username, email from users;
8. SQL查询中的子句是什么?
子句是执行各种任务的查询的一部分。 SQL查询中的每个关键字形成一个不同的子句。 这些子句可用于以下目的:
- 选择数据
- 过滤数据
- 分组数据
- 排序数据
9. SQL中的子句有哪些不同类型?
下面列出了标准SQL查询中的可用子句:
- SELECT子句: SELECT子句是从数据库中获取数据所需的最常用的子句。
- FROM子句:此子句用于指定需要从中选择记录的数据库表。
- WHERE子句:此子句用于将过滤器应用于正在获取的记录。 WHERE子句也可用于基于单个或多个表中的一个或多个字段来过滤记录。
- ORDER BY子句:顾名思义,该子句用于对使用SQL语句从数据库中获取的记录进行排序。 可以使用一列或多列完成排序。 它可以按升序或降序排列。 排序可应用于任何列,无论是否在SELECT子句中选择它
- GROUP BY子句:此子句用于根据特定表中的任何特定列数据对数据进行分组。 该子句通常与组函数或联接一起使用。
- HAVING子句:定义HAVING子句是为了在提取数据后对其进行操作。 例如,我们按性别对雇员的数据进行分组,并尝试检索男女人数,并且需要计数超过100的记录,则可以使用此子句。
10.是否可以同时从多个表中选择数据?
是。 绝对有可能使用SQL从多个表中选择数据。 这可以通过几种方式来完成。 这些包括:
- 联接表
- 使用子查询
- 使用逗号分隔的表列表
有哪些类型?
JOIN是一项功能,用于通过匹配每个表的一个或多个列来逻辑连接数据,从而从多个表中获取数据。 有4种不同类型的JOIN。 这些在下面列出并说明:
- (INNER)JOIN :返回记录值与两个表中的列均匹配的记录
- LEFT(OUTER)JOIN :返回左侧表中的所有记录,而仅右侧表中的匹配记录
- RIGHT(OUTER)JOIN :返回右侧表中的所有记录,仅返回左侧表中的匹配记录
- FULL(OUTER)JOIN :当左表或右表中有匹配项时,返回所有记录。 在这种情况下,记录将成倍增加。 例如,如果一个表中有10条记录,而另一个表中有80条记录,那么我们将得到的最小记录数为80,最大记录数为800。
12. SQL中的别名是什么?
SQL中的别名用于为SQL查询中的列和表提供备用名称。 别名有助于在尝试联接表时解决匿名问题。 如果两个不同的表包含相同名称的列,则别名仅有助于在select子句中选择特定的列。 下面显示了一个使用别名的示例查询。
SELECT U.NAME, U.EMAIL FROM USERS U;
在此, U用作选择列的别名。 下一个问题将讨论一个更好的用例。
13.如何使用逗号分隔的表名联接表?
为了仅使用逗号分隔的表名联接表,您需要做的就是获取相关的表名并执行查询,如下所示。
考虑两个表,用户和包含两个表的电子邮件列的配置文件。 这些表可以如下所示进行连接:
SELECT P.NAME,U.LAST_LOGIN_DATE FROM USERS U, PROFILE P WHERE U.EMAIL = P.EMAIL;
举例说明
INNER联接用于使用公共数据列联接来自两个表的记录。 例如,在上面的用户和用户配置文件表示例中,可以以INNER join的形式编写相同的SQL,如下所示。
SELECT P.NAME,U.LAST_LOGIN_DATE
FROM Users U
INNER JOIN PROFILE P ON U.EMAIL = P.EMAIL;
举例说明
LEFT(OUTER)联接返回左侧表中的所有记录,而仅返回联接表中的匹配记录。 因此,对于来自联接表的数据不可用的列,行保持空白。 上面的语句可以转换为LEFT联接,如下所示。
SELECT P.NAME,U.LAST_LOGIN_DATE
FROM Users U
LEFT JOIN PROFILE P ON U.EMAIL = P.EMAIL;
举例说明
RIGHT连接与LEFT连接完全相反。 RIGHT(OUTER)联接返回右侧表中的所有记录,而仅返回联接表中的匹配记录。 因此,对于来自联接表的数据不可用的列,行保持空白。 上面的语句可以转换为RIGHT连接,如下所示。
SELECT P.NAME,U.LAST_LOGIN_DATE
FROM Users U
RIGHT JOIN PROFILE P ON U.EMAIL = P.EMAIL;
举例说明
FULL联接是LEFT和RIGHT联接的组合。 LEFT连接确保获取左表的所有记录,而RIGHT连接确保获取右表的所有记录。 因此,在FULL联接中,获取的记录包含来自具有该表的数据。 如果记录在指定的列上匹配,则它们的完整行将填充数据。 完整连接的示例如下所示。
SELECT P.NAME,U.LAST_LOGIN_DATE
FROM Users U
FULL OUTER JOIN PROFILE P ON U.EMAIL = P.EMAIL;
18.如何使用SQL插入记录?
使用INSERT语句插入SQL表中的记录。 考虑一下带有列-ID,名称,密码,电子邮件的USERS表。 要在表中插入一条记录,INSERT语句的标准语法如下所示。
INSERT into users values (1,'Abhishek','javacodgeeks',abc@javacodegeeks.com');
上面的语句插入一条记录,其中包含所有列的数据。 对于大表,通常需要插入记录,其中记录可用于有限数量的列。 要插入这样的记录,您需要指定要为其插入数据的列。 可以如下所示进行。
INSERT INTO users(id,name,email) values (1,'Abhishek','abc@javacodegeeks.com');
这样,只要未按要求将其标记,就可以避免为该列提供数据。
19.如何使用SQL更新记录?
要更新记录,可以使用UPDATE语句,如下所示。
UPDATE users set password='java123' where id = 1
上面的语句为ID为1的用户设置password列的值。
20.如何使用SQL删除记录?
要删除记录,可以使用DELETE语句,如下所示。
DELETE from users where id=1;
该语句从表users中删除ID为1的用户的记录。
21.什么是ORDER BY子句?
在大型数据库中,有必要按特定顺序获取数据。 ORDER BY子句与SELECT子句结合使用可实现此目的。 例如,我们希望按学生的分数对他们进行排序。 您可以使用如下所示的查询。
SELECT name,percentage from results ORDER BY percentage;
上面的语句默认情况下按升序对记录进行排序。 要按降序对记录进行排序,您需要在列名后添加desc
后缀。
22.是否可以按两列排序记录?
是。 可以通过使用两列来对记录进行排序。 在这种情况下,表记录首先按第一列排序,然后再按第二列对排序记录进行排列。 因此,它使用按第一列排序的行的分组来按第二列排序。 这样的语句的语法如下所示。
SELECT * FROM TABLENAME ORDER BY COLUMN1 COLUMN2;
23.如何检查特定列没有数据的记录?
要检查此类记录,您需要使用WHERE子句来检查列值是否为NULL。 下面显示了相同的示例。
SELECT * FROM TABLENAME WHERE COLUMN1 IS NULL;
SQL高级
24.什么是SQL函数?
SQL定义了某些可用于执行数学操作的标准函数。 MIN,MAX,AVG,COUNT等功能很少。
25.可以使用哪个函数查找任何列的最小值和最大值?
MIN和MAX函数用于查找任何特定列的最小值和最大值。 这些函数评估所有行并返回一个值作为结果集。 考虑一个学生成绩表。 让我们找出任何学生得分最高的分数。
SELECT MAX(marks) from result;
26.可以使用哪个函数查找班级的平均成绩?
AVG函数用于计算特定列的平均值。 例如,可以按如下所示计算类别的平均分数。
SELECT AVG(marks) from result;
27.如何获取特定表中的记录数?
SQL函数COUNT可用于查找任何表中的记录数。 下面显示了相同的示例SQL。
SELECT COUNT(1) FROM RESULT;
上面的SQL语句为您提供结果表中的记录数。
28.如何获取特定列的总值?
要计算值的总和,可以使用SQL函数SUM。 例如,您需要计算总销售价值,可以使用如下所示的SQL。
SELECT SUM(amount) from sales;
30.什么是SQL中的LIKE运算符?
在SQL中,我们可以轻松地检查特定记录的列值是否等于某个值。 例如,我希望找到一个名为Abhishek的用户,我将使用WHERE子句,如WHERE firstname='Abhishek'
。 但是,使用equal运算符时,您无法查找名称以“ A”开头的所有用户。 为此,您需要使用LIKE运算符。
如何与LIKE运算符一起使用?
通配符是可以等同于任何字符的字符。 它与LIKE一起使用以提供值的通配符匹配。 例如,要查找名称以“ A”开头的用户,您所要做的就是在后缀通配符后使用LIKE子句,如下所示。
SELECT * FROM USERS WHERE firstname like 'A%';
32.是否可以使用SQL查询找到包含字母“ e”的名称?
是的,有可能这样做。 要在两个值之间使用一个或多个字符进行匹配,您所要做的就是在字符的两边插入通配符。 因此,查询现在将如下所示编写。
SELECT * FROM USERS WHERE firstname like '%e%';
33.什么是SQL中的IN运算符?
在SQL中,IN运算符用于从值集中查找特定列值的记录。 例如,我希望找到属于“浪漫”,“动作与恐怖”类别的电影列表。 我们可以编写一个SQL查询,如下所示。
SELECT * FROM MOVIES WHERE CATEGORY IN ('Romance', 'Action', 'Horror');
34.我们如何查找特定列值在指定范围内的记录?
为了找到这样的记录,我们需要使用SQL中提供的BETWEEN运算符。 BETWEEN运算符允许您指定特定字段的范围。 例如,您希望获得成绩在80到90之间的学生列表,则可以如下所示编写SQL语句。
SELECT * FROM results where marks between 80 and 90;
35.我们如何合并多个表的结果?
为了从多个表中获取数据,您需要使用UNION运算符。 该运算符合并两个表中的行。 提供了一个示例SQL语句,如下所示。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
SQL函数和过程
36.如何根据特定列将结果分组?
可以使用运算符GROUP BY对结果进行分组。 GROUP BY运算符使您可以根据特定列中的值对记录进行分组。 例如,我需要操作类别中的电影计数,SQL可以编写如下所示。
SELECT COUNT(1) from movies group by category;
37.什么是SQL中的用户定义函数?
函数是可以用SQL编程的一组语句。 功能允许用户对复杂的任务进行编程,例如创建视图或创建摘要表。 这些函数可以存储在数据库中,并可以在查询中使用,就像SQL提供的AVG,SUM,MIN,MAX一样。
38. SQL中有哪些不同的大小写处理函数?
数据的大小写可以在SQL中修改,并根据需要更改为小写,大写或首字母大写。 可以使用SQL默认提供的功能直接完成这些转换。 这些功能如下所述。
LOWER('Abhishek') //Converts to Lower case - Output: abhishek
UPPER('Abhishek')//Converts to upper case - Output: ABHISHEK
INITCAP('ABHISHEK')//Converts first letter to uppercase and remaining letters to lower case - Output:Abhishek
39.如何从特定列中获得唯一的值列表?
为了获得唯一的值列表,您需要使用运算符DISTINCT。 与特定列一起使用时,此运算符将删除重复项并仅提供唯一值。 例如,如果您想查找与可上映的电影相关的类别列表,则可以使用如下所示的代码编写SQL:
SELECT DISTINCT(CATEGORY) FROM MOVIES;
40. SQL是否区分大小写?
这几乎是每个新手开发人员都常见的问题。 对于子句和查询,SQL绝对不区分大小写。 但是,它确实以区分大小写的方式处理数据。 因此,如果放置区分大小写的WHERE子句,SQL将确保完美处理它。
41.什么是存储过程?
SQL中的存储过程是一组预定义的任务,可以仅通过执行该过程来执行它们。 这些任务可以包括生成报告,发送邮件,创建摘要等。 存储过程不是普遍支持的功能。 它特定于某些数据库。 像MySQL和Oracle DB这样的数据库确实支持SQL过程。
结论
这是对许多重要问题的总结,这些潜在问题有可能在与SQL相关的工作面试中提出。 我们介绍了SQL概念以及一些高级和复杂的SQL查询。 我们还详细介绍了高级数据库概念,例如触发器,函数,视图和过程。
好的,现在您可以开始面试了! 不要忘记查看我们的示例专用小节 !
如果您喜欢此功能,请订阅我们的时事通讯,以享受每周更新和免费白皮书! 另外,请查看我们的课程以获得更高级的培训!
欢迎您提出您的意见,我们会将其纳入本文!
翻译自: https://www.javacodegeeks.com/2018/08/sql-interview-questions-and-answers-the-ultimate-list.html