SQL笔试面试
- SELECT 查询中常见语句的出现顺序是什么?
SELECT – FROM – JOIN – ON – WHERE – GROUP BY – HAVING – ORDER BY - LIMIT
2.解释器执行 SELECT 查询语句的顺序是什么?
FROM – JOIN – ON – WHERE – GROUP BY – HAVING – SELECT – ORDER BY – LIMIT
3. 什么是大小写处理函数?举一些例子。
大小写处理函数是文本函数,用于更改文本数据的大小写,可以将数据转换为大写、小写或首字母大写。
UCASE()(或 UPPER()) – 返回转换为大写的字符串。
LCASE()(或 LOWER()) – 返回转换为小写的字符串。
- ORDER BY 语句的默认排序是什么??如何更改?
ORDER BY 语句的默认排序是升序。要改为降序,需要添加 DESC 关键字,示例如下。
SELECT * FROM table_name
ORDER BY col_1 DESC;
5.你知道哪些标量函数?
LEN()(或LENGTH()) – 返回字符串的长度,包括空格。
UCASE()(或 UPPER()) – 返回转换为大写的字符串。
LCASE()(或 LOWER()) – 返回转换为小写的字符串。
MID()(或 SUBSTR()) – 从字符串中提取子字符串。
6.你知道哪些聚合函数?
AVG() – 返回平均值。
SUM() – 返回值的和。
MIN() – 返回最小值。
MAX() – 返回最大值。
COUNT() – 返回行数,包括具有空值的行数。
7.查询中使用什么运算符进行模式匹配?
LIKE 运算符与 % 和 _ 通配符结合使用。通配符 % 代表任意数量的字符,包括 0 个字符;_ 严格来说是一个字符。
8.SQL 中的范式(normalization )是什么,为什么要使用范式?
范式是数据库的设计过程,旨在减少数据冗余、提高数据一致性和完整性,让查询效率更高,也更灵活,常用的范式有第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。
8.2.SQL 中的非范式(denormalization )是什么,为什么要使用非范式?
非范式是与范式相反的过程:它引入数据冗余,并组合来自多个表的数据。在读操作比写操作更重要的情况下,非范式可以优化数据库基础设施的性能,有助于避免复杂的连接,并减少查询运行的时间。
(说两句,一般来说,都是逻辑外键,也就是自己知道哪个字段是外键(避免需要删除数据的时候因为强逻辑删不掉),需要除非是数据一定要强逻辑的系统)
9.重命名列与列的别名有什么区别?
重命名列意味着永久更改其在原始表中的实际名称。
为列指定别名意味着在执行 SQL 查询时为其指定一个临时名称,使代码更易读,更简洁。
10.如何向表中添加记录?
INSERT INTO 与 VALUES 结合使用。
INSERT INTO students (id, name, score, class)
VALUES (101, '张三', 89, 'A班'),(102, '李四', 92, 'B班'),(103, '王五', 76, 'A班');
11.如何删除表中的记录?
使用 DELETE 语句删除记录,可以搭配 WHERE 一起使用。
DELETE FROM table_name
WHERE condition;
12.查询时如何防止重复记录?
在 SELECT 语句中使用 DISTINCT,或为该表创建唯一键。
-- 使用 DISTINCT 去重
SELECT DISTINCT department FROM employees;
- 如何选择表中的所有偶数或奇数的记录?
SELECT * FROM employees WHERE emp_no % 2 = 0; -- 偶数记录
SELECT * FROM employees WHERE emp_no % 2 = 1; -- 奇数记录
13.如何找到表中某一列的第 n(n>=1) 个最高值?
使用 OFFSET 子句。查找某列中的第 6 个最高值的示例如下。
1SELECT * FROM table_name
2ORDER BY column_name DESC
3LIMIT 1
4OFFSET 5;
14.如何查找表格文本列中以某个字母开头的值?
1SELECT * FROM table_name
2WHERE surname LIKE 'A_';--下划线 _:精确匹配 单个任意字符
--示例匹配结果:
--'Al'、'Ax'、'A1'(仅匹配 两个字符 且首字母为 A 的字符串)1SELECT * FROM table_name
2WHERE surname LIKE 'A%';--百分号 %:匹配 零个或多个任意字符
--示例匹配结果:
--'A'、'Al'、'Anna'、'Alexander'(只要以 A 开头,长度不限)
15.如何查找表中最后一个 id?
1SELECT id
2FROM table_name
3ORDER BY id DESC
4LIMIT 1;
16.如何从表中随机选择行?
假设随机选择5行
1SELECT * FROM table_name
2ORDER BY RAND()
3LIMIT 5;
17.DELETE 和 TRUNCATE 的区别是什么?
DELETE 根据 WHERE 子句中的条件从表中删除一行或多行记录。
TRUNCATE 是用于删除表中的所有行,但包含外键的表不能使用 TRUNCATE 语句。
DELETE 的速度比 TRUNCATE 慢。
18.什么是复合主键?
表的主键,基于多个列。
19.主键和唯一键有什么区别.设计目的
主键:唯一标识表中的每一行记录(如用户ID、订单号)
唯一键:确保业务关键字段的唯一性(如身份证号、邮箱、手机号)
20.如何更新表?
使用 UPDATE 语句。
CREATE TABLE table_name (col_1 datatype,col_2 datatype,col_3 datatype);
21.如何从两个表中选取共同的记录?
使用 INTERSECT语句,示例如下。
1 SELECT * FROM table_1
2 INTERSECT
3 SELECT * FROM table_1;
21.你知道哪些类型的 SQL 运算符?
算术运算符:+、-、*、/
比较运算符:>、<、
=、
>=
复合运算符:+=、-=、*=、/=
逻辑运算符:AND、OR、NOT、BETWEEN
字符串运算符:%、_、+、^
集合运算符:UNION、UNION ALL、INTERSECT、MINUS 或 EXCEPT
22.join 的类型都有哪些?
(INNER) JOIN – 只返回满足两个(或所有)表中定义的 join 条件的记录。这是默认的 SQL 连接。
LEFT (OUTER) JOIN – 返回左表中的所有记录及右表中满足定义的 join 条件的记录。
RIGHT (OUTER) JOIN – 返回右表中的所有记录及左表中满足定义的 join 条件的记录。
FULL (OUTER) JOIN – 返回两个(或所有)表中的所有记录。它是左连接和右连接的组合。
23.什么是子查询?
子查询也称为内部查询,是在一个查询或外部查询中的查询。子查询可能出现在 SELECT、FROM、WHERE 和 UPDATE 等子句中。
子查询中还可以包含子查询。最里面的子查询首先运行,并将结果传递给它的外部查询。
24.你知道哪些类型的 SQL 子查询?
单行子查询 – 最多返回一行。
多行子查询 – 返回至少两行。
多列子查询 – 返回至少两列。
相关子查询 - 与外部查询的信息相关的子查询。
嵌套子查询 – 子查询嵌套在另一个子查询中。
N-1.49. 你知道哪些集合运算符?
UNION – 返回多个查询语句的结果合并后的唯一记录集(不包括重复项)。
UNION ALL – 返回多个查询语句的结果合并后的记录集(包括重复项)。
INTERSECT – 返回多个查询语句的结果交集的记录集。
EXCEPT(MySQL 和 Oracle 中为 MINUS) – 仅返回第一个语句查询的结果,不返回第二个查询的结果。
N.什么是字符操作函数?举一些例子。
CONCAT() – 连接多个字符串值,将后一个字符串附加到前一个字符串的末尾。
SUBSTR() – 返回满足所提供的起点和终点的字符串的一部分。
LENGTH()(或 LEN()) – 返回字符串的长度,包括空格。
REPLACE() – 用一个子字符串替换提供的字符串中所有出现的已定义子字符串。
INSTR() – 返回给定字符串中定义的子字符串的数字位置。
LPAD()/RPAD() – 返回右对齐/左对齐值的左侧/右侧字符的填充。
TRIM() – 从提供的字符串的左侧、右侧或两端删除所有定义的字符及空格。