数据库面试常问

  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 语句更适合生产环境,因为它能够确保查询语句的语义清晰,且效率稍高。
相关推荐
周胡杰21 分钟前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj00124 分钟前
navicate如何设置数据库引擎
数据库·mysql
赵渝强老师27 分钟前
【赵渝强老师】Oracle RMAN的目录数据库
数据库·oracle
暖暖木头29 分钟前
Oracle注释详解
数据库·oracle
御控工业物联网1 小时前
御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
数据库·sql·http
GJCTYU2 小时前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
MicroTech20252 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
Code季风2 小时前
SQL关键字快速入门:CASE 实现条件逻辑
javascript·数据库·sql
weixin_478689762 小时前
操作系统【2】【内存管理】【虚拟内存】【参考小林code】
数据库·nosql
九皇叔叔3 小时前
【7】PostgreSQL 事务
数据库·postgresql