数据库面试题汇总,助你轻松应对面试!

考虑到最近有些小伙伴准备跳槽,所以更新一些数据库相关的面试题,希望能帮到大家!

图片

一 请写出创建表的基本语法结构?

创建表的基本语法结构如下:

CREATE TABLE IF NOT EXISTS 表名(字段名1 字段类型,字段名2 字段类型
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

其中,CREATE TABLE 是关键字,用于创建表。表名 是要创建的表的名称。在括号内,使用逗号分隔各列的定义,每一列由字段名和字段类型组成。字段名用于标识列,字段类型用于指定列中存储的数据的类型。

举个例子,下面是一个创建表的 SQL 语句:

CREATE TABLE IF NOT EXISTS Customers (ID INT PRIMARY KEY,FirstName VARCHAR(50),LastName VARCHAR(50),Email VARCHAR(255)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

这个语句创建了一个名为 “Customers” 的表,其中包含三列:“ID”(整数类型,为主键),“FirstName”(字符串类型,长度为 50 个字符),“LastName”(字符串类型,长度为 50 个字符)和 “Email”(字符串类型,长度为 255 个字符)。

二 什么是主键,主键有什么作用?

主键是一个表中用于唯一标识每一行数据的列或列组合。主键具有以下特点:

唯一性:一个表中只能有一个主键,确保每一行数据都是唯一的。

非空性:主键列中的值不能为空,必须有一个有效的值。

聚集性:主键可以用来组织数据,通常将主键设置为表中的第一列。这样可以加快查询速度,因为数据库管理系统可以使用主键索引来快速定位表中的数据。

主键可以是一列,也可以是多列的组合。如果使用多列作为主键,那么这些列的组合必须是唯一的。例如,在一个学生表中,可以使用学生 ID 和姓名这两列作为主键,因为每个学生都有唯一的 ID 和姓名。

主键对于维护数据的完整性和一致性非常重要。通过设置主键,可以确保在插入或更新数据时不会出现重复行或空值。同时,主键也可以用于建立表之间的关系,例如,在一个订单表和订单项表之间建立一个外键关系,使订单项表中的主键与订单表中的主键相关联。

三 写出表的增删改查SQL语法?

增:INSERT INTO 表名 (列名 1, 列名 2,… ) VALUES (值 1, 值 2,… );

例子:向 Customers 表中添加一条新记录:

INSERT INTO Customers (FirstName, LastName, Email)VALUES ('John', 'Doe', 'john@example.com')

改:UPDATE 表名 SET 列名 = 新值 WHERE 条件;

例子:更新 Customers 表中 FirstName 为 “Jane” 的记录:

UPDATE CustomersSET FirstName = 'Jane'WHERE ID = 1;

删:DELETE FROM 表名 WHERE 条件;

例子:删除 Customers 表中 ID 为 1 的记录:

DELETE FROM Customers WHERE ID = 1;

查:SELECT 列名 1, 列名 2,… FROM 表名 WHERE 条件;

例子:查询 Customers 表中 FirstName 为 “John” 的记录:

SELECT ID, FirstName, LastName, Email FROM Customers WHERE FirstName = 'John';

四 SQL的表连接方式有哪些?

1)内连接—— 表A inner join 表B on 条件,特点:将两个表中满足条件的行组合在一起。如果一个表中有多行满足条件,则返回所有这些行。

例子:查询员工姓名及对应部门名称 没有部门的人员和没有人员的部门都不显示。

SELECTe.empName,d.deptNameFROMt_employee eINNER JOIN t_dept d ON e.dept = d.id

2)左外连接——表A left join 表B on 条件,特点:以左边的表的数据为基准,去匹配右边的表的数据,如果匹配到就显示,匹配不到就显示为null

例子:查询员工表中员工姓名及对应部门名称,若员工没有部门,则显示null。

SELECTe.empName,d.deptNameFROMt_employee eLEFT JOIN t_dept d ON d.id = e.dept;

3)右外连接——表A right join 表B on 条件,特点:返回右表中的所有行,包括那些在左表中没有匹配的行。左表返回与右表匹配的行。如果左表中没有匹配的行,则返回 NULL 值。

例子:查询所有部门和对应的员工,如果部门没有员工,则显示null。

SELECTe.empName,d.deptNameFROMt_employee eRIGHT JOIN t_dept d ON d.id = e.dept;

4)自连接——当前表与自身连接查询。

例子:查询员工以及他的上司的名称,由于上司也是员工,所以这里虚拟化出一张上司表。

SELECTe.empName,b.empNameFROMt_employee eLEFT JOIN t_employee b ON e.bossId = b.id;

五 SQL 的 select 语句完整的执行顺序?

在标准SQL中,SELECT语句的完整执行顺序大致如下:

FROM子句:确定要查询的表。这个步骤会从FROM子句中列出的表中选择数据。

WHERE子句:确定要查询的记录。这个步骤会根据WHERE子句中设置的条件来过滤记录。如果WHERE子句中没有设置条件,那么所有的记录都会被选中。

GROUP BY子句:根据指定的列对结果进行分组。如果没有指定GROUP BY子句,那么每个行的结果就是一个组。

HAVING子句:进一步过滤GROUP BY子句生成的组。HAVING子句可以包含聚合函数,并且只能用在GROUP BY之后。

SELECT子句:确定要输出的列。如果在SELECT子句中没有指定列名,那么所有的列都会被输出。此外,SELECT子句还可以包含聚合函数,例如COUNT(), AVG()等。

DISTINCT关键字:如果使用了DISTINCT关键字,那么输出结果会去除重复的行。

ORDER BY子句:确定输出结果的顺序。如果不指定ORDER BY子句,那么结果会按照它们在数据库中的顺序返回。

LIMIT和OFFSET子句:限制返回的行数。LIMIT子句可以限制返回的行数,而OFFSET子句可以指定开始返回的行数。

以下是一个简单的 SQL 查询语句,执行顺序:

SELECT column1, column2,...
FROM table_name
WHERE condition
GROUP BY column1, column2,...
HAVING condition
ORDER BY column1 ASC/DESC, column2 ASC/DESC,...
LIMIT rows_to_return;

示例:假设有一个名为 “employees” 的表,其中包含 “name” 和 “department” 列。我们想要查询所有姓"Smith"的员工,并按照他们的部门进行分组,然后返回每个部门的第一行结果:

SELECT department, name
FROM employees
WHERE last_name = 'Smith'
GROUP BY department
LIMIT 1;

六 Mysql 数据库中怎么实现分页?

在MySQL数据库中,可以使用LIMIT和OFFSET关键字来实现分页。以下是一种常见的分页查询的用法:

SELECT * FROM table_name  
ORDER BY column_name  
LIMIT page_size OFFSET start_row;

解释一下这个SQL语句的各个部分:

SELECT * FROM table_name: 选择从名为 “table_name” 的表中选择所有列。

ORDER BY column_name: 根据 “column_name” 列的值对结果进行排序。通常,分页查询都会先进行排序,因为这样才能确保分页的正确性。

LIMIT page_size: 限制返回的行数,即每页显示的记录数。例如,如果每页显示10条记录,那么 LIMIT 就是10。

OFFSET start_row: 指定开始返回的行号。例如,如果第一页从第10行开始显示记录,那么 OFFSET 就是9(因为OFFSET是从0开始的)。

举个例子,如果你有一个名为 “employees” 的表,你想获取第2页的数据(每页显示10条记录),你可以这样写SQL语句:

SELECT * FROM employees  
ORDER BY last_name  
LIMIT 10 OFFSET 10;

这个查询会返回 “employees” 表中的第11到第20条记录。

七 你会写存储过程吗?

当需要在数据库中执行复杂的计算、操作或处理逻辑时,可以使用存储过程。存储过程在数据库中定义,可以被反复调用执行,提高了代码的复用性和效率。

下面是一个简单的存储过程的示例,用于计算某个表中所有员工的总工资:

CREATE PROCEDURE calculate_total_salary()
BEGINSELECT SUM(salary) INTO @total_salary FROM employees;
END

在这个示例中,CREATE PROCEDURE 语句用于创建存储过程 calculate_total_salary()。然后,在存储过程内部使用 SELECT SUM(salary) INTO @total_salary 语句计算所有员工的总工资,并将结果存储在一个名为 @total_salary 的变量中。最后,使用 END 语句结束存储过程。

可以通过调用存储过程来计算总工资:

CALL calculate_total_salary();

这将执行存储过程,并将结果存储在变量 @total_salary 中,可以通过查询变量来获取总工资的值:

SELECT @total_salary;

八 索引的作用?

索引在数据库中扮演着重要的角色,它有几个关键的作用:

提高查询速度:通过索引,数据库可以快速定位到匹配条件的行,避免了全表扫描,从而提高了查询效率。

降低数据的I/O成本:索引可以减少磁盘I/O操作的次数。相比于全表扫描,使用索引可以减少从磁盘读取的数据量,提高查询效率。

加速排序和分组:当查询包含ORDER BY或GROUP BY语句时,索引可以直接提供有序的结果,避免了临时表的创建和排序操作。

提供唯一性约束:在列上创建唯一索引,可以确保该列的值是唯一的,避免了重复数据的插入。

举个例子,假设有一个名为"students"的表,包含id、name和age三列。现在在这个表上建立索引,例如在name列上建立索引。当我们执行查询语句SELECT * FROM students WHERE name = 'Alice’时,如果没有在name列上建立索引,数据库需要对整张表进行扫描,找到所有name为’Alice’的记录。但是,如果建立了索引,数据库可以直接定位到name为’Alice’的记录,减少了磁盘I/O操作次数,提高了查询效率。

当然,过多的索引会占用一定的存储空间,并对插入、更新和删除操作造成一定程度的影响。因此,索引的创建需要经过慎重的考虑,以平衡查询性能和数据操作性能。

九 SQL题目1

有一个薪水表,salaries简况如下:

在这里插入图片描述

请你找出所有员工具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示,以上例子输出如下:

在这里插入图片描述

答案SQL如下:

select distinct salary
from salaries
where to_date='9999-01-01'
order by salary desc;

十 SQL题目2

在这里插入图片描述

答案SQL如下:

select s.emp_no, s.salary, e.last_name, e.first_name
from salaries s join employees e
on s.emp_no = e.emp_no
where s.salary =              -- 第三步: 将第二高工资作为查询条件(select max(salary)        -- 第二步: 查出除了原表最高工资以外的最高工资(第二高工资)from salarieswhere salary <        (select max(salary)    -- 第一步: 查出原表最高工资from salarieswhere to_date = '9999-01-01'        )and to_date = '9999-01-01')
and s.to_date = '9999-01-01'

 

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2803780.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

哪个蓝牙耳机好用?2024最新蓝牙耳机选购指南,实测避坑!

​蓝牙耳机已成为现代生活中不可或缺的一部分。无论你是追求高品质音质、注重佩戴体验&#xff0c;还是在意性价比&#xff0c;市场上总有适合你的那一款。希望通过我的推荐和分析&#xff0c;你能找到一款真正适合自己的蓝牙耳机&#xff0c;让你的音乐之旅更加精彩。 一、选购…

【2024软件测试面试必会技能】Charles(6):Charles设置弱网

设置弱网&#xff08;慢网速&#xff09; 方法一&#xff1a;点击Charles 上方的乌龟标志&#xff0c;模拟网络延迟&#xff1b; 方法二&#xff1a;点击Proxy——Throttle Settings——勾选Enable Throttling——再勾选Only for selected hosts——点击Add,设置指定的域名——…

【Vuforia+Unity】AR05-实物3D模型识别功能实现(ModelTarget )

不管是什么类型的识别Vuforia的步骤基本都是&#xff1a; 把被识别的物体转成图、立体图、柱形图&#xff0c;3D模型、环境模型&#xff0c;然后模型生成Vuforia数据库-导入Unity-参考模型位置开始摆放数字内容&#xff0c;然后参考模型自动隐藏-发布APP-识别生活中实物-数字内…

kettle计算增长率

kettle计算增长率 问题描述处理方法 问题描述 读取一段时间内的数据记录&#xff0c;计算相邻记录的比率 iddatevalue12024-01-0110012024-01-0211012024-01-0312012024-01-0490 处理方法 1.使用统计中的分析查询节点能在每一行中添加前后行的数据 2.使用计算器节点计算比…

蓝牙耳机哪个品牌质量好?2024超高性能机型比拼推荐

​无线耳机已经成为现代生活中的必备数码产品&#xff0c;尤其在感受到无线带来的自由后&#xff0c;很难再适应有线耳机的束缚。因此&#xff0c;耳机市场竞争激烈&#xff0c;各种类型和外观的耳机层出不穷。在此&#xff0c;我为大家总结了五款使用体验很不错的蓝牙耳机&…

ESP8266智能家居(1)——开发环境的搭建

1.前期介绍 本次打算使用esp8266的开发板——NodeMCU&#xff0c;进行物联网相关项目的学习。开发环境使用Arduino软件。 NodeMCU实物图为&#xff1a; 开发环境截图为&#xff1a; 2.软件下载 我使用的arduino版本为1.8.5&#xff0c;其安装包如下&#xff1a; 【免费】ar…

区块链笔记(五)---德勤相关分析报告

web3.0 定义&#xff1a; 在《Insights into a Modern World》提出&#xff0c;“信息将由用户自己发布、保管、不可追溯且永远不会泄露&#xff0c;用户的任何行为将不需要任何中间机构来帮助传递”&#xff1b;用来指代一种区块链技术&#xff0c;可以基于“无须信任的交互…

2024年阿里云新用户购买云服务器有哪些优惠活动?

2024年阿里云服务器购买、续费、升级优惠政策整理&#xff0c;阿里云服务器优惠价格表&#xff1a;轻量2核2G3M服务器61元一年、2核4G4M带宽165元1年&#xff0c;云服务器4核16G10M带宽26元1个月、149元半年&#xff0c;阿里云ECS云服务器2核2G3M新老用户均可99元一年续费不涨价…

精酿啤酒:麦芽与啤酒花搭配的奥秘

麦芽和啤酒花是啤酒酿造过程中不可或缺的原料&#xff0c;它们的风味和特点对啤酒的口感和品质产生着深远的影响。Fendi Club啤酒在麦芽与啤酒花的搭配方面有着与众不同的技巧和见解&#xff0c;让啤酒的口感更加丰富和迷人。 首先&#xff0c;麦芽的选择是啤酒酿造的关键之一。…

springboot211基于springboot医疗报销系统的设计与实现

医疗报销系统的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;报销单信息因为其管理内容繁杂&#xff0c;管理数量繁多…

【C++】——模板初阶 | STL简介

前言: 模板初阶 | STL简介 文章目录 一、模板初阶1.1 函数模板1.2 类模板 二、STL简介 &#xff08;了解&#xff09; 一、模板初阶 泛式编程&#xff08;Generic Programming&#xff09;指的是一种编程范式&#xff0c;其核心思想是编写可以在不同数据类型上通用的代码&#…

C语言中的assert.h:调试助手与断言详解

在C语言编程中&#xff0c;assert.h头文件提供了非常有用的断言&#xff08;Assertion&#xff09;功能&#xff0c;它主要用于开发和调试阶段&#xff0c;确保程序在运行时满足某些预期条件。如果这些条件未得到满足&#xff0c;则程序会立即停止执行&#xff0c;并打印出有关…

架构师技能9-深入mybatis:Creating a new SqlSession到查询语句耗时特别长

开篇语录&#xff1a;以架构师的能力标准去分析每个问题&#xff0c;过后由表及里分析问题的本质&#xff0c;复盘总结经验&#xff0c;并把总结内容记录下来。当你解决各种各样的问题&#xff0c;也就积累了丰富的解决问题的经验&#xff0c;解决问题的能力也将自然得到极大的…

操作系统--调度算法

一、进程调度算法&#xff08;CPU调度算法&#xff09; 什么时候会发生 CPU 调度呢&#xff1f;通常有以下四种情况&#xff1a; 「抢占式调度」&#xff1a;进程正在运行的时&#xff0c;可以被打断&#xff0c;使其把 CPU 让给其他进程。那抢占的原则一般有三种&#xff0c…

测试用例设计方法:招式组合,因果判定出世

1 引言 上篇讲了等价类划分和边界值分析法&#xff0c;而这两种方法只考虑了单个的输入条件&#xff0c;并未考虑输入条件的各种组合、输入条件之间的相互制约关系的场景。基于此短板&#xff0c;因果图法和判定表法应运而生。 2 因果图法 2.1 概念及原理 2.1.1 定义 一种…

BLEU: a Method for Automatic Evaluation of Machine Translation

文章目录 BLEU: a Method for Automatic Evaluation of Machine Translation背景和意义技术原理考虑 n n n - gram中 n 1 n1 n1 的情况考虑 n n n - gram中 n > 1 n\gt 1 n>1 的情况考虑在文本中的评估初步实验评估和结论统一不同 n n n 值下的评估数值考虑句子长度…

一文了解L7812CV的引脚图介绍、参数解读

L7812CV简介 L7812CV是一款具有稳压功能的正向型线性稳压器&#xff0c;能够将输入电压稳定输出为12V的直流电压。它适用于各种需要12V电源的电子设备、电路和系统。 引脚图介绍 L7812CV有三个引脚&#xff0c;分别为输入引脚&#xff08;输入电压Vin&#xff09;、地引脚&…

什么是智慧公厕?智慧公厕跟传统公共厕所的区别

智慧公厕是近年来新兴起的一种公共设施&#xff0c;通过物联网技术的应用&#xff0c;实现了公厕的全面感知、全时监测、全方位精细化管理。与传统的公共厕所相比&#xff0c;智慧公厕在许多方面带来了翻天覆地的变化。本文以智慧公厕源头厂家广州中期科技有限公司&#xff0c;…

【2024.02.22】定时执行专家 V7.0 发布 - TimingExecutor V7.0 Release - 龙年春节重大更新版本

目录 ▉ 新版本 V7.0 下载地址 ▉ V7.0 新功能 ▼2024-02-21 V7.0 - 更新日志▼ ▉ V7.0 新UI设计 ▉ 新版本 V7.0 下载地址 BoomWorks软件的最新版本-CSDN博客文章浏览阅读10w次&#xff0c;点赞9次&#xff0c;收藏41次。▉定时执行专家—毫秒精度、专业级的定时任务执行…

【计算机网络】一些乱七八糟内容

MAC Media Access Control 用于在局域网&#xff08;LAN&#xff09;或广域网&#xff08;WAN&#xff09;中实现设备自动接入网络 "载波侦听多路访问"(Carrier Sense Multiple Access) CSMA/CD 是CSMA的升级版本&#xff0c;加入了序列号检测机制。 CSMA/CA 是CSM…