当前位置: 首页 > news >正文

SQL面试题及详细答案150道(01-20) --- 基础概念与语法篇

前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,MySQL,Linux… 。

前后端面试题-专栏总目录

在这里插入图片描述

文章目录

  • 一、本文面试题目录
      • 1. 什么是SQL?它的主要功能是什么?
      • 2. SQL分为哪几类?请分别举例说明。
      • 3. 关系型数据库的核心特点是什么?列举3个常见的关系型数据库。
      • 4. 解释“表、字段、记录、主键、外键”的概念。
      • 5. 主键和唯一键的区别是什么?
      • 6. 什么是索引?索引的作用是什么?
      • 7. 写出SQL中单行注释和多行注释的方式。
      • 8. 什么是视图?视图的优缺点是什么?
      • 9. 什么是存储过程?存储过程和函数的区别是什么?
      • 10. 什么是触发器?触发器的触发时机有哪些?
      • 11. 数据库中“事务”的定义是什么?
      • 12. 什么是ACID特性?请分别解释。
      • 13. 常见的数据库字段类型有哪些?(至少列举5种)
      • 14. VARCHAR和CHAR的区别是什么?如何选择?
      • 15. DATE、DATETIME、TIMESTAMP的区别是什么?
      • 16. 什么是NULL值?为什么不能用“=NULL”判断空值?
      • 17. 什么是约束?常见的约束类型有哪些?
      • 18. 什么是数据库范式?第一范式(1NF)的要求是什么?
      • 19. 什么是外键约束?外键的作用是什么?
      • 20. 简述SQL的执行顺序(例如:FROM、WHERE、SELECT的执行先后)。
  • 二、150道面试题目录列表

一、本文面试题目录

1. 什么是SQL?它的主要功能是什么?

  • 原理说明:SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准化语言。它通过统一的语法实现对数据库的操作,不依赖于特定数据库系统,但不同数据库可能会有少量扩展。
  • 主要功能
    • 数据查询(从数据库中检索所需数据);
    • 数据操纵(插入、更新、删除数据库中的数据);
    • 数据定义(创建、修改、删除数据库对象,如表、视图等);
    • 数据控制(设置用户对数据库对象的访问权限)。

2. SQL分为哪几类?请分别举例说明。

  • 原理说明:SQL根据功能可分为四大类,每类对应不同的数据库操作场景。
  • 分类及示例
    • 数据查询语言(DQL):用于查询数据,核心语句为SELECT
      示例:SELECT name, age FROM users WHERE age > 18;
    • 数据操纵语言(DML):用于修改数据,包括INSERTUPDATEDELETE
      示例:INSERT INTO users (name, age) VALUES ('Alice', 20);
    • 数据定义语言(DDL):用于创建或修改数据库对象,包括CREATEALTERDROP
      示例:CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
    • 数据控制语言(DCL):用于权限管理,包括GRANTREVOKE
      示例:GRANT SELECT ON users TO 'user1'@'localhost';

3. 关系型数据库的核心特点是什么?列举3个常见的关系型数据库。

  • 核心特点
    • 数据以表(二维表格)的形式存储,表由行(记录)和列(字段)组成;
    • 表与表之间通过主键和外键建立关联,形成关系;
    • 遵循ACID事务特性(原子性、一致性、隔离性、持久性);
    • 支持SQL语言进行操作。
  • 常见关系型数据库:MySQL、Oracle、SQL Server、PostgreSQL等。

4. 解释“表、字段、记录、主键、外键”的概念。

  • 表(Table):数据库中存储数据的基本单位,由行和列组成,用于分类存储特定类型的数据(如“用户表”“订单表”)。
  • 字段(Field):表中的列,代表数据的某个属性(如“用户表”中的“姓名”“年龄”),每个字段有对应的数据类型。
  • 记录(Record):表中的行,代表一条完整的数据(如“用户表”中某一行对应一个用户的所有信息)。
  • 主键(Primary Key):表中用于唯一标识每条记录的字段(或字段组合),特性:非空(NOT NULL)、唯一(UNIQUE),一个表只能有一个主键。
    示例:CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));id为主键)
  • 外键(Foreign Key):表中用于关联另一个表主键的字段,用于维护表之间的关系,确保数据一致性。
    示例:CREATE TABLE orders (order_id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id));user_id为外键,关联users表的id

5. 主键和唯一键的区别是什么?

区别主键(Primary Key)唯一键(Unique Key)
非空性不允许为NULL允许为NULL(但只能有一个NULL值)
数量限制一个表只能有一个主键一个表可以有多个唯一键
索引类型自动创建主键索引自动创建唯一索引
作用唯一标识记录,常作为外键关联依据确保字段值唯一,无标识记录的作用

示例:

-- 主键(非空、唯一)
CREATE TABLE students (id INT PRIMARY KEY, name VARCHAR(50));-- 唯一键(允许NULL,可多个)
CREATE TABLE students (id INT PRIMARY KEY,email VARCHAR(50) UNIQUE,  -- 唯一键,不允许重复phone VARCHAR(20) UNIQUE   -- 另一个唯一键
);

6. 什么是索引?索引的作用是什么?

  • 原理说明:索引是数据库中用于提高查询效率的数据结构(如B树、哈希表),它基于表中的一个或多个字段创建,类似于书籍的目录。
  • 作用
    • 加快查询速度:通过索引可直接定位数据位置,避免全表扫描;
    • 加速排序和分组操作:索引本身有序,可减少排序开销。
  • 注意:索引会增加写入(INSERT/UPDATE/DELETE)的开销(需维护索引结构),并非越多越好。
    示例:CREATE INDEX idx_users_age ON users(age);(为users表的age字段创建索引)

7. 写出SQL中单行注释和多行注释的方式。

  • 单行注释:使用--(后面需加空格)或#(MySQL特有)。
    示例:
    SELECT * FROM users; -- 查询所有用户(单行注释)
    # 这也是单行注释(仅MySQL支持)
    
  • 多行注释:使用/* */包裹。
    示例:
    /* 这是多行注释用于解释复杂的SQL语句
    */
    SELECT name, age FROM users WHERE age > 18;
    

8. 什么是视图?视图的优缺点是什么?

  • 原理说明:视图(View)是基于查询结果的虚拟表,本身不存储数据,数据来源于底层的基表。
  • 优点
    • 简化查询:将复杂查询封装为视图,用户可直接查询视图;
    • 安全性:只暴露视图中的字段,隐藏基表的敏感信息;
    • 逻辑独立性:基表结构变化时,可通过修改视图保持查询语句不变。
  • 缺点
    • 性能较差:查询视图本质是执行底层SQL,复杂视图可能效率低;
    • 可写性有限:多数视图不支持插入、更新、删除操作(或有严格限制)。
      示例:
    -- 创建视图(查询成年用户)
    CREATE VIEW adult_users AS 
    SELECT id, name FROM users WHERE age >= 18;-- 查询视图
    SELECT * FROM adult_users;
    

9. 什么是存储过程?存储过程和函数的区别是什么?

  • 存储过程:是预编译并存储在数据库中的一组SQL语句集合,可通过调用名称执行,用于完成特定功能(如复杂的数据处理)。
    示例(MySQL):

    CREATE PROCEDURE get_user(IN user_id INT)
    BEGINSELECT * FROM users WHERE id = user_id;
    END;-- 调用存储过程
    CALL get_user(1);
    
  • 存储过程与函数的区别

    区别存储过程(Procedure)函数(Function)
    返回值可以有多个返回值,或无返回值必须有且仅有一个返回值
    调用方式使用CALL语句调用可在SQL语句中直接使用(如SELECT func()
    用途完成复杂操作(如增删改查组合)主要用于计算并返回结果
    事务支持可以包含事务控制语句一般不包含事务控制语句

10. 什么是触发器?触发器的触发时机有哪些?

  • 原理说明:触发器(Trigger)是一种特殊的存储过程,当表发生特定事件(如INSERT、UPDATE、DELETE)时自动执行,用于强制业务规则或数据一致性。
  • 触发时机
    • BEFORE:事件发生前执行(如BEFORE INSERT);
    • AFTER:事件发生后执行(如AFTER UPDATE)。
  • 示例(MySQL)
    -- 当插入新用户时,自动记录创建时间
    CREATE TRIGGER set_create_time 
    BEFORE INSERT ON users
    FOR EACH ROW
    SET NEW.create_time = NOW();
    
No.大剑师精品GIS教程推荐
0地图渲染基础- 【WebGL 教程】 - 【Canvas 教程】 - 【SVG 教程】
1Openlayers 【入门教程】 - 【源代码+示例 300+】
2Leaflet 【入门教程】 - 【源代码+图文示例 150+】
3MapboxGL【入门教程】 - 【源代码+图文示例150+】
4Cesium 【入门教程】 - 【源代码+综合教程 200+】
5threejs【中文API】 - 【源代码+图文示例200+】
6Shader 编程 【图文示例 100+】

11. 数据库中“事务”的定义是什么?

  • 原理说明:事务(Transaction)是一组不可分割的SQL操作序列,这些操作要么全部成功执行,要么全部失败回滚,以保证数据的一致性。
  • 示例:转账操作中,“扣除A的余额”和“增加B的余额”必须作为一个事务,避免出现一方成功、一方失败的情况。
    BEGIN TRANSACTION; -- 开始事务
    UPDATE accounts SET balance = balance - 100 WHERE id = 1; -- A扣钱
    UPDATE accounts SET balance = balance + 100 WHERE id = 2; -- B加钱
    COMMIT; -- 提交事务(全部成功)
    -- 若中间出错,执行 ROLLBACK; 回滚到事务开始前的状态
    

12. 什么是ACID特性?请分别解释。

  • ACID是事务的四大特性,确保数据操作的可靠性:
    • 原子性(Atomicity):事务中的操作要么全部完成,要么全部不完成,不存在部分执行的情况。例如:转账失败时,双方余额均不变化。
    • 一致性(Consistency):事务执行前后,数据库从一个一致状态变为另一个一致状态(符合业务规则)。例如:转账前后,总余额保持不变。
    • 隔离性(Isolation):多个事务并发执行时,彼此不干扰,每个事务都感觉不到其他事务的存在。
    • 持久性(Durability):事务提交后,对数据的修改永久保存,即使系统崩溃也不会丢失。

13. 常见的数据库字段类型有哪些?(至少列举5种)

  • 常见字段类型及用途:
    • INT:整数类型(如INTBIGINT,用于存储年龄、数量等);
    • VARCHAR(n):可变长度字符串(如VARCHAR(50),用于存储姓名、地址等,长度按需分配);
    • CHAR(n):固定长度字符串(如CHAR(10),用于存储身份证号等长度固定的数据);
    • DATE:日期类型(格式YYYY-MM-DD,存储生日、订单日期等);
    • DATETIME:日期时间类型(格式YYYY-MM-DD HH:MM:SS,存储精确到秒的时间);
    • DECIMAL(m,n):精确小数类型(如DECIMAL(10,2),用于存储金额,避免浮点数误差);
    • BOOLEAN:布尔类型(存储TRUEFALSE,如“是否激活”)。

14. VARCHAR和CHAR的区别是什么?如何选择?

  • 区别
    • 存储方式VARCHAR是可变长度,只占用实际数据长度 + 1-2字节(用于记录长度);CHAR是固定长度,无论实际数据长度如何,均占用指定长度的空间。
    • 适用场景VARCHAR适合长度不固定的数据(如姓名、备注);CHAR适合长度固定的数据(如手机号、性别(‘男’/‘女’))。
  • 示例
    • VARCHAR(10)存储“abc”时,实际占用4字节(3字节数据 + 1字节长度标识);
    • CHAR(10)存储“abc”时,占用10字节(自动用空格填充剩余7字节)。

15. DATE、DATETIME、TIMESTAMP的区别是什么?

类型格式范围时区敏感性存储大小
DATEYYYY-MM-DD1000-01-01 至 9999-12-31不敏感3字节
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 至 9999-12-31 23:59:59不敏感8字节
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 至 2038-01-19 03:14:07敏感(自动转换时区)4字节
  • 选择建议
    • 仅需日期:DATE(如生日);
    • 需日期时间且跨时区:TIMESTAMP(如日志时间);
    • 需更大时间范围且不考虑时区:DATETIME(如历史记录)。

16. 什么是NULL值?为什么不能用“=NULL”判断空值?

  • NULL值:表示字段值未知或不存在,不同于空字符串(‘’)或0,NULL代表“无意义”。
  • 不能用“=NULL”的原因:SQL中,NULL不等于任何值(包括自身),判断NULL需用IS NULLIS NOT NULL
    示例:
    -- 正确:查询name为NULL的记录
    SELECT * FROM users WHERE name IS NULL;-- 错误:以下语句永远返回空结果
    SELECT * FROM users WHERE name = NULL;
    

17. 什么是约束?常见的约束类型有哪些?

  • 约束:是数据库中用于限制字段值的规则,确保数据的完整性和一致性。
  • 常见约束类型
    • PRIMARY KEY:主键约束(唯一标识记录,非空且唯一);
    • UNIQUE:唯一约束(字段值唯一,允许NULL);
    • NOT NULL:非空约束(字段值不能为NULL);
    • FOREIGN KEY:外键约束(关联其他表的主键,确保引用完整性);
    • CHECK:检查约束(限制字段值的范围,如age > 0);
    • DEFAULT:默认值约束(字段未赋值时使用默认值)。
      示例:
    CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT CHECK (age > 0),gender CHAR(1) DEFAULT '男',class_id INT,FOREIGN KEY (class_id) REFERENCES classes(id)
    );
    

18. 什么是数据库范式?第一范式(1NF)的要求是什么?

  • 数据库范式:是设计关系型数据库时遵循的规范,目的是减少数据冗余和异常(插入、更新、删除异常),常用的有1NF、2NF、3NF。
  • 第一范式(1NF):要求表中每个字段都是不可分割的原子值,即字段不能再拆分为更小的子字段。
    • 反例:“地址”字段存储“北京市海淀区XX街”,可拆分为“省份”“城市”等,不符合1NF;
    • 正例:将“地址”拆分为“province”“city”“street”等字段,符合1NF。

19. 什么是外键约束?外键的作用是什么?

  • 外键约束:是表中用于关联另一个表主键的字段约束,定义了两个表之间的父子关系(子表的外键引用父表的主键)。
  • 作用
    • 确保数据引用完整性:子表的外键值必须是父表中存在的主键值(或NULL),避免无效引用;
    • 级联操作支持:可配置删除或更新父表记录时,子表自动执行相应操作(如级联删除)。
      示例:
    -- 父表(班级)
    CREATE TABLE classes (class_id INT PRIMARY KEY, class_name VARCHAR(50));-- 子表(学生),外键关联班级
    CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50),class_id INT,FOREIGN KEY (class_id) REFERENCES classes(class_id) ON DELETE CASCADE -- 父表记录删除时,子表关联记录也删除
    );
    

20. 简述SQL的执行顺序(例如:FROM、WHERE、SELECT的执行先后)。

  • SQL语句的执行顺序与书写顺序不同,核心步骤如下(以SELECT查询为例):

    1. FROM:指定查询的表;
    2. JOIN:关联其他表(若有);
    3. WHERE:过滤行数据(基于条件);
    4. GROUP BY:按指定字段分组;
    5. HAVING:过滤分组后的结果(需与GROUP BY配合);
    6. SELECT:选择需要返回的字段;
    7. DISTINCT:去重(若有);
    8. ORDER BY:按指定字段排序;
    9. LIMIT/OFFSET:限制返回的行数(若有)。
  • 示例:
    书写顺序:SELECT name, AVG(age) FROM users WHERE gender = '男' GROUP BY name HAVING AVG(age) > 20 ORDER BY AVG(age);
    执行顺序:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。

二、150道面试题目录列表

文章序号SQL面试题150道
1SQL面试题及详细答案150道(01-20)
2SQL面试题及详细答案150道(20-40)
3SQL面试题及详细答案150道(41-60)
4SQL面试题及详细答案150道(61-80)
5SQL面试题及详细答案150道(81-100)
6SQL面试题及详细答案150道(101-115)
7SQL面试题及详细答案150道(116-135)
8SQL面试题及详细答案150道(136-150)
http://www.dtcms.com/a/323407.html

相关文章:

  • python踩坑之识别错误...
  • 如何分析需求的可行性
  • Spring——Spring懒加载设计使用场景
  • 深入解析进程创建与终止机制
  • Linux 信号处理标志sa_flags详解
  • MPU-6050 超实用入门
  • 一文详解 C++ 继承体系
  • [C/C++线程安全]_[中级]_[多线程如何使用共享锁提升性能]
  • EP06:【DL 第二弹】动态计算图与梯度下降入门
  • 【C/C++】具有C风格的强制类型转换:显式类型转换、隐式类型转换,C语言强制类型转换
  • 第六章:【springboot】框架springboot原理、springboot父子工程与Swagger
  • 算法题(183):质量检测
  • 《答客难》东方朔
  • 网络原理-初识
  • FreeRTOS入门知识(初识RTOS任务调度)(三)
  • AVL树的四种旋转
  • 【Python 语法糖小火锅 · 第 4 涮】
  • 资深全栈工程师面试题总结
  • 【牛客刷题】小红的区间删除
  • 第16届蓝桥杯Scratch选拔赛初级及中级(STEMA)2024年11月24日真题
  • Linux之shell脚本篇(四)
  • SQL 172 未完成试卷数大于1的有效用户
  • 9. 堆和栈有什么区别
  • 01数据结构-图的邻接矩阵和遍历
  • 从零开始理解编译原理:设计一个简单的编程语言
  • svg 图片怎么设置 :hover 时变色
  • 交 换
  • sigaction 中 sa_handler = SIG_IGN 的深度解析与应用实践
  • day14 - html5
  • 2025年TOP5服装类跟单软件推荐榜单