sql面试题及答案

sql面试题及答案

sql面试题及答案一

1. 简述索引存取的方法的作用和建立索引的原则

作用:加快查询速度。

原则:

(1) 如果某属性或属性组经常出现在查询条件中,考虑为该属性或属性组建立索引;

(2) 如果某个属性常作为最大值和最小值等聚集函数的参数,考虑为该属性建立索引;

(3) 如果某属性经常出现在连接操作的连接条件中,考虑为该属性或属性组建立索引;

2. 简述数据库的设计过程

数据库设计分为五个阶段:

需求分析:主要是准确收集用户信息需求和处理需求,并对收集的结果进行整理和分析,形成需求说明。

概念结构设计:对用户需求进行综合、归纳、抽象,形成一个与与具体的DBMS无关概念模型(一般为ER模型)。

逻辑结构设计:将概念结构设计的概念模型转化为某个特定的DBMS所支持的数据模型,建立数据库逻辑模式,并对其进行优化,同时为各种用户和应用设计外模式。

物理结构设计:为设计好的逻辑模型选择物理结构,包括存储结构和存取方法等,建立数据库物理模式。

实施和维护:实施就是使用DLL语言建立数据库模式,将实际数据载入数据库,建立真正的数据库。维护阶段是对运行中的数据库进行评价、调整和修改。

3. 什么是内存泄漏?

答案:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete 释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。

4. 什么是基本表?什么是视图?

答案:基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。

视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表

5. 试述视图的优点

(1) 视图能够简化用户的操作

(2) 视图使用户能以多种角度看待同一数据;

(3) 视图为数据库提供了一定程度的逻辑独立性;

(4) 视图能够对机密数据提供安全保护。

6. 所有的视图是否都可以更新?为什么?

答案:不是。

视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。

因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的。

7. 哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明。

答案:基本表的行列子集视图一般是可更新的。若视图的属性来自集函数、表达式,则该视图肯定是不可以更新的。

8. 维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么?

答案:尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。

9. 在为视图创建索引前,视图本身必须满足哪些条件?

(1) 视图以及视图中引用的所有表都必须在同一数据库中,并具有同一个所有者

(2) 索引视图无需包含要供优化器使用的查询中引用的所有表。

(3) 必须先为视图创建唯一群集索引,然后才可以创建其它索引。

(4) 创建基表、视图和索引以及修改基表和视图中的数据时,必须正确设置某些 SET 选项(在*档的后文中讨论)。另外,如果这些 SET 选项正确,查询优化器将不考虑索引视图。

(5) 视图必须使用架构绑定创建,视图中引用的任何用户定义的函数必须使用 SCHEMABINDING 选项创建。

(6) 另外,还要求有一定的磁盘空间来存放由索引视图定义的数据。

10. 什么是SQL Server的确定性函数和不确定性函数?

答案:只要使用特定的输入值集并且数据库具有相同的状态,不管何时调用,始终都能范围相同结果的函数叫确定性函数。几十访问的数据库的状态不变,每次书用特定的输入值都可能范围不同结果的函数叫非确定性函数。

sql面试题及答案二

1. 提高数据库运行效率的办法有哪些?

答案:在给定的系统硬件和系统软件条件下,提高数据库系统的运行效率的办法是:

(1) 在数据库物理设计时,降低范式,增加冗余, 少用触发器, 多用存储过程。

(2) 当计算非常复杂、而且记录条数非常巨大时(例如一千万条),复杂计算要先在数据库外面,以文件系统方式用C++语言计算处理完成之后,最后才入库追加到表中去。这是电信计费系统设计的经验。

(3) 发现某个表的记录太多,例如超过一千万条,则要对该表进行水平分割。水平分割的做法是,以该表主键PK的某个值为界线,将该表的记录水平分割为两个表。若发现某个表的字段太多,例如超过八十个,则垂直分割该表,将原来的一个表分解为两个表。

(4) 对数据库管理系统DBMS进行系统优化,即优化各种系统参数,如缓冲区个数。

(5) 在使用面向数据的SQL语言进行程序设计时,尽量采取优化算法。总之,要提高数据库的运行效率,必须从数据库系统级优化、数据库设计级优化、程序实现级优化,这三个层次上同时下功夫。

2. 通俗地理解三个范式

答案:通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解):

第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;

第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。

3. 简述存储过程的优缺点

优点:

1. 更快的执行速度:存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度;

2. 与事务的结合,提供更好的解决方案:当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query和Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用;

3. 支持代码重用:存储过程可以重复使用,可减少数据库开发人员的工作量;

4. 安全性高:可设定只有某此用户才具有对指定存储过程的使用权。

缺点:

1. 如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。

2. 可移植性差由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于 RDBMS 的中间层中可能是一个更佳的选择。

4. 主键和唯一索引有什么区别?

答案:

相同点:它们都属于实体完整性约束。

不同点:

(1) 唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值。

(2) 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的。但是,唯一性约束所在的列并不是表的主键列。

(3) 唯一性约束强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。

(4) 建立主键的目的是让外键来引用。

(5) 一个表最多只有一个主键,但可以有很多唯一键。

sql面试题及答案三

1. 在一个查询中,使用哪一个关键字能够除去重复列值?

答案:使用distinct关键字

2. 什么是快照?它的作用是什么?

答案:快照Snapshot是一个文件系统在特定时间里的镜像,对于在线实时数据备份非常有用。快照对于拥有不能停止的应用或具有常打开文件的文件系统的备份非常重要。对于只能提供一个非常短的备份时间而言,快照能保证系统的完整性。

3. 解释存储过程和触发器

答案:

存储过程是一组Transact-SQL语句,在一次编译后可以执行多次。因为不必重新编译Transact-SQL语句,所以执行存储过程可以提高性能。

触发器是一种特殊类型的存储过程,不由用户直接调用。创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。

4. SQL Server是否支持行级锁,有什么好处?

答案:支持动态行级锁定

SQL Server 2000动态地将查询所引用的每一个表的锁定粒度调整到合适的级别。当查询所引用的少数几行分散在一个大型表中时,优化数据并行访问的最佳办法是使用粒度锁,如行锁。但是,如果查询引用的是一个表中的大多数行或所有行,优化数据并行访问的最佳办法可以是锁定整个表,以尽量减少锁定开销并尽快完成查询。

SQL Serve 2000通过为每个查询中的每个表选择适当的锁定级别,在总体上优化了数据并发访问。对于一个查询,如果只引用一个大型表中的几行,则数据库引擎可以使用行级锁定;如果引用一个大型表的几页中的多行,则使用页级锁定;如果引用一个小型表中的所有行,则使用表级锁定。

5. 数据库日志干什么用,数据库日志满的时候再查询数据库时会出现什么情况。

答案:每个数据库都有事务日志,用以记录所有事务和每个事务对数据库所做的修改。

6. 存储过程和函数的区别?

答案:存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表

7. 事务是什么?

答案:事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:

(1) 原子性

事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

(2) 一致性

事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。

(3) 隔离性

由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。

(4) 持久性

事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

8. 游标的作用?如何知道游标已经到了最后?

答案:游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。

9. 触发器分为事前触发和事后触发,这两种触发有何区别?语句级触发和行级触发有何区别?

答案:

事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。

语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。

10. 解决死锁的方法有哪些?

答案:

解决手段一:SQL Server自动检测和消除死锁

解决手段二:设置死锁优先级

解决手段三:设置锁定超时

解决手段四:使用更新锁避免死锁

sql面试题及答案

sql面试题及答案 SQL(Structured Query Language)是一种用于管理关系型数据库系 统的标准化语言。在面试过程中,针对SQL的相关问题被广泛应用, 以评估面试者对数据库和SQL的理解程度和能力。以下是一些常见的SQL面试题及其答案,供读者参考。 一、简答题 1. 什么是SQL? SQL是一种用于管理关系型数据库系统的标准化语言。它可以用于 创建数据库、插入、更新、删除和查询数据。 2. SQL语言的分类有哪些? SQL语言可以分为DDL(数据定义语言)、DML(数据操作语言)和DQL(数据查询语言)。 3. DDL和DML的区别是什么? DDL用于定义和管理数据库结构,如创建表、修改表的结构等;DML用于对数据库中的数据进行操作,如增加、修改、删除数据等。 4. 什么是主键? 主键是用于唯一标识表中每一条记录的列或一组列。它具有唯一性 和非空性约束。 5. 什么是外键?

外键是一个表中的列,它与另一个表的主键建立关系。它用于保持 表与表之间的完整性,可以实现关系数据库的特性。 6. 什么是索引? 索引是一种帮助数据库系统快速查找数据的数据结构。它可以加快 数据检索的速度,但会增加数据修改的时间。 7. 请解释SQL中的JOIN操作。 JOIN操作用于将两个或多个表中的数据连接起来,根据某个共同 的列值将它们关联起来。常见的JOIN操作包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。 8. 请解释SQL中的GROUP BY和HAVING操作。 GROUP BY用于将数据按照指定的列进行分组;HAVING则用于 对GROUP BY结果进行过滤,只选择满足条件的分组。 9. 什么是视图? 视图是一个虚拟的表,它是由数据库中的一个或多个表的数据组成的。视图是基于某个或多个表的查询结果,可以简化复杂的查询操作。 二、编程题 1. 如何在表中插入数据? 使用INSERT INTO语句向表中插入数据。例如,INSERT INTO 表 名 (列1, 列2, 列3) VALUES (值1, 值2, 值3)。

sql经典面试题

1.张表,学生表S,课程C,学生课程表SC,学生可以选修多门课程,一门课程可以被多个学生选修,通过SC表关联;(SQL) 1)写出建表语句; 答:建表语句如下(mysql数据库): create table s(id integer primary key, name varchar(20)); create table c(id integer primary key, name varchar(20)); create table sc( sid integer references s(id), cid integer references c(id), primary key(sid,cid) ); 2)写出SQL语句,查询选修了所有选修课程的学生; 答:SQL语句如下: select , from s stu where (select count(*) from sc where sid= = (select count(*) from c); 3)写出SQL语句,查询选修了至少5门以上的课程的学生。 答:SQL语句如下: select , from s stu where (select count(*) from sc where sid=>=5; 2.数据库表(Test)结构如下:(SQL) IDNAMEAGEMANAGER(所属主管人ID) 106A30104 109B19104 104C20111 107D35109

112E25120 119F45NULL 要求:列出所有年龄比所属主管年龄大的人的ID和名字 答:SQL语句如下: select from test employee where > (select from test manager where =; 3.有3个表(15分钟):(SQL) Student 学生表 (学号,姓名,性别,年龄,组织部门) Course 课程表 (编号,课程名称) Sc 选课表 (学号,课程编号,成绩) 表结构如下: 1)写一个SQL语句,查询选修了’计算机原理’的学生学号和姓名(3分钟) 答:SQL语句如下: select , from Student stu where (select count(*) from sc where sno= and cno = (select cno from Course where cname=’计算机原理’)) != 0; 2)写一个SQL语句,查询’周星驰’同学选修了的课程名字(3分钟) 答:SQL语句如下: select cname from Course where cno in (select cno from sc where sno=(select sno from Student where sname=’周星驰’)); 3)写一个SQL语句,查询选修了5门课程的学生学号和姓名(9分钟) 答:SQL语句如下: select , from student stu where (select count(*) from sc where sno= = 5;

常见SQL数据库面试题和答案

常见SQL数据库面试题和答案 常见SQL数据库面试题和答案(一) Student(S#,Sname,Sage,Ssex) 学生表S#:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别 Course(C#,Cname,T#) 课程表 C#,课程编号;Cname:课程名字;T#:教师编号 SC(S#,C#,score) 成绩表 S#:学号;C#,课程编号;score:成绩 Teacher(T#,Tname) 教师表 T#:教师编号; Tname:教师名字 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号; select # from (select s#,score from SC where C#='001') a,(select s#,score from SC where C#='002') b where > and #=#; 2、查询平均成绩大于60分的同学的学号和平均成绩; select S#,avg(score) from sc group by S# having avg(score) >60; 3、查询所有同学的学号、姓名、选课数、总成绩; select #,,count#),sum(score) from Student left Outer join SC on #=# group by #,Sname 4、查询姓“李”的老师的个数; select count(distinct(Tname)) from Teacher where Tname like '李%'; 5、查询没学过“叶平”老师课的同学的学号、姓名; select #, from Student

SQL_面试题及答案

1、SQL SREVER中,向一个表中插入了新数据,如何快捷的得到自增量字段的当前值 dd我们希望马上得到这个新用户的ID,因为我们一般都是把这种用户ID的字段设置成自增长类型的,乍看起来好像没有要得到那个新ID很麻烦,其实sql server内置了一些全局的变量,使我们很容易就得到那个新的自增字段的ID,就是使用@@IDENTITY。 在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDENTITY 将返回触发器生成的最后一个标识值。 在具体应用中可以这样来写SQL语句: string strSql = "INSERT INTO [User]([Name],[LoginName],[Pwd],[RegTime],[IsSuper],[Remark])" + "VALUES(@Name,@LoginName,@Pwd,@RegTime,@IsSuper,@Remark);select @@IDENTITY ;"; 执行的时候直接用command.ExecuteScalar();就可以了,能直接返回该条记录的UserID; 解答二: 经过实验,得如下结论: select DISTINCT @@IDENTITY as iden from FaWen 解释:上述语句对 SQL SERVER 的一个会话,也就是一条连接,返回该连接最后一条插入记录得到的自增字段的值。 假设有3个程序,分别连接SQL SERVER,有三个连接。3个程序都向同一个表依顺序插入数据,得到的值分别是1、2、3,那么,只要3个程序对SQL的连接还保持着,第一个程序使用上述语句,将得到1,而不是3,第二个程序将得到2,也不是3。第三个程序得到3。 因此,用上述语句可以得到自己刚才插入记录的自增字段的值,不怕其它程序的并发插入操作。

sql面试题及答案

sql面试题及答案 sql面试题及答案一 1. 简述索引存取的方法的作用和建立索引的原则 作用:加快查询速度。 原则: (1) 如果某属性或属性组经常出现在查询条件中,考虑为该属性或属性组建立索引; (2) 如果某个属性常作为最大值和最小值等聚集函数的参数,考虑为该属性建立索引; (3) 如果某属性经常出现在连接操作的连接条件中,考虑为该属性或属性组建立索引; 2. 简述数据库的设计过程 数据库设计分为五个阶段: 需求分析:主要是准确收集用户信息需求和处理需求,并对收集的结果进行整理和分析,形成需求说明。 概念结构设计:对用户需求进行综合、归纳、抽象,形成一个与与具体的DBMS无关概念模型(一般为ER模型)。 逻辑结构设计:将概念结构设计的概念模型转化为某个特定的DBMS所支持的数据模型,建立数据库逻辑模式,并对其进行优化,同时为各种用户和应用设计外模式。

物理结构设计:为设计好的逻辑模型选择物理结构,包括存储结构和存取方法等,建立数据库物理模式。 实施和维护:实施就是使用DLL语言建立数据库模式,将实际数据载入数据库,建立真正的数据库。维护阶段是对运行中的数据库进行评价、调整和修改。 3. 什么是内存泄漏? 答案:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete 释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。 4. 什么是基本表?什么是视图? 答案:基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。 视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表 5. 试述视图的优点 (1) 视图能够简化用户的操作 (2) 视图使用户能以多种角度看待同一数据; (3) 视图为数据库提供了一定程度的逻辑独立性; (4) 视图能够对机密数据提供安全保护。 6. 所有的视图是否都可以更新?为什么? 答案:不是。

【2018-2019】SQL查询面试题与答案-范文模板 (14页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为word格式,下载后可方便编辑和修改! == SQL查询面试题与答案 SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。下面是小编搜集的SQL查询面试题与答案,欢迎大家阅读。 SQL查询面试题与答案一 1.一道SQL语句面试题,关于group by表内容: 201X-05-09 胜 201X-05-09 胜 201X-05-09 负 201X-05-09 负 201X-05-10 胜 201X-05-10 负 201X-05-10 负 如果要生成下列结果, 该如何写sql语句? 胜负 201X-05-09 2 2 201X-05-10 1 2 ------------------------------------------ create table #tmp(rq varchar(10),shengfu nchar(1)) insert into #tmp values('201X-05-09','胜')

insert into #tmp values('201X-05-09','胜') insert into #tmp values('201X-05-09','负') insert into #tmp values('201X-05-09','负') insert into #tmp values('201X-05-10','胜') insert into #tmp values('201X-05-10','负') insert into #tmp values('201X-05-10','负') 1)select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum(case when shengfu='负' then 1 else 0 end)'负' from #tmp group by rq 2) select N.rq,N.勝,M.負 from ( select rq,勝=count(*) from #tmp where shengfu='胜'group by rq)N inner join (select rq,負=count(*) from #tmp where shengfu='负'group by rq)M on N.rq=M.rq 3)select a.col001,a.a1 胜,b.b1 负 from (select col001,count(col001) a1 from temp1 where col002='胜' group by col001) a, (select col001,count(col001) b1 from temp1 where col002='负' group by col001) b where a.col001=b.col001 2.请教一个面试中遇到的SQL语句的查询问题 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。 ------------------------------------------ select (case when a>b then a else b end ), (case when b>c then b esle c end) from table_name

SQL面试题目汇总

SQL面试题目汇总 1.触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2.什么是存储过程?用什么来调用? 答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。 3.索引的作用?和它的优点缺点是什么? 答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。 4.什么是内存泄漏? 答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。 5.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么? 答:我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

SQL经典面试题及答案

1。用一条SQL 语句查询出每门课都大于80 分的学生姓名 name kecheng fenshu 张三语文81 张三数学75 李四语文76 李四数学90 王五语文81 王五数学100 王五英语90 A:select distinct name from table where name not in (select distinct name from table where fenshu<=80) select name from table group by name having min(fenshu)〉80 select name from table group by name having count(kecheng)〉=3 and min (fenshu)>=80 2. 学生表如下: 自动编号学号姓名课程编号课程名称分数 1 2005001 张三0001 数学69 2 2005002 李四0001 数学89 3 2005001 张三0001 数学69 删除除了自动编号不同,其他都相同的学生冗余信息 A: delete tablename where 自动编号not in(select min(自动编号) from tablename group by 学号,姓名,课程编号, 课程名称, 分数) 3。面试题:怎么把这样一个表儿 year month amount 1991 1 1.1 1991 2 1.2 1991 3 1。3 1991 4 1。4 1992 1 2.1 1992 2 2.2 1992 3 2.3 1992 4 2。4 查成这样一个结果 year m1 m2 m3 m4 1991 1。1 1.2 1.3 1.4 1992 2.1 2.2 2。3 2.4

hivesql面试必会6题经典

hivesql面试必会6题经典 HiveSQL 面试必会 6 题经典 HiveSQL 是大数据领域中非常重要的一个技术和工具。作为一个 HiveSQL 的开发人员或者应聘者,熟练掌握和掌握一些常见的面试题目是十分重要的。在本文中,我 们将为大家介绍六道常见的 HiveSQL 应聘面试题目。 题目一:如何在 HiveSQL 中按照日期排序? 答案:HiveSQL 中,你可以使用 ORDER BY 语句对日期排序。但是需要注意一点,如果你按照日期字符串排 序,HiveSQL 将会按照字符串顺序而不是实际日期顺序排序。为了确保正确的日期排序,你需要将日期字符串转换 为日期对象进行排序。如下: SELECT * FROM table ORDER BY CAST(date AS DATE) DESC; 题目二:如何在 HiveSQL 中取出某一个表的最新 N 行记录? 答案:可以使用 HiveSQL 中的 DESC 语句和 LIMIT 关键字按照降序排序并限制行数。如下: SELECT * FROM table ORDER BY date DESC LIMIT N; 题目三:如何使用 HiveSQL 中的 LIKE 语句匹配类似于正则表达式的模式?

答案:在 HiveSQL 中,你可以使用 LIKE 语句,并在搜索的字符串中使用 % 和 _ 替代符号来匹配指定的模式。如下: SELECT * FROM table WHERE field LIKE '%str%'; 题目四:如何在 HiveSQL 中取出两个日期之间的所有记录? 答案:在 HiveSQL 中,你可以使用 BETWEEN 关键字来过滤两个日期之间的记录。如下: SELECT * FROM table WHERE date BETWEEN start_date AND end_date; 题目五:如何在 HiveSQL 中在多个表之间进行 JOIN 操作? 答案:在 HiveSQL 中,你可以使用 JOIN 关键字在多个表中进行联接操作。如下: SELECT * FROM table1 JOIN table2 ON table1.field1 = table2.field2; 题目六:如何在 HiveSQL 中将一个字符串转换为日期对象? 答案:在 HiveSQL 中,你可以使用 TO_DATE 函数将一个字符串转换为日期对象。如下: SELECT TO_DATE('2019-07-01', 'yyyy-MM-dd'); 总结:

数据库面试题(SQLSERVER)及答案

数据库面试题(SQL2005) 一、选择题(5分一题,共50分) 1、公司A使用SQL Server 2005数据库。来自贸易伙伴的客户数据每天晚上都要导入到客户表。你要确保,在导入的过程中,对于存在的客户数据进行更新、对于不存在的客户数据进行插入。你该怎么做?(B) A. 创建一个FOR触发器。 B. 创建一个INSTEAD OF 触发器。 C. 创建一个 AFTER 触发器。 D. 创建一个 DDL 触发器。 2、你负责维护你们部门SQL Server 2005数据库的调度作业。其中一个作业从多源为报表聚集数据。这个作业每日运行,由多步构成。每一步都为某一特定报表聚集数据。有用户反映一些报表的数据近期没有更新。你要确保即使发生错误,聚合数据作业的每一步也都要执行。那你该如何做?(C) A. 将作业中所有步骤组合成一个每日运行的步骤。 B. 创建一个通知;在每次出现错误时通知你。以便你能及时更正错误,重启作业。 C. 修改失败使要执行的步骤为“转到下一步”。 D. 设置作业重试当前步骤。 3、你要创建一个SQL Server 2005应用程序来存储和管理法律文件。原文件以XML文档存于一文件服务器上。此应用程序用于将文件插入到数据库。此后,这些文档必须能够从数据库中得到,并与原文件保持一致。你要设计一个表去存储这些文档数据,该怎样做?(A) A. 将XML文档存于以nvarchar(max)为数据类型的一列中。 B. 分割此XML文档并将其存储于在一个关系结构中。 C. 将XML文档存于以XML为数据类型的一列中。 D. 将XML文档存于以varchar(8000)为数据类型的一列中。 4、你正在写一个查询,从SQL Server 2005数据库表中返回数据。一些数据存储在关系列中,一些存储在XML数据类型列中。你的查询需要返回一个关系结果集,其中包含关系域中的数据以及XML数据类型列的属性值。你应该使用XML数据类型的哪两个方法?(每一个正确的答案代表方案的一部分。选两项。)(AD) A. the value() 方法。 B. the exist()方法。 C. the query()方法。 D. the nodes()方法。 E. the modify()方法。 5、你配置一个采用默认设置全新安装的SQL SERVER 2005计算机使用TCP/IP协议。公司的安全策略也要求每个服务器都使用防火墙。你发现在本地计算机上可以连接到这个SQL SERVER 实例,但是客户端计算机却不能连接到这个SQL SERVER 实例上。为了找到最有可能导致这个连接问题的原因,你首先应该做?(A) A. 检查防火墙是否打开了1433端口。 B. 检查防火墙是否打开了433端口。

SQL经典面试题及答案

SQL经典面试题及答案 1.一道SQL语句面试题,关于group by 表内容: 2005-05-09 胜 2005-05-09 胜 2005-05-09 负 2005-05-09 负 2005-05-10 胜 2005-05-10 负 2005-05-10 负 如果要生成下列结果, 该如何写sql语句? 胜负 2005-05-09 2 2 2005-05-10 1 2 ------------------------------------------ create table #tmp(rq varchar(10),shengfu nchar(1)) insert into #tmp values('2005-05-09','胜') insert into #tmp values('2005-05-09','胜') insert into #tmp values('2005-05-09','负') insert into #tmp values('2005-05-09','负') insert into #tmp values('2005-05-10','胜') '负') insert into #tmp values('2005-05-10',insert into #tmp values('2005-05-10','负') 1)select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum ' then 1 else 0 end)'负' from #tmp group (case when shengfu='负 by

SQL数据库对于海量数据面试题及答案

本文整理和大家分享一些SQL数据库对于海量数据面试题及答案给大家,很不错哦,喜欢请收藏一下。 1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为300M。 s 遍历文件b,采取和a相同的方式将url分别存储到1000各小文件(记为)。这样处理后,所有可能相同的url都在对应的小文件()中,不对应的小文件不可能有相同的url。然后我们只要求出1000对小文件中相同的url即可。 s 求每对小文件中相同的url时,可以把其中一个小文件的url存储到hash_set中。然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。 方案2:如果允许有一定的错误率,可以使用Bloom filter,4G内存大概可以表示340亿bit。将其中一个文件中的url使用Bloom filter映射为这340亿bit,然后挨个读取另外一个文件的url,检查是否与Bloom filter,如果是,那么该url应该是共同的url(注意会有一定的错误率)。 2. 有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query 都可能重复。要求你按照query的频度排序。 方案1: s 顺序读取10个文件,按照hash(query)%10的结果将query写入到另外10个文件(记为)中。这样新生成的文件每个的大小大约也1G(假设hash函数是随机的)。 s 找一台内存在2G左右的机器,依次对用hash_map(query, query_count)来统计每个query 出现的次数。利用快速/堆/归并排序按照出现次数进行排序。将排序好的query和对应的query_cout输出到文件中。这样得到了10个排好序的文件(记为)。 s 对这10个文件进行归并排序(内排序与外排序相结合)。 方案2: 一般query的总量是有限的,只是重复的次数比较多而已,可能对于所有的query,一次性就可以加入到内存了。这样,我们就可以采用trie树/hash_map等直接来统计每个query出现的次数,然后按出现次数做快速/堆/归并排序就可以了。

SQL数据库经典面试题(笔试题)(有答案)

28. 数据库:抽出部门,平均工资,要求按部门的字符串顺序排序,不能含有"human resource"部门, employee结构如下:employee_id, employee_name, depart_id,depart_name,wage 答: select depart_name, avg(wage) from employee where depart_name <> 'human resource' group by depart_name order by depart_name -------------------------------------------------------------------------- 29. 给定如下SQL数据库:Test(num INT(4)) 请用一条SQL语句返回num的最小值,但不许使用统计功能,如MIN,MAX等 答: select top 1 num from Test order by num -------------------------------------------------------------------------- 33.一个数据库中有两个表: 一张表为Customer,含字段ID,Name; 一张表为Order,含字段ID,CustomerID(连向Customer中ID的外 键),Revenue; 写出求每个Customer的Revenue总和的SQL语句。 建表create table customer ( ID int primary key,Name char(10) ) go create table [order] (

SQL数据库经典面试题(修改笔试题)(有答案)

28、ﻫ数据库:抽出部门,平均工资,要求按部门得字符串顺序排序,不能含有"human resource"部门,employee结构如下: employee_id,employee_name,depart_id,depart_name,wage 答:ﻫselect depart_name, avg(wage) fromemployee where depart_name〈〉'humanresource'ﻫgroup by depart_nameorder by depart_name ---—--——----—-——----—--——-—---———----—————-—- 29、 —-—--—---—-—--————-——--——--——ﻫ 给定如下SQL数据库:Test(num INT(4))请用一条SQL语句返回num得最小值,但不许使用统计功能,如MIN,MAX等 答: select top1 num from Test orderbynum ----—-----——-—----———----—---—----—-—-—-———-—- 33、一个数据库中有两个表:——----—-—----—--—--——--—----ﻫ 一张表为Customer,含字段ID,Name; 一张表为Order,含字段ID,CustomerID(连向Customer中ID得外键),Re venue;ﻫ写出求每个Customer得Revenue总与得SQL语句。 建表create table customerﻫ(ID int primary key,Namechar (10)) go create table [order]ﻫ(ID int primary key,CustomerID int foreign key references customer(id),Revenue float) go --查询ﻫselect Customer、ID, sum(isnull([Order]、Revenue,0))ﻫfrom customer full join [order]on([order]、custome rid=customer、id) groupby customer、id selectcustomer、id,sum(order、revener) fromorder,customer where customer、id=customerid group by customer、id select customer、id,sum(order、revener)from customer fulljoin order on(order、customerid=customer、id)group bycustomer、id 5数据库(10) a tabel called “performance”contain :name andscore,please用SQL语言表述

2021年sql常见面试题

sql理论题 1.触发器作用? 答:触发器是一中特殊存储过程,重要是通过事件来触发而被执行。它可以强化约束,来维护数据完整性和一致性,可以跟踪数据库内操作从而不容许未经允许更新和变化。可以联级运算。如,某表上触发器上包括对另一种表数据操作,而该操作又会导致该表触发器被触发。 2。什么是存储过程?用什么来调用? 答:存储过程是一种预编译SQL语句,长处是容许模块化设计,就是说只需创立一次,后来在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一种命令对象来调用存储过程。 3。索引作用?和它长处缺陷是什么? 答:索引就一种特殊查询表,数据库搜索引擎可以运用它加速对数据检索。它很类似与现实生活中书目录,不需要查询整本书内容就可以找到

想要数据。索引可以是唯一,创立索引容许指定单个列或者是各种列。缺陷是它减慢了数据录入速度,同步也增长了数据库尺寸大小。 3。什么是内存泄漏? 答:普通咱们所说内存泄漏指是堆内存泄漏。堆内存是程序从堆中为其分派,大小任意,使用完后要显示释放内存。当应用程序用核心字new 等创立对象时,就从堆中为它分派一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,咱们就说该内存被泄漏了。 4。维护数据库完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么? 答:我是这样做,尽量使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最以便。另一方面是使用触发器,这种办法可以保证,无论什么业务系统访问数据库都可以保证数据完整新和一致性。最后考虑是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。 5。什么是事务?什么是锁?

sql server常见面试题

sql server常见面试题 以下是一些常见的SQL Server 面试题及其答案: 1. 什么是SQL Server? SQL Server 是由Microsoft 开发的关系型数据库管理系统(RDBMS)。它是一个功能强大、可靠性高的数据库平台,广泛用于企业级应用和数据管理。 2. 什么是数据库? 数据库是一个组织结构化的数据集合,可以通过数据库管理系统(DBMS)进行访问、管理和操作。它提供了一种存储、检索和处理数据的方式。 3. 什么是表? 表是数据库中的基本组成单元,用于存储数据。它由列(字段)和行组成,每个列定义了数据类型和约束规则,每一行表示一个记录。 4. 什么是主键? 主键是表中唯一标识每个记录的列或列组合。它用于确保数据的唯一性和完整性,并且在建立关系时起到重要作用。 5. 什么是外键? 外键是表中与其他表的关联字段,它建立了表之间的关系。外键约束用于确保引用表中的数据完整性,并支持表之间的数据关联。 6. 什么是索引? 索引是一种数据结构,用于快速定位和访问数据库中的数据。它可以加快查询的速度,但会增加写操作的开销。常见的索引类型包括聚集索引、非聚集索引和全文索引。 7. 什么是事务? 事务是数据库操作的基本单位,它是由一个或多个数据库操作组成的逻辑工作单元。事务要么

完全执行,要么完全回滚,以确保数据的一致性和完整性。 8. 什么是视图? 视图是从一个或多个表中派生的虚拟表。它是一个预定义的查询,可以像操作表一样使用。视图提供了数据的安全性、简化了复杂的查询和隐藏了底层数据结构的能力。 9. 什么是存储过程? 存储过程是一组预编译的SQL 语句,以及可选的流程控制语句,用于执行特定任务。它们被保存在数据库中,并可以通过名称调用和执行,提供了代码重用和性能优化的好处。 10. 什么是触发器? 触发器是与表相关联的特殊类型的存储过程。它们在插入、更新或删除表中的数据时自动触发,并允许执行其他的业务逻辑或数据操作。 这些问题涵盖了SQL Server 中的一些基本概念和功能。当然,在面试中可能还会涉及更深入的问题,具体取决于面试官的要求和职位的要求。希望这些回答能帮到你!

2022年度数据库最常用的语言SQL面试题汇总和答案

2022年度数据库最常用的语言SQL面试题汇总和答案 1、SQL是什么? SQL 代表结构化查询语言。它是用于维护关系数据库并对数据执行许多不同的数据操作操作的标准语言。SQL 最初发明于1970 年。它是一种用于数据库创建、删除、获取和修改行等的数据库语言。有时,它的发音为“sequel”。我们还可以使用它来处理由实体(变量)和数据的不同实体之间的关系组成的有组织的数据。 2、SQL是什么时候出现的? SQL 于1974 年首次出现。它是维护关系数据库最常用的语言之一。1986年,SQL成为1987年美国国家标准协会(ANSI)和ISO(国际标准化组织)的标准。 3、SQL的用途是什么? SQL 负责维护数据库中存在的关系数据和数据结构。下面给出了一些常见的用法:对数据库执行查询;从数据库中检索数据;在数据库中插入记录;更新数据库中的记录;从数据库中删除记录;创建新数据库;在数据库中创建新表;在数据库中创建视图;对数据库执行复杂的操作; 4、SQL 是否支持编程语言功能? SQL 指的是标准查询语言。因此,SQL 确实是一种语言,但实际上并不支持编程语言。它是一种没有循环、条件语句和逻辑运算的通用语言。它不能用于数据操作以外的任何事情。它是一种执行数据库操作的命令语言。SQL 的主要目的是检索、操作、更新、删除和执行复杂的操作,例如对数据库中存在的数据进行连接。 5、SQL 的子集是什么? 以下是SQL 的四个重要子集:数据定义语言(DDL):它定义了由CREATE、ALTER、DROP 等命令组成的数据结构。数据操作语言(DML):用于操作数据库中的现有数据。此类别中的命令是:SELECT、UPDATE、INSERT 等。数据控制语言(DCL):它控制对存储在数据库中的数据的访问。此类别中的命令包括GRANT 和REVOKE。事务控制语言(TCL):用于处理数据库中的事务操作。 6、DDL 语言的目的是什么? DDL代表数据定义语言。它是数据库的子集,在创建数据库时定义了数据库的数据结构。例如,我们可以使用DDL 命令来添加、删除或修改表。它由以下命令组成:CREATE、ALTER 和DELETE 数据库对象,例如模式、表、索引、视图、序列等。

SQL面试题目及答案java面试题

SQL面试题目及答案java面试题 学生成绩表(stuscore): 姓名:name 课程:subject 分数:score 学号:stuid 张三数学 89 1 张三语文 80 1 张三英语 70 1 李四数学 90 2 李四语文 70 2 李四英语 80 2 1.计算每个人的总成绩并排名(要求显示字段:姓名,总成绩) 答案:select name,sum(score) as allscore from stuscore group by name order by allscore 2.计算每个人的总成绩并排名(要求显示字段: 学号,姓名,总成绩) 答案:select distinct https://www.360docs.net/doc/c219042742.html,,t1.stuid,t2.allscore from stuscore t1,( select stuid,sum(score) as allscore from stuscore group by stuid)t2where t1.stuid=t2.stuidorder by t2.allscore desc 3.计算每个人单科的最高成绩(要求显示字段: 学号,姓名,课程,最高成绩) 答案:select t1.stuid,https://www.360docs.net/doc/c219042742.html,,t1.subject,t1.score from stuscore t1,(select stuid,max(score) as maxscore from stuscore group by stuid) t2where t1.stuid=t2.stuid and t1.score=t2.maxscore 4.计算每个人的平均成绩(要求显示字段: 学号,姓名,平均成绩) 答案:select distinct t1.stuid,https://www.360docs.net/doc/c219042742.html,,t2.avgscore from stuscore t1,(select stuid,avg(score) as avgscore from stuscore group by stuid) t2where t1.stuid=t2.stuid 5.列出各门课程成绩最好的学生(要求显示字段: 学号,姓名,科目,成绩)

相关主题
相关文档
最新文档