SQL Server常见面试题

0    414    2

Tags:

👉 本文共约26181个字,系统预计阅读时间或需99分钟。

SQL Server数据库也是一种比较重要的数据库,在面试笔试中也会经常涉及到,因此,有必要对这种数据库有一些基本的了解。SQL Server部分内容较少,也比MySQL和Oracle简单,最核心的内容还是公共部分的SQL查询,应该以此为重点。

SqlServer2012系统数据类型有哪些?

数据类型符号标识
数据类型bigint、int、smallint、tinyint
整数型精确数值型decimal、numeric
浮点型float、real
货币型money、smallmoney
位型bit
字符型char、varchar、varchar(MAX)
Unicode字符型nchar、nvarchar、nvarchar(MAX)
文本型text、ntext
日期时间类型datetime、smalldatetime、date、time、datetime2、datetimeoffset
时间截型timestamp
图像型image
其他cursor、sql_variant、table、uniqueidentifier、xml、hierarchyi

WHERE子句与HAVING子句有何不同?

Where是一个约束声明,是在查询结果集返回之前约束来自数据库的数据,且Where中不能使用聚合函数。
Having是一个过滤声明,是在查询结果集返回以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。

试说明游标的种类和用途。

种类:前端(客户端)游标、后端(服务器端)游标
用途:游标提供了对一个结果集进行逐行处理的能力,游标可看做一种特殊的指针,它与某个查询结果相联系,可以指向结果集的任意位置,以便对指定位置的数据进行处理。

举例说明游标的使用方法和步骤。

  • 声明游标
  • 打开游标
  • 读取数据
  • 关闭游标
  • 删除游标

在sqlserver2000中请用sql创建一张用户临时表和系统临时表,里面包含两个字段ID和IDValues,类型都是int型,并解释下两者的区别?

用户临时表:create table #xx(ID int, IDValues int)
系统临时表:create table ##xx(ID int, IDValues int)

区别:
用户临时表只对创建这个表的用户的Session可见,对其他进程是不可见的.
当创建它的进程消失时这个临时表就自动删除.

全局临时表对整个SQL Server实例都可见,但是所有访问它的Session都消失的时候,它也自动删除.

sqlserver2000是一种大型数据库,他的存储容量只受存储介质的限制,请问它是通过什么方式实现这种无限容量机制的。

它的所有数据都存储在数据文件中(*.dbf),所以只要文件够大,SQL Server的存储容量是可以扩大的.

SQL Server 2000 数据库有三种类型的文件:

主要数据文件
主要数据文件是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。主要数据文件的推荐文件扩展名是 .mdf。

次要数据文件
次要数据文件包含除主要数据文件外的所有数据文件。有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf。

日志文件
日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但可以不止一个。日志文件的推荐文件扩展名是 .ldf。

SQL Server简答题

真题1、请写出四条最基本SQL语句。

答案:SELECT * FROM 表名;

INSERT INTO表名(字段,字段,…);

UPDATE表名SET (字段=值,字段=值,…) WHERE (条件);

DELETE FROM 表名 WHERE (条件);

真题2、学生信息管理系统中有张表STUDENT,其中,有字段ID、NAME、SEX、BIRTH,请回答如下问题:

(1)找出NAME相同的学生(用一句SQL语句)。

(2)用一句SQL语句把学生SEX为男的改为女,女的改为男。

答案:(1)SELECT * FROM STUDENT WHERE NAME IN (SELECT NAME FROM STUDENT GROUP BY NAME HAVING COUNT(NAME)>1);

(2)UPDATE STUDENT SET SEX = CASE SEX WHEN '男' THEN '女' ELSE '男' END;

真题3、SQL Server、Access、Oracle三种数据库之间的区别是什么?

答案:Access是一种桌面数据库,只适合于数据量少的应用系统,在处理少量数据和单机访问的数据时是很好的,效率也很高。但是Access数据库有一定的极限,如果数据达到100M左右,那么很容易造成Access假死,或者消耗掉服务器的内存导致服务器崩溃。

SQL Server是基于服务器端的中型的数据库,可以适合大容量数据的应用。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。因为现在数据库都使用标准的SQL语言对数据库进行管理,所以,如果是标准SQL语言,那么两者基本上都可以通用的。SQL Server还有更多的扩展,可以用存储过程、函数等。

Oracle是基于服务器的大型数据库,主要应用于银行、证券类业务等。

真题4、SQL Server的两种存储结构是什么?

答案:SQL Server的两种存储结构是页与区间。

(1)页:用于数据存储的连续的磁盘空间块,SQL Server中数据存储的基本单位是页,磁盘I/O操作在页级执行,页的大小为8KB,每页的开头是96字节的页头,用于存储有关页的系统信息,包括页码、页类型、页的可用空间以及拥有该页的对象的分配单元ID。

(2)区间:区是管理空间的基本单位,一个区是8个物理上连续的页(即64KB)的集合,所有页都存储在区中。SQL Server有两种类型的区:统一区和混合区。

l 统一区:由单个对象所有,区中的所有8页只能由一个对象使用。

l 混合区:最多可由8个对象共享。区中8页中的每页可以由不同对象所有,但是一页总是只能属于一个对象。

\&*** *说明:****

有关SQL Server页和区间的更多内容可以参考我的博客:http://blog.itpub.net/26736162/viewspace-2142922/

真题5、描述下ASP.NET中使用DataReader对象和DataSet对象的区别?

答案:ASP.NET是一个统一的Web开发模型,它包括使用尽可能少的代码生成企业级Web应用程序所必需的各种服务。ASP.NET作为.NET Framework的一部分提供。当编写ASP.NET应用程序的代码时,可以访问.NET Framework中的类。可以使用与公共语言运行库(CLR)兼容的任何语言来编写应用程序的代码,这些语言包括Microsoft Visual Basic、C#、JScript.NET和J#。使用这些语言,可以开发利用公共语言运行库、类型安全、继承等方面的优点的ASP.NET应用程序。

DataReader对象是只向前的连接数据读取器,使用它可以快速有效地访问数据。DataSet对象提供一个内存中数据的关系表示形式,一整套包括一些表在内的数据(这些表包含数据、对数据进行排序并约束数据),以及表之间的关系.DataReader对象会使得SQL Server的连接处于忙碌桩,以便只有在关闭DataReader之后才可以在这个连接上执行其他操作。DataSet对象可以看作是DATATABLE对象的容器,可以在数据库操作时将多个表的所有数据都放在DataSet中,用在单独一次调用中将其返回,避免了重复调用的过程。DataSet对象的调用将在内存开辟一个虚拟的表,因此将占有相当的内存空间。

真题6、SQL Server如何查询阻塞?

答案:SQL Server的阻塞查询主要来自sys.sysprocesses。通常在处理时需要加入其它相关的视图或表,例如如sys.dm_exec_connections,sys.dm_exec_sql_text。通过如下几个语句的查询,可以找到阻塞的语句。

SELECT BL.SPID BLOCKING_SESSION,

​ BL.BLOCKED BLOCKED_SESSION,

​ ST.TEXT BLOCKEDTEXT

FROM (SELECT SPID, BLOCKED

​ FROM SYS.SYSPROCESSES A

​ WHERE BLOCKED > 0

​ AND NOT EXISTS (SELECT 1

​ FROM SYS.SYSPROCESSES B

​ WHERE BLOCKED > 0

​ AND A.BLOCKED = B.SPID)

​ UNION

​ SELECT SPID, BLOCKED

​ FROM SYS.SYSPROCESSES

​ WHERE BLOCKED > 0) BL,

​ (SELECT T.TEXT, C.SESSION_ID

​ FROM SYS.DM_EXEC_CONNECTIONS C

​ CROSS APPLY SYS.DM_EXEC_SQL_TEXT(C.MOST_RECENT_SQL_HANDLE) T) ST

WHERE BL.BLOCKED = ST.SESSION_ID;

或:

SELECT A.BLOCKING_SESSION_ID, A.WAIT_DURATION_MS, A.SESSION_ID, B.TEXT

FROM SYS.DM_OS_WAITING_TASKS A,

​ (SELECT T.TEXT, C.SESSION_ID

​ FROM SYS.DM_EXEC_CONNECTIONS C

​ CROSS APPLY SYS.DM_EXEC_SQL_TEXT(C.MOST_RECENT_SQL_HANDLE) T) B

WHERE A.SESSION_ID = B.SESSION_ID

AND A.BLOCKING_SESSION_ID IS NOT NULL;

包含阻塞与被阻塞的SQL脚本:

SELECT BL.SPID BLOCKING_SESSION,

​ BL.BLOCKED BLOCKED_SESSION,

​ ST.TEXT BLOCKEDTEXT,

​ SB.TEXT BLOCKINGTEXT

FROM (SELECT SPID, BLOCKED

​ FROM SYS.SYSPROCESSES A

​ WHERE BLOCKED > 0

​ AND NOT EXISTS (SELECT 1

​ FROM SYS.SYSPROCESSES B

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
SQL Server常见面试题后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部