1.一道SQL语句面试题,关于group by
创新互联是一家专业提供莲湖企业网站建设,专注与成都网站制作、成都网站设计、外贸营销网站建设、html5、小程序制作等业务。10年已为莲湖众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
表内容:
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','负')
select * from #tmp
select rq, shengfu from #tmp group by rq,shengfu
select rq, shengfu from #tmp group by shengfu,rq
select rq, shengfu,sum(shengfu) from #tmp group by shengfu,rq
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 ab then a else b end ),
(case when bc then b esle c end)
from table_name
3.面试题:一个日期判断的sql语句?
请取出tb_send表中日期(SendTime字段)为当天的所有记录?(SendTime字段为datetime型,包含日期与时间)
------------------------------------------
select * from tb where datediff(dd,SendTime,getdate())=0
4.有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):
大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。
显示格式:
语文 数学 英语
及格 优秀 不及格
------------------------------------------
select
(case when 语文=80 then '优秀'
when 语文=60 then '及格'
else '不及格') as 语文,
(case when 数学=80 then '优秀'
when 数学=60 then '及格'
else '不及格') as 数学,
(case when 英语=80 then '优秀'
when 英语=60 then '及格'
else '不及格') as 英语,
from table
5.在sqlserver2000中请用sql创建一张用户临时表和系统临时表,里面包含两个字段ID和IDValues,类型都是int型,并解释下两者的区别?
------------------------------------------
用户临时表:create table #xx(ID int, IDValues int)
系统临时表:create table ##xx(ID int, IDValues int)
区别:
用户临时表只对创建这个表的用户的Session可见,对其他进程是不可见的.
当创建它的进程消失时这个临时表就自动删除.
全局临时表对整个SQL Server实例都可见,但是所有访问它的Session都消失的时候,它也自动删除.
6.sqlserver2000是一种大型数据库,他的存储容量只受存储介质的限制,请问它是通过什么方式实现这种无限容量机制的。
------------------------------------------
它的所有数据都存储在数据文件中(*.dbf),所以只要文件够大,SQL Server的存储容量是可以扩大的.
SQL Server 2000 数据库有三种类型的文件:
主要数据文件
主要数据文件是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。主要数据文件的推荐文件扩展名是 .mdf。
次要数据文件
次要数据文件包含除主要数据文件外的所有数据文件。有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf。
日志文件
日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但可以不止一个。日志文件的推荐文件扩展名是 .ldf。
7.请用一个sql语句得出结果
从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确,只是作为一个格式向大家请教。
如使用存储过程也可以。
table1
月份mon 部门dep 业绩yj
-------------------------------
一月份 01 10
一月份 02 10
一月份 03 5
二月份 02 8
二月份 04 9
三月份 03 8
table2
部门dep 部门名称dname
--------------------------------
01 国内业务一部
02 国内业务二部
03 国内业务三部
04 国际业务部
table3 (result)
部门dep 一月份 二月份 三月份
--------------------------------------
01 10 null null
02 10 8 null
03 null 5 8
04 null null 9
------------------------------------------
1)
select a.部门名称dname,b.业绩yj as '一月份',c.业绩yj as '二月份',d.业绩yj as '三月份'
from table1 a,table2 b,table2 c,table2 d
where a.部门dep = b.部门dep and b.月份mon = '一月份' and
a.部门dep = c.部门dep and c.月份mon = '二月份' and
a.部门dep = d.部门dep and d.月份mon = '三月份' and
2)
select a.dep,
sum(case when b.mon=1 then b.yj else 0 end) as '一月份',
sum(case when b.mon=2 then b.yj else 0 end) as '二月份',
sum(case when b.mon=3 then b.yj else 0 end) as '三月份',
sum(case when b.mon=4 then b.yj else 0 end) as '四月份',
sum(case when b.mon=5 then b.yj else 0 end) as '五月份',
sum(case when b.mon=6 then b.yj else 0 end) as '六月份',
sum(case when b.mon=7 then b.yj else 0 end) as '七月份',
sum(case when b.mon=8 then b.yj else 0 end) as '八月份',
sum(case when b.mon=9 then b.yj else 0 end) as '九月份',
sum(case when b.mon=10 then b.yj else 0 end) as '十月份',
sum(case when b.mon=11 then b.yj else 0 end) as '十一月份',
sum(case when b.mon=12 then b.yj else 0 end) as '十二月份',
from table2 a left join table1 b on a.dep=b.dep
8.华为一道面试题
一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。
------------------------------------------
select id, Count(*) from tb group by id having count(*)1
select * from(select count(ID) as count from table group by ID)T where T.count1
top 3,desc
declare
--,;
exec sp_rename
identity(1,1),not null
select , set
update,6
ORC
数据库文件的初始大小
DECLARE CURSOR
原子性,隔离性
显示事务,自动提交事务
go
实体型,联系
实体完整性,参照完整性
第1章 SQL Server2005安装本章要点 版本 组件 安装企业版 服务器上的服务 客户机的管理工具 1.1 版本 SQL Server 2005数据库产品按照用户需求的不同划分为不同的版本。表1-1 SQL Server 2005的6个版本版本名称 功能特点 主要用途企业版 支持超大型企业进行联机事务处理、高度复杂的数据分析、数据仓库系统和网站,全面的商业智能和分析能力、高可用性(比如故障转移群集) 超大型企业商业应用标准版 包括电子商务、数据仓库和业务流解决方案所需要的基本功能,集成商业智能和高可用性 中小型企业商业应用工作组版 包括SQLServer产品系列的核心数据库功能,并且可以轻松地升级至Standard Edintion或Enterprise Edition。入门级数据库,具有可靠、功能强大且易于管理的特点 适合在大小和用户数量上没有限制的小型企业,可以用作前端Web服务器,也可以用于部门分支机构的运营开发版 开发人员可以再SQLServer2005 开发版上生成任何类型的应用程序,包括SQLServer 2005版的所有功能,但有许多限制,只能用于开发和测试系统,而不能用作生产服务器 独立软件供应商、咨询人员、系统集成商、解决方案提供商及创建和测试应用程序的企业开发人员的选择。可以根据生产需要升级至SQLServer2005企业版简易版 一个免费、易用且便于管理的数据库,可以和Microsoft visual Studio 2005集成在一起,开发功能丰富、存储安全、可快速部署的数据驱动应用程序,可以免费再分发,还可以起到客户端数据库及基本服务器数据库的作用 低端ISV、低端服务器用户、创建Web应用程序的非专业开发人员及创建客户端应用程序的编程者企业评估版 免费获得 初学者使用 1.2 组件所谓组件,就是指构成SQL Server 2005角色的不同功能。SQL Server 2005为服务器和客户机设计了不同的组件,这些组件协调工作,完成SQL Server 2005 基于网络的数据库管理和应用。 1.2.1 服务器组件如果需要构建SQL Server 2005 服务器,可以选择安装如表 1-2 所示组件。 表1-2 服务器组件组件名称 组件说明 使用说明数据库引擎 用于构建SQL Server 2005数据库服务器,实现数据的存储、处理、保护和管理,以及全文搜索、复制等,提供对XML类型数据的支持 构建数据库服务器必选组件分析服务 用于创建和管理联机分析处理OLAP系统,数据挖掘 构建OLAP系统必选组件报表服务 创建、管理、部署表格报表,开发报表应用 可选服务器组件通知服务 用于开发和部署个性化的消息 可选服务器组件集成服务 图形工具,可以编程,用于移动、复制和转移数据 可选服务器组件 1.2.2 客户机组件如果需要构建SQL Server 2005客户机,可以选择安装如表1-3所示的组件。 表1-3客户机组件组件名称 组件说明 使用说明连接组件 客户机和服务器间进行通信的必需组件,包括各种接口的网络库 必选的组件 Management Studio 集成的管理控制台,访问、配置、管理和开发SQL Server 2005 建议选择 SQL Server配置管理器 管理SQL Server服务,配置服务器和客户机的协议 建议选择 SQL Server事件探查器 用于监控服务器的性能 建议选择数据库引擎优化向导 可以对索引、分区和视图的创建提供性能优化的建议 建议选择商业智能开发 简化的Visual Studio 2005集成开发环境,提供开发分析服务、报表服务和集成服务的编程功能 可选联机丛书和实例数据库 SQL Server 2005联机丛书和实例数据库 建议选择 1.3 安装企业版 1.3.1 安装服务器 SQL SERVER 2005 服务器安装 图1 图2 图3 图4 图5 图6 图7 图8 图9 图10 图11 图12 图13 图14 图15 图16 图17 图18 图19 SQL SERVER 2005客户端安装 1.3.1 安装客户机 1.4 服务器的后台服务 1.4.1 MSQLSERVER MSQLSERVER 服务时SQL Server2005服务器核心数据库引擎服务。 MSQLSERVER服务的主要功能包括: 数据库管理 事务处理和查询 维护数据库的完整性和安全 默认实例数据库引擎后台服务名称:MSSQLSERVER。 命名实例的后台数据库引擎服务名称:MSSQL$实例名。 该服务时SQL Server 2005服务器的核心服务。 1.4.2 SQLSERVERAGENT SQLSERVERAGENT 相当于SQL Server 2005的系统自动管理、控制、调度中心。启动代理服务能够使系统安装管理员的意图自动运行并管理数据库系统。 默认实例的后台代理服务名称:SQLServerAgent。 命名实例的后台代理服务名称:SQLAgent$实例名。 如果不需要自动执行管理任务,那么该服务可以不启动。 1.4.3 MSSQLServerOLAPService 为商业智能应用程序提供联机分析处理(OLAP)和数据挖掘功能的服务。 默认实例的后台OLAP服务名称:MSSQLServerOLAPService。 命名实例的后台OLAP服务名称:MSOLAP$实例名。 1.4.4 ReportServer 管理、执行、呈现、计划和传递报表的后台服务。 默认实例的后台报表服务名称:ReportServer。 命名实例的后台报表服务名称:ReportServer$实例名。 1.4.5 MSDTSServer 为集成服务包的存储和执行提供管理支持的后台服务。 默认实例和命名共用一个服务,名称:MSDTSServer。 1.4.6 SQLBrowser 向客户机提供SQL Server 2005连接信息的名称解析服务。多个SQL Server实例和集成服务实例共享此服务。 默认实例或命名实例的后台服务名称:SQLBrowser。 1.4.7 MSFTESQL 对结构化和半结构化数据的内容和属性快速创建全文索引,以允许对此数据的快速语言搜索,即SQL Server全文搜索的后台服务。 默认实例的后台服务名称:MSFTESQL。 命名实例的后台服务名称:MSFTESQL$实例名。 1.5 客户机上的管理工具 1.5.1 Management Studio Management Studio 是SQL Server 2005中最重要的管理工具,是一个集成的管理平台。 1.5.2 Visual Studio 2005 1.5.3 SQL Server 2005商业智能开发的相应功能 分析服务 Analysis Service,称为分析服务。要理解分析服务,需要先理解OLTP和OLAP这两个概念。 OLTP译为联机事务处理,OLAP译为联机分析处理,这是网络数据库 两种不同应用。 报表服务 Reporting Service,称为报表服务。开发基于报表的应用时很多数据库应用系统要求提供的功能。 集成服务 Integration Service,称为集成服务。是基于SQL Server 2000的DTS基础上发展起来的新一代数据集成解决方案。使用商业智能开发工具可以开发出具有强大的数据集成功能的应用系统。 1.5.4 SQL Server配置管理器 SQL Server Configuration Manager(SQL Server配置管理器)的功能: 服务管理器:管理后台服务。 服务器网络实用工具:配置服务器的网络参数。 客户端网络实用工具:配置客户机的网络参数。 习题:(1) SQL Server 2005服务器安装后的后台服务各有什么功能?(2) 在Windows XP Professional上可以安装什么版本的SQL Server 2005?(3) SQL Server 2005 的Management Studio 有什么主要功能?(4) SQL Server 2005 的配置管理器有什么主要功能?上机练习:安装服务器配置客户端
----table 为你的表名,通过循环语句实现更新,@coun为更新次数
declare @cou int,@count int
set @cou=0
set @count=0
select top 0 * into #t1 from table
select @cou =COUNT (*) from table where [分数]90
while @cou0
begin
set @count=@count+@cou
insert into #t1
select * from table where [分数]90
update a
set a.[分数]= case when [分数] 60 then [分数]+5
when [分数] 70 then [分数]+4
when [分数] 80 then [分数]+3
when [分数] 90 then [分数]+2
else [分数]
end
from table a
inner join #t1 b on a.[姓名]=b.[姓名] and a.[课程]=b.[课程]
delete from #t1
select @cou =COUNT (*) from table where [分数]90
end
print @count