Sql server面试题1
- 格式:doc
- 大小:87.00 KB
- 文档页数:28
SqlServer面试题及答案1.磁盘柜上有14块73G的磁盘,数据库为200G 大小包括日志文件,如何设置磁盘(要说明这14磁盘是怎么用的)?2.有两服务器群集,分别为node1和node2 现在要打win200系统补丁,打完后,要重新启动,如何打补丁,不能影响用户使用(要用群集的术语详细说明)。
3.有一个A 数据库,分别复制到B和C B 要求每次数据更新也同时更新,C 每天更新一次就行,如何制定复制策略!4.有一个order 表,有90个字段,20个索引,15个复合索引,其中有3个索引字段超过10个,如何进行优化5.有一个数据库200G大小,每天增加50M 允许用户随时访问,制定备份策略(详细说明)。
参考答案:1.磁盘柜上有14块73G的磁盘,数据库为200G 大小包括日志文件,如何设置磁盘(要说明这14磁盘是怎么用的)?这个问题应该是考察硬件知识和数据库物理部署。
首先需要知道这些磁盘是否要用于存放数据库备份文件和数据库性能(读/写)要求。
来决定raid的级别。
1)、如果偏重于性能考虑,而且不用存放数据库备份文件的话,考虑使用raid0 1,这样可使用的磁盘容量为:14*73*50%=511G。
2)、如果读/写性能要求不高,而且还比较抠门的话,可以考虑raid5,这样可使用的磁盘容量为:13*73=949G。
至于如何使用应该是说数据库物理文件的部署。
注意说出将tempdb,data file,log file分开存放以减少I/O竞争即可。
其实现在的条带化磁盘一般都会自动将文件分存,人为的分布已经越来越不重要了。
2.有两服务器群集,分别为node1和node2 现在要打win200系统补丁,打完后,要重新启动,如何打补丁,不能影响用户使用(要用群集的术语详细说明)。
这个具体操作有点忘了。
大致是:首先看哪个节点正在使用,通过节点IP(私有)访问另一个空闲节点,为其打上补丁,然后在群集管理器中停止该节点(也可以用命令行方式),重新启动。
sqlserver面试题SQL Server面试题一、什么是SQL Server?SQL Server是一种关系型数据库管理系统(RDBMS),由微软公司开发和发布。
它是一个全面的数据库服务器,用于管理和存储大量的数据。
SQL Server支持结构化查询语言(SQL),以及存储过程、触发器和其他数据库操作。
二、SQL Server的主要功能有哪些?1. 数据管理:SQL Server可以用于创建、修改和删除数据库、表、视图和索引等对象,以及导入、导出和修改数据。
2. 数据安全:SQL Server提供了丰富的安全功能,包括用户身份验证、权限控制和数据加密等,以确保数据的机密性和完整性。
3. 数据备份和恢复:SQL Server支持数据库的备份和恢复操作,以防止数据丢失和错误。
4. 数据复制和同步:SQL Server可以通过复制和同步机制将数据复制到不同的数据库服务器,以实现高可用性和负载均衡。
5. 数据分析和报表:SQL Server支持数据分析和报表生成,以便用户可以从数据库中提取有用的信息和洞察力。
6. 性能优化:SQL Server提供了各种性能优化工具和技术,以确保数据库的高性能和响应能力。
三、请解释SQL Server中的主键和外键的作用。
主键是用于唯一标识数据库表中每条记录的一列或一组列。
它的作用是保证表中的每个记录都具有唯一的标识符,以方便数据的检索和修改。
主键还可以用于建立表与其他表之间的关系。
外键则用于建立表与其他表之间的关联关系。
外键是指表中的一列或一组列,它引用了另一张表的主键。
外键的作用是维护数据的完整性和一致性,通过约束来确保外键引用的数据必须存在于关联表中。
这样可以防止无效的数据插入或更新操作。
四、SQL Server中的事务是什么?请解释ACID属性。
事务是SQL Server中一系列数据库操作的逻辑单元,它要么全部执行成功,要么全部回滚到初始状态。
事务可以保证数据的一致性和完整性。
1.用一条SQL语句查询出每门课都大于80分的学生姓名name kecheng fenshu张三语文81张三数学75李四语文76李四数学90王五语文81王五数学100王五英语90A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)2.学生表如下:自动编号学号姓名课程编号课程名称分数1 2005001 张三0001 数学692 2005002 李四0001 数学893 2005001 张三0001 数学69删除除了自动编号不同,其他都相同的学生冗余信息A: delete tablename where 自动编号not in(select min(自动编号) from tablename group by 学号,姓名,课程编号,课程名称,分数)一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合.你先按你自己的想法做一下,看结果有我的这个简单吗?答:select , from team a, team bwhere < 请用SQL语句实现:从TestDB数据表中查询出所有月份的发生额都比101科目相应月份的发生额高的科目。
请注意:TestDB中有很多科目,都有1-12月份的发生额。
AccID:科目代码,Occmonth:发生额月份,DebitOccur:发生额。
数据库名:JcyAudit,数据集:Select * from TestDB答:select a.*from TestDB a,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) bwhere a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur************************************************************************************面试题:怎么把这样一个表儿year month amount1991 1 1.11991 2 1.21991 3 1.31991 4 1.41992 1 2.11992 2 2.21992 3 2.31992 4 2.4查成这样一个结果year m1 m2 m3 m41991 1.1 1.2 1.3 1.41992 2.1 2.2 2.3 2.4答案一、select year,(select amount from aaa m where month=1 and m.year=aaa.year) as m1,(select amount from aaa m where month=2 and m.year=aaa.year) as m2,(select amount from aaa m where month=3 and m.year=aaa.year) as m3,(select amount from aaa m where month=4 and m.year=aaa.year) as m4from aaa group by year这个是ORACLE 中做的:select * from (select name, year b1, lead(year) over(partition by name order by year) b2, lead(m,2) over(partition by name order by year)b3,rank()over(partition by name order by year) rk from t) where rk=1;************************************************************************************精妙的SQL语句!精妙SQL语句作者:不详发文时间:2003.05.29 10:55:05说明:复制表(只复制结构,源表名:a 新表名:b)SQL: select * into b from a where 1<>1说明:拷贝表(拷贝数据,源表名:a 目标表名:b)SQL: insert into b(a, b, c) select d,e,f from b;说明:显示文章、提交人和最后回复时间SQL: select a.title,ername,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b说明:外连接查询(表名1:a 表名2:b)SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c说明:日程安排提前五分钟提醒SQL: select * from 日程安排where datediff('minute',f开始时间,getdate())>5说明:两张关联表,删除主表中已经在副表中没有的信息SQL:delete from info where not exists ( select * from infobz where info.infid=infobz.infid )说明:--SQL:SELECT A.NUM, , B.UPD_DATE, B.PREV_UPD_DATEFROM TABLE1,(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATEFROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHANDFROM TABLE2WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,(SELECT NUM, UPD_DATE, STOCK_ONHANDFROM TABLE2WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') ¦¦ '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y,WHERE X.NUM = Y.NUM (+)AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) BWHERE A.NUM = B.NUM说明:--SQL:select * from studentinfo where not exists(select * from student wherestudentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源地,高考总成绩说明:从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)SQL:SELECT erper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DECFROM (SELECT erper, a.tel, a.standfee, b.telfeedate, b.factrationFROM TELFEESTAND a, TELFEE bWHERE a.tel = b.telfax) aGROUP BY erper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')说明:四表联查问题:SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....说明:得到表中最小的未使用的ID号SQL:SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleIDFROM HandleWHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)*******************************************************************************有两个表A和B,均有key和value两个字段,如果B的key在A中也有,就把B的value 换为A中对应的value这道题的SQL语句怎么写?update b set b.value=(select a.value from a where a.key=b.key) where b.id in(select b.id from b,a where b.key=a.key);***************************************************************************高级sql面试题原表:courseid coursename score-------------------------------------1 java 702 oracle 903 xml 404 jsp 305 servlet 80-------------------------------------为了便于阅读,查询此表后的结果显式如下(及格分数为60):courseid coursename score mark---------------------------------------------------1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass---------------------------------------------------写出此查询语句没有装ORACLE,没试过select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course完全正确SQL> desc course_vName Null? Type----------------------------------------- -------- ----------------------------COURSEID NUMBERCOURSENAME VARCHAR2(10)SCORE NUMBERSQL> select * from course_v;COURSEID COURSENAME SCORE---------- ---------- ----------1 java 702 oracle 903 xml 404 jsp 305 servlet 80SQL> select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course_v;COURSEID COURSENAME SCORE MARK---------- ---------- ---------- ----1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass*******************************************************************************原表:id proid proname1 1 M1 2 F2 1 N2 2 G3 1 B3 2 A查询后的表:id pro1 pro21 M F2 N G3 B A写出查询语句解决方案sql求解表a列a1 a2记录1 a1 b2 x2 y2 z用select能选成以下结果吗?1 ab2 xyz使用pl/sql代码实现,但要求你组合后的长度不能超出oracle varchar2长度的限制。
选择题:1、在“连接”组中有两种连接认证方式,其中在(_ B _)方式下,需要客户端应用程序连接时提供登录时需要的用户标识和密码。
A、Windows身份验证B、SQL Server身份验证C、以超级用户身份登录时D、其他方式登录时2、表在数据库中是一个非常重要的数据对象,它是用来(1_ C __)各种数据内容的,数据库创建后就可以创建表了,创建表可以用(2_ D__)等方法来创建。
⑴A、显示B、查询C、存放D、检索⑵A、企业管理器B、查询分析器C、OSQLD、企业管理器和CREATE TABLE语句3、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但至少包括的部分(1_B_),使用关键字(2_A_)可以把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(3__B_),如果在SELECT语句中使用集合函数时,一定在后面使用(4_A__)。
⑴A、SELECT,INTO B、SELECT,FROMC、SELECT,GROUPD、仅SELECT⑵A、DISTINCT B、UNIONC、ALL C、TOP⑶A、JOIN B、UNIONC、INTO C、LIKE⑷A、GROUP BY B、COMPUTE BYC、HAVINGD、COMPUTE4、在SQL SERVER服务器上,存储过程是一组预先定义并(1_B__)的Transact -SQL语句。
可以用(2__D_)来声明游标。
⑴A、保存B、编译C、解释D、编写⑵A、CREATE CURSOR B、ALTER CURSORC、SET CURSORD、DECLARE CURSOR简答题:1、自定义函数的类型?各自原返回值。
①标量函数返回值:单个数据值②内嵌表值函数返回值:table,③多语句表值函数返回值:table2、用户权限的种类有哪些?各自的作用?①对象权限作用:决定用户对数据库对象所执行的操作,包括用户对数据库中的表、视图、列或存储过程等对象的操作权限②语句权限作用:决定用户能否操作数据库和创建数据库对象③隐含权限作用:控制那些只能由预定义系统角色的成员或数据库对象所有者执行的活动。
sqlserver高级面试题SQL Server高级面试题1. 介绍SQL Server的架构和主要组件SQL Server是由微软开发的关系型数据库管理系统。
它的架构分为三个主要的组件:- 数据引擎:负责数据的存储、处理和查询。
它包含了查询处理器、事务管理器、存储引擎等模块。
- Analysis Services:提供了数据仓库和在线分析处理(OLAP)功能,用于数据分析和决策支持。
- Integration Services:用于数据抽取、转换和加载(ETL),支持数据仓库的构建和更新。
2. 请解释SQL Server中的索引和它的类型。
索引是用于提高查询性能的数据结构,它可以加快数据的检索速度。
SQL Server中的索引类型包括:- 聚集索引(Clustered Index):决定了数据行在表中物理上的存储顺序,一个表只能有一个聚集索引。
- 非聚集索引(Non-Clustered Index):创建在表的列上,它包含以下两种信息:索引键的值和指向该键所在行的指针。
- 唯一索引(Unique Index):与非聚集索引类似,但是要求索引的键值必须唯一。
- 全文索引(Full-Text Index):用于进行全文本搜索,可以对文本内容进行高效的关键字搜索。
3. 请列举一些提高SQL Server查询性能的方法。
- 创建合适的索引:通过分析查询语句中的WHERE和JOIN条件来确定需要创建的索引,以提高查询的速度。
- 避免使用SELECT *:只查询所需的列,减少不必要的数据传输和处理。
- 使用适当的数据类型:选择最合适的数据类型来存储数据,可以减少空间占用和提高查询速度。
- 数据库规范化:将数据分解为更小的表,以减少数据冗余和提高查询性能。
- 定期维护数据库:进行索引重建、统计信息更新、日志清理等操作,以保持数据库的优化状态。
4. 请解释SQL Server中的事务以及ACID属性。
事务是一组逻辑操作,这些操作要么全部成功执行,要么全部回滚。
Sqlserver基本⾯试题⼀单词解释(2分/个) 34分Data 数据 Database 数据库 RDBMS 关系数据库管理系统 GRANT 授权REVOKE 取消权限 DENY 拒绝权限 DECLARE 定义变量 PROCEDURE存储过程事务 Transaction 触发器 TRIGGER 继续 continue 唯⼀ unqiue主键 primary key 标识列 identity 外键 foreign key 检查 check约束 constraint⼆编写SQL语句(5分/题) 50分(包含笔试题问题和解答答案)1) 创建⼀张学⽣表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话Create table stu (学号 int ,姓名 varchar(8),年龄 int,性别 varchar(4),家庭地址 varchar(50),联系电话 int);2) 修改学⽣表的结构,添加⼀列信息,学历Alter table stu add 学历 varchar(6);3) 修改学⽣表的结构,删除⼀列信息,家庭住址Alter table stu drop column 家庭地址4) 向学⽣表添加如下信息:学号姓名年龄性别联系电话学历1A22男123456⼩学2B21男119中学3C23男110⾼中4D18⼥114⼤学Insert into stu values(1,’A’,22,’男’,123456,’⼩学’)Insert into stu values(2,’B’,21,’男’,119,’中学’)Insert into stu values(3,’C’,23,’男’,110,’⾼中’)Insert into stu values(4,’D’,18,’⼥’,114,’⼤学’)5) 修改学⽣表的数据,将电话号码以11开头的学员的学历改为“⼤专”Update stu set 学历=’⼤专’ where 联系电话 like ‘11%’6) 删除学⽣表的数据,姓名以C开头,性别为‘男’的记录删除Delect from stu where 性别=’男’ and 姓名 like ‘c%’7) 查询学⽣表的数据,将所有年龄⼩于22岁的,学历为“⼤专”的,学⽣的姓名和学号⽰出来Select 姓名,学号 from stu where 年龄<22 and 学历=’⼤专’8) 查询学⽣表的数据,查询所有信息,列出前25%的记录Select top 25 percent * from stu9) 查询出所有学⽣的姓名,性别,年龄降序排列Select 姓名,性别 from stu order by 年龄 desc10) 按照性别分组查询所有的平均年龄Select avg(年龄) from stu group by 性别三填空(3分/题) 36分(包含笔试题问题和解答答案)1) 索引分为__聚集索引___和__⾮聚集索引__在⼀张表上最多可以创建1个聚集索引_索引。
题目1:为管理岗位业务培训信息,建立3个表S (SNO,SNAME,SDD,SAGE) SNO,SNAME,SDD,SAGE 分别代表学号、学员姓名、所属单位、学员年龄C (CNO,CNAME ) CNO,CNAME 分别代表课程编号、课程名称SC(SNO,CNO,SCORE ) SNO,CNO,SCORE 分别代表学号、所选修的课程编号、学习成绩1. 使用标准SQL嵌套语句查询选修课程名称为…税收基础‟的学员学号和姓名SELECT SNO,SDD FROM SWHERE SNO IN(SELECT SNO FROM C,SC WHERE O=O AND CNAME='税收基础');2. 使用标准SQL嵌套语句查询选修课程编号为…C2‟的学员姓名和所属单位SELECT S.SNO,S.SDD FROM S,SC WHERE S.NOSNO=SC.SNO AND O='C2';3. 使用标准SQL嵌套语句查询不选修课程编号为…C5‟的学员姓名和所属单位SELECT SNO,SDD FROM S WHERE SNO NOT IN(SELECT SNO FROM SC WHERE CNO='C5') ;4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位SELECT SNO,SDD FROM SWHERE SNO IN(SELECT SNO FROM SCRIGHT JOIN CON O=OGROUP BY SNOHAVING COUNT(*)=COUNT(SNO));5. 查询选修了课程的学员人数SELECT 学员人数=COUNT(DISTINCT SNO) FROM SC;6. 查询选修课程超过5门的学员学号和所属单位SELECT SN,SD FROM SWHERE SNO IN(SELECT SNO FROM SCGROUP BY SNOHAVING COUNT(DISTINCT CNO)>5) ;题目2:已知关系模式S (SNO,SNAME) 学生关系。
sql server基础面试题SQL Server是微软开发的关系型数据库管理系统,以下是一些SQL Server 的基础面试题:1. 什么是SQL Server,它与数据库的关系是什么?2. 在SQL Server中,如何创建一个新的数据库?3. 描述一下SQL Server的存储过程是什么,以及它的用途是什么?4. 在SQL Server中,触发器的作用是什么?5. 什么是索引,它在SQL Server中有什么作用?6. 解释一下SQL Server中的事务处理,以及如何使用BEGIN TRANSACTION、COMMIT和ROLLBACK语句?7. 如何优化SQL Server查询性能?8. 如何在SQL Server中设置和使用视图?9. 如何备份和恢复SQL Server数据库?10. 解释一下SQL Server中的游标是什么,以及何时应该使用游标?11. 如何使用SQL Server中的存储过程和函数来处理日期和时间?12. 描述一下SQL Server中的数据完整性概念,以及如何实现它?13. 如何使用SQL Server中的系统函数和系统存储过程?14. 解释一下SQL Server中的复制和发布功能,以及它们的应用场景?15. 如何管理和维护SQL Server数据库?16. 描述一下SQL Server中的系统表和动态管理视图(DMVs),以及它们的作用是什么?17. 如何使用SQL Server中的分区表和索引?18. 解释一下SQL Server中的全文搜索功能,以及如何使用它进行文本搜索?19. 如何使用SQL Server中的报表服务来生成报表?20. 描述一下SQL Server中的CLR集成,以及如何使用它来编写和执行CLR存储过程和函数?。
SqlServer面试题及答案1.磁盘柜上有14块73G的磁盘,数据库为200G 大小包括日志文件,如何设置磁盘(要说明这14磁盘是怎么用的)?2.有两服务器群集,分别为node1和node2 现在要打win200系统补丁,打完后,要重新启动,如何打补丁,不能影响用户使用(要用群集的术语详细说明)。
3.有一个A 数据库,分别复制到B和C B 要求每次数据更新也同时更新,C 每天更新一次就行,如何制定复制策略!4.有一个order 表,有90个字段,20个索引,15个复合索引,其中有3个索引字段超过10个,如何进行优化5.有一个数据库200G大小,每天增加50M 允许用户随时访问,制定备份策略(详细说明)。
参考答案:1.磁盘柜上有14块73G的磁盘,数据库为200G 大小包括日志文件,如何设置磁盘(要说明这14磁盘是怎么用的)?这个问题应该是考察硬件知识和数据库物理部署。
首先需要知道这些磁盘是否要用于存放数据库备份文件和数据库性能(读/写)要求。
来决定raid的级别。
1)、如果偏重于性能考虑,而且不用存放数据库备份文件的话,考虑使用raid0 1,这样可使用的磁盘容量为:14*73*50%=511G。
2)、如果读/写性能要求不高,而且还比较抠门的话,可以考虑raid5,这样可使用的磁盘容量为:13*73=949G。
至于如何使用应该是说数据库物理文件的部署。
注意说出将tempdb,data file,log file分开存放以减少I/O竞争即可。
其实现在的条带化磁盘一般都会自动将文件分存,人为的分布已经越来越不重要了。
2.有两服务器群集,分别为node1和node2 现在要打win200系统补丁,打完后,要重新启动,如何打补丁,不能影响用户使用(要用群集的术语详细说明)。
这个具体操作有点忘了。
大致是:首先看哪个节点正在使用,通过节点IP(私有)访问另一个空闲节点,为其打上补丁,然后在群集管理器中停止该节点(也可以用命令行方式),重新启动。
SQLSERVER数据库⾯试题1.⽤⼀条SQL语句查询出每门课都⼤于80分的学⽣姓名name kecheng fenshu张三语⽂ 81张三数学 75李四语⽂ 76李四数学 90王五语⽂ 81王五数学 100王五英语 90A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)2.学⽣表如下:⾃动编号学号姓名课程编号课程名称分数1 2005001 张三 0001 数学 692 2005002 李四 0001 数学 893 2005001 张三 0001 数学 69删除除了⾃动编号不同,其他都相同的学⽣冗余信息A: delete tablename where ⾃动编号 not in(select min(⾃动编号) from tablename group by 学号,姓名,课程编号,课程名称,分数)⼀个叫department的表,⾥⾯只有⼀个字段name,⼀共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进⾏⽐赛,⽤⼀条sql语句显⽰所有可能的⽐赛组合.你先按你⾃⼰的想法做⼀下,看结果有我的这个简单吗?答:select , from team a, team bwhere < 请⽤SQL语句实现:从TestDB数据表中查询出所有⽉份的发⽣额都⽐101科⽬相应⽉份的发⽣额⾼的科⽬。
请注意:TestDB中有很多科⽬,都有1-12⽉份的发⽣额。
AccID:科⽬代码,Occmonth:发⽣额⽉份,DebitOccur:发⽣额。
数据库名:JcyAudit,数据集:Select * from TestDB答:select a.*from TestDB a,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur************************************************************************************⾯试题:怎么把这样⼀个表⼉year month amount1991 1 1.11991 2 1.21991 3 1.31991 4 1.41992 1 2.11992 2 2.21992 3 2.31992 4 2.4查成这样⼀个结果year m1 m2 m3 m41991 1.1 1.2 1.3 1.41992 2.1 2.2 2.3 2.4答案⼀、select year,(select amount from aaa m where month=1 and m.year=aaa.year) as m1,(select amount from aaa m where month=2 and m.year=aaa.year) as m2,(select amount from aaa m where month=3 and m.year=aaa.year) as m3,(select amount from aaa m where month=4 and m.year=aaa.year) as m4from aaa group by year这个是ORACLE 中做的:select * from (select name, year b1, lead(year) over(partition by name order by year) b2, lead(m,2) over(partition by name order by year) b3,rank()over( partition by name order by year) rk from t) where rk=1;************************************************************************************精妙的SQL语句!精妙SQL语句作者:不详发⽂时间:2003.05.29 10:55:05说明:复制表(只复制结构,源表名:a 新表名:b)SQL: select * into b from a where 1<>1说明:拷贝表(拷贝数据,源表名:a ⽬标表名:b)SQL: insert into b(a, b, c) select d,e,f from b;说明:显⽰⽂章、提交⼈和最后回复时间SQL: select a.title,ername,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b说明:外连接查询(表名1:a 表名2:b)SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c说明:⽇程安排提前五分钟提醒SQL: select * from ⽇程安排 where datediff('minute',f开始时间,getdate())>5说明:两张关联表,删除主表中已经在副表中没有的信息SQL:delete from info where not exists ( select * from infobz where info.infid=infobz.infid )说明:--SQL:SELECT A.NUM, , B.UPD_DATE, B.PREV_UPD_DATEFROM TABLE1,(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATEFROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHANDFROM TABLE2WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X, (SELECT NUM, UPD_DATE, STOCK_ONHANDFROM TABLE2WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') ¦¦ '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y, WHERE X.NUM = Y.NUM (+)AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) BWHERE A.NUM = B.NUM说明:--SQL:select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,⽣源地,⾼考总成绩说明:从数据库中去⼀年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)SQL:SELECT erper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DECFROM (SELECT erper, a.tel, a.standfee, b.telfeedate, b.factrationFROM TELFEESTAND a, TELFEE bWHERE a.tel = b.telfax) aGROUP BY erper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')说明:四表联查问题:SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....说明:得到表中最⼩的未使⽤的ID号SQL:SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleIDFROM HandleWHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)*******************************************************************************有两个表A和B,均有key和value两个字段,如果B的key在A中也有,就把B的value换为A中对应的value这道题的SQL语句怎么写?update b set b.value=(select a.value from a where a.key=b.key) where b.id in(select b.id from b,a where b.key=a.key);***************************************************************************⾼级sql⾯试题原表:courseid coursename score-------------------------------------1 java 702 oracle 903 xml 404 jsp 305 servlet 80-------------------------------------为了便于阅读,查询此表后的结果显式如下(及格分数为60):courseid coursename score mark---------------------------------------------------1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass---------------------------------------------------写出此查询语句没有装ORACLE,没试过select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course完全正确SQL> desc course_vName Null? Type----------------------------------------- -------- ----------------------------COURSEID NUMBERCOURSENAME VARCHAR2(10)SCORE NUMBERSQL> select * from course_v;COURSEID COURSENAME SCORE---------- ---------- ----------1 java 702 oracle 903 xml 404 jsp 305 servlet 80SQL> select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course_v; COURSEID COURSENAME SCORE MARK---------- ---------- ---------- ----1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass*******************************************************************************原表:id proid proname1 1 M1 2 F2 1 N2 2 G3 1 B3 2 A查询后的表:id pro1 pro21 M F2 N G3 B A写出查询语句解决⽅案sql求解表a列 a1 a2记录 1 a1 b2 x2 y2 z⽤select能选成以下结果吗?1 ab2 xyz使⽤pl/sql代码实现,但要求你组合后的长度不能超出oracle varchar2长度的限制。
【SQL Server面试题(实际应用,分页管理)】管理结果集的分页问:我怎样才能使用SQL Server对结果集的分页进行管理?答:您经常需要使用一次一页的形式来显示一个结果集,并保证用户可以轻松查看各个结果集页面,特别是您在为Web站点开发程序的时候。
虽然您可以使用ADO Recordset对象对结果集进行分页,但是这种解决办法不具有伸缩性。
为了解决伸缩性问题,您需要在结果集中包括一个具有唯一ID的列,例如在表中包括一个主键。
以下代码介绍了一个简单的例子,它使用两个存储过程在各个页面间进行导航:Create PROCEDURE spGetNextPage@id varchar(11) =' 0',@rows int = 0ASSET NOCOUNT ONSET ROWCOUNT @rowsSelecta.au_id,a.au_fname + ' ' + au_lname AS nameFROMauthors aWherea.au_id > @idorDER BYa.au_idSET ROWCOUNT 0SET NOCOUNT OFFGOCreate PROCEDURE spGetPrevPage@id varchar(11) =' 0',@rows int = 0ASSET NOCOUNT ONSET ROWCOUNT @ROWSSelecta.au_id,a.au_fname + ' ' + au_lname AS nameINTO#tempFROMauthors aWherea.au_id <@idorDER BYa.au_id descSET ROWCOUNT 0Select*FROM#temporDER BYau_idSET ROWCOUNT 0SET NOCOUNT OFF本示例所使用的样本数据来自pubs数据库,您可以对authors 表进行分页。
如果想返回第一页的前两行数据,您可以使用带有以下参数的spGetNextPage存储过程:EXEC spGetNextPage @id=' 0', @rows=2spGetNextPage 过程将返回authors表的前两个作者:172-32-1176 Johnson White Marjorie Green如需返回接下来的两个作者,您可以将后一行的ID传递给spGetNextPage:EXEC spGetNextPage @id='213-46-8915', @rows=2结果页显示:238-95-7766 Cheryl Carson Michael O'Leary如果想移动到先前页面,您可以使用第一行的ID调用spGetPrevPage:EXEC spGetPrevPage @id='238-95-7766', @rows=2结果将显示了您在前面看到的第一个页面。
使用这种方法的一个缺点是具有唯一ID的列决定了结果集的顺序。
在本文的情况下,au_id 字段必须在作者姓名字段的前面。
【SQL Server面试题(实际应用)】排序顺序会影响系统性能吗?问:一些资料介绍说,在SQL Server 6.5中,排序方式会对系统性能造成影响,但是我并没有发现有针对SQL Server 2000或SQL Server 7.0的类似说法。
我想知道二分法检索对SQL Server 2000程序到底有何意义。
SQL Server 2000所支持的各种排序方式之间在执行性能上存在哪些差异呢?答:请记住:各类排序方式间的性能差异受制于SQL Server在数据排序和数据比较上所花费的CPU周期数量。
排序速度快并不代表性能就一定会得到改善。
事实上,选择较为“快速”的排序方法(例如二分法)可能会导致应用程序在其它方面的性能降低。
例如,假设您有一个查询,该查询通过last_name字段进行搜索。
二分法排序的规则规定:Smith 并不等于smith。
您的应用程序开发人员可以通过要求所有数菥 笮葱问交蛐⌒葱问嚼词迪终飧鲆滴衤呒 5 牵 导实慕饩霭旆ㄊ嵌运 阉鞅碇械乃 惺 菔褂肬PPER() 或者LOWER() 函数。
但不幸的是,如果类似UPPER()这样的函数对一个经过索引的列进行了操作,SQL Server 将不再能够使用索引搜索数据。
在这种情况下,通过使用二分法所获得的所有性能提升都将被花费在全表扫描上的巨大性能降低所抵消。
所以,您无需考虑不同排序方法间可能存在的微小性能差异,您也无需费神考虑何种排序方法最能满足程序开发人员和最终用户的需要。
— SQL Server MVPs--------------------------------------------------------------------------日志文件的增长和DBCC DBREINDEX问:我有一个30GB的数据库,我使用完全恢复模式。
无论什么时候,只要我使用数据库一致性检查程序(DBCC)语句DBCC DBREINDEX对特定的大型数据表进行重新索引,我都要将恢复模式改为Bulk_Logged,在重新索引过程完成后再改回完全模式。
我希望这样做能够避免事务日志文件急剧增长,但是随后的日志文件备份工作量却非常大--有大约15GB。
从逻辑上说,数据库中的数据在重新索引后同原先并没有什么不同,只是索引重新进行了组织,那么为什么日志文件还是那样大呢?我怎样才能避免日志文件出现这样的急剧增长呢?答:是的,在重新索引前后的数据是完全一样的,但是索引却全面进行了更新。
当您执行DBCC DBREINDEX命令的时候,SQL Server的日志仅仅记录了扩展盘区的分配情况(8页面单位),而不是记录了每一行或者每一页所发生的变化。
这种类型的日志记录方式避免了物理文件由于系统故障而遭到破坏,并且将更详细的日志记录对系统吞吐量产生的影响降低到最小。
当您备份日志文件的时候,SQL Server必须对分配在扩展盘区中的页面进行备份,以便保持数据库备份和日志备份的一致性。
如果SQL Server不备份这些页面,您将不能够切换回完全恢复模式,除非你进行一次完整的数据库备份。
您必须能够从最近一次的完全备份、任何差异备份以及任何更新的事务日志备份中对数据库进行恢复。
【SQL Server面试题】向被复制的表添加列问:我们常常向重复的表添加列。
怎样才能在不重新初始化整个发布的情况下添加一个列?答:在SQL Server 2000中,您可以使用sp_repladdcolumn存储过程向重复的表添加列,而不需要重新初始化整个发布,因为存储过程会自动在订阅服务器上添加该列。
例如,如果pubs数据库中的authors表已发布,您可以通过执行以下存储过程将newcol整数列添加到该表中:sp_repladdcolumn @source_object = 'authors', @column = 'newcol', @typetext = 'INT', @publication_to_add = '<name of publication authors is included in>'请注意,您只能使用sp_repladdcolumn存储过程向重复的表添加新列,而不能用它来管理表中现有的列。
如需从已发布表中删除已有的列,您可以使用sp_repldropcolumn存储过程。
—Microsoft SQL Server开发团队--------------------------------------------------------------------------将代码页从SQL Server 7.0改变到SQL Server 2000问:我注意到,SQL Server 7.0默认安装的代码页设置是SQL_Latin1_General_CP1_CI_AS,但是SQL Server 2000的默认代码页是Latin1_General_CI_AS。
在我需要将SQL Server 7.0数据库恢复到SQL Server 2000之中时,默认代码页发生的变化会造成很大的差异。
我应该如何适应这种改变?答:SQL Server正在逐渐取消对原有的自定义代码页的支持,而转变为同Microsoft? Windows 代码页相匹配,Windows代码页是您在设置Windows区域ID时所选择设定的。
同代码页相关的更多信息,请参阅SQL Server 2000在线图书中的“字符数据的存储方式”一文。
当您将SQL Server 7.0升级到SQL Server 2000之后,在默认情况下,您仍然可以保留现有的排序方式和代码页设置。
但是,当您进行了一次干净的SQL Server 2000安装时,您将使用新的排序方式和代码页。
如果您将某个数据库附加到一个SQL Server 2000实例中,SQL Server 将保留该数据库在创建时所使用的排序规则。
换句话说,如果您将一个SQL Server 7.0数据库附加到SQL Server 2000之中,你就可以保留SQL Server 7.0代码页。
由于SQL Server现在使用了新的默认代码页,我们建议:如果您想通过干净安装和数据库的附加(attch)操作进行升级,您可以在安装时选择同您的SQL Server 7.0排序规则相匹配的排序规则。
您可以通过执行一次升级来确定该排序规则,例如,对pubs数据库进行一次升级,使用SERVERPROPERTY (Collation)函数运行一个查询,然后看看所得到的是何种排序规则。
Microsoft之所以对默认代码页进行修改,主要是为了减少SQL Server和Windows代码页的不兼容而引起的种种问题。
【SQL 面试题】假设只有一个table,名为pages,有四个字段,id, url,title,body。
里面储存了很多网页,网页的url地址,title和网页的内容,然后你用一个sql查询将url匹配的排在最前,title匹配的其次,body匹配最后,没有任何字段匹配的,不返回。
就是上面这道面试题,让我想了一个下午,在网上找资料,最后用下面方法实现SELECT *FROM page where url like '%baidu%' or title like '%baidu%' or like ''ORDER BY CHARINDEX('baidu', url) DESC, CHARINDEX('baidu', title) DESC,CHARINDEX('baidu', body) DESC但我感觉这种方法并不是最简单的,后来把这个方法发给面试的人,他给我了一种更简单方法,只要用基本的Sql语句就可以实现。