数据库面试常问

2024-05-03 08:44
文章标签 面试 数据库 常问

本文主要是介绍数据库面试常问,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. 数据定义语言(DDL)

    • CREATE TABLE:用于创建数据库表格。例如:CREATE TABLE students (id INT, name VARCHAR(50), age INT);
    • DROP TABLE:用于删除数据库表格。例如:DROP TABLE students;
    • CREATE INDEX:用于在表格上创建索引。例如:CREATE INDEX idx_name ON students (name);
    • ALTER TABLE:用于修改数据库表格结构。例如:ALTER TABLE students ADD COLUMN email VARCHAR(100);
  2. 数据操作语言(DML)

    • INSERT:用于向表格中插入数据。例如:INSERT INTO students (id, name, age) VALUES (1, 'Alice', 25);
    • UPDATE:用于修改表格中的数据。例如:UPDATE students SET age = 26 WHERE name = 'Alice';
    • DELETE:用于从表格中删除数据。例如:DELETE FROM students WHERE name = 'Alice';
  3. 数据查询语言(DQL)

    • SELECT:用于从数据库中检索数据。例如:SELECT * FROM students WHERE age > 20;
    • WHERE:用于指定条件来过滤结果。例如:SELECT * FROM students WHERE age > 20;
    • ORDER BY:用于对结果进行排序。例如:SELECT * FROM students ORDER BY age DESC;
    • GROUP BY:用于对结果进行分组。例如:SELECT age, COUNT(*) FROM students GROUP BY age;
    • HAVING:用于在GROUP BY子句中设置过滤条件。例如:SELECT age, COUNT(*) FROM students GROUP BY age HAVING COUNT(*) > 1;
  4. 数据控制语言(DCL)

    • GRANT:用于授予用户特定权限。例如:GRANT SELECT ON students TO user1;
    • REVOKE:用于取消用户的特定权限。例如:REVOKE SELECT ON students FROM user1;
  5. 事务处理语言(TCL)

    • BEGIN TRANSACTION:用于开始一个事务。
    • COMMIT:用于提交事务并使更改永久生效。
    • ROLLBACK:用于撤销尚未提交的更改,并且回滚到事务开始前的状态。
  6. 其他常用操作

    • 导入(mysqldump):将外部文件中的数据导入到数据库中。例如:mysqldump -u username -p database_name < file.sql
    • 导出(source):从数据库中导出数据到外部文件。例如:source /path/to/file.sql
    • 查看表结构(DESC):查看数据库表的结构和元数据信息。例如:DESC students;

总结一下SQL SELECT语句的执行顺序:

  1. FROM:这是SQL查询的起点,它决定数据源。可能是一个或多个表,并且可以包含JOIN操作。此时,SQL引擎开始处理数据源并创建初始数据集。

  2. WHERE:在初始数据集的基础上,根据指定条件进行行的筛选。只有满足WHERE子句条件的行才会被保留。

  3. GROUP BY:在筛选后的数据集上,对数据进行分组。此时可以将多条记录组合成一个组,便于后续的聚合计算。

  4. 聚合函数:在GROUP BY生成的组上执行聚合操作,如SUM、AVG、COUNT等。

  5. HAVING:使用聚合结果对分组进行筛选。只有满足HAVING条件的组才会被保留在结果集中。

  6. SELECT:选择要在结果集中显示的字段。在这一阶段,所有表达式和别名都会被计算。

  7. ORDER BY:对结果集进行排序。可以按一个或多个字段进行升序或降序排序。

  8. LIMIT/OFFSET:这通常是最后一步,用于限制结果集的行数或跳过某些行。

跨表连接是在多个表之间建立关联以检索相关数据的过程。在SQL中,有几种类型的跨表连接,包括内连接、外连接和交叉连接。

  1. 内连接(INNER JOIN)

    • 内连接通过匹配两个表之间的关联列来检索数据,并返回两个表中满足连接条件的行。只有在连接条件成立时,才会将行从两个表中检索出来。
  2. 外连接(OUTER JOIN)

    • 外连接允许检索某个表中没有匹配的行。常见的外连接类型包括左外连接(LEFT JOIN)和右外连接(RIGHT JOIN)。
    • 左外连接返回左表中的所有行,以及与右表中匹配的行(如果没有匹配的行,则显示NULL值)。
    • 右外连接则返回右表中的所有行,以及与左表中匹配的行(同样,如果没有匹配的行,则显示NULL值)。
  3. 交叉连接(CROSS JOIN)

    • 交叉连接返回两个表的笛卡尔积,即将一个表的每一行与另一个表的每一行进行组合。结果集的行数等于两个表行数的乘积。

truncate/delete/drop区别?

  1. DELETE (DML - Data Manipulation Language):

    • DELETE 用于从表中删除一个或多个记录,并且可以有条件地选择哪些记录需要删除(使用 WHERE 子句)。
    • 它是一个 DML 操作,因此其操作是可以回滚的,即在事务中使用 DELETE 后可以通过 ROLLBACK 命令撤销更改。
    • DELETE 操作会记录日志(每行数据的删除都会记录),因此相比 TRUNCATE,其执行效率较低。
    • 删除后,空间并不会立即返回给操作系统,而是依然被数据库保留,可用于将来该表中的新数据。
  2. TRUNCATE (DDL - Data Definition Language):

    • TRUNCATE 用于快速清空一个表的所有行,效果等同于删除表中的所有数据,但速度更快。
    • 它是一个 DDL 操作,通常情况下这种操作不会记录详细的日志(只记录对对象的改变),并且不支持回滚(在某些数据库系统如 MySQL 中,TRUNCATE 操作在隐式提交事务后不能回滚,而在 SQL Server 和 Oracle 中可以通过事务回滚)。
    • TRUNCATE 通常会重置表的身份计数(如果表有自动增长的主键或身份列的话)。
    • 此操作会释放表占用的空间回到操作系统(在某些数据库中行为可能略有不同)。
  3. DROP (DDL - Data Definition Language):

    • DROP 用于完全删除表结构及其数据,这意味着一旦执行了 DROP TABLE 命令,表的定义及其数据将完全消失。
    • 它也是一个 DDL 操作,删除后通常不能回滚(但在某些数据库管理系统中,如果 DROP 操作在事务中执行,可能可以回滚)。
    • 使用 DROP 后,与表相关的所有东西都会被删除,包括与该表相关的依赖项如索引、触发器等。

这些操作应根据具体需要和对数据安全的要求来选择使用。例如,如果需要删除特定的几行数据,应使用 DELETE。如果要快速清空表数据且不需要回滚,则可选用 TRUNCATE。如果需要删除整个表结构及其数据,则使用 DROP

select *和select全部字段的区别?

  1. 查询效率

    • SELECT * 在执行时需要额外的步骤来获取表的所有字段信息,因此可能比直接列出所有字段的 SELECT 语句稍慢一些。
    • 直接列出字段的 SELECT 语句可以避免系统在解析时额外的字段信息获取步骤,因此可能稍微高效一些。
  2. 查询结果

    • 在表结构不变的情况下,两者的查询结果是相同的。
    • 但如果表结构发生了变化,SELECT * 可以动态适应新的表结构,而直接列出字段的 SELECT 语句则需要手动修改以适应新的表结构。
  3. 应用场景

    • SELECT * 适用于开发环境或者需要频繁调整表结构的情况,因为它能够自动适应表结构的变化。
    • 直接列出字段的 SELECT 语句更适合生产环境,因为它能够确保查询语句的语义清晰,且效率稍高。

这篇关于数据库面试常问的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/956326

相关文章

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查

Python+PyQt5实现MySQL数据库备份神器

《Python+PyQt5实现MySQL数据库备份神器》在数据库管理工作中,定期备份是确保数据安全的重要措施,本文将介绍如何使用Python+PyQt5开发一个高颜值,多功能的MySQL数据库备份工具... 目录概述功能特性核心功能矩阵特色功能界面展示主界面设计动态效果演示使用教程环境准备操作流程代码深度解

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区

MySQL Workbench工具导出导入数据库方式

《MySQLWorkbench工具导出导入数据库方式》:本文主要介绍MySQLWorkbench工具导出导入数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录mysql Workbench工具导出导入数据库第一步 www.chinasem.cn数据库导出第二步

Mysql数据库中数据的操作CRUD详解

《Mysql数据库中数据的操作CRUD详解》:本文主要介绍Mysql数据库中数据的操作(CRUD),详细描述对Mysql数据库中数据的操作(CRUD),包括插入、修改、删除数据,还有查询数据,包括... 目录一、插入数据(insert)1.插入数据的语法2.注意事项二、修改数据(update)1.语法2.有

查看MySQL数据库版本的四种方法

《查看MySQL数据库版本的四种方法》查看MySQL数据库的版本信息可以通过多种方法实现,包括使用命令行工具、SQL查询语句和图形化管理工具等,以下是详细的步骤和示例代码,需要的朋友可以参考下... 目录方法一:使用命令行工具1. 使用 mysql 命令示例:方法二:使用 mysqladmin 命令示例:方

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例