SQL习题集(2)

2019-05-17 13:54

group by 系名

4 对于计算字段的分组应用 查询出计算机系学生数和其它系的学生数

select count(*),( case when 系_ID=1 then 'jsjx' else 'qt' end )

from dbo.学生 group by ( case when 系_ID=1 then 'jsjx' else 'qt' end )

5 分组条件having的用法 系人数在10人以上的系

select count(*) as shu ,系_ID from dbo.学生 group by 系_ID

having count(*) >10 或写成 select * from (

select count(*) as shu ,系_ID from dbo.学生 group by 系_ID ) linshi

where linshi.shu >10

order by集锦

1. 对单个字段的排序(asc升序可省略 desc降序)

select 教师_ID, 教师名, 出生日期, 系_ID, 性别_ID, 职称_ID from dbo.教师 order by 教师名

2.多字段的排序(先按第一个字段排序,如果相同再按第二个字段排序) 写法1。

select 教师_ID, 教师名, 出生日期, 系_ID, 性别_ID, 职称_ID from dbo.教师

order by 性别_ID, 系_ID desc 写法2。

select 教师_ID , 教师名, 出生日期, 系_ID as xxx , 职称_ID from dbo.教师

order by 4, 性别_ID desc –4代表select 后面 第四个字段 3.按笔画排序

select 教师_ID, 教师名, 出生日期, 系_ID, 性别_ID, 职称_ID from dbo.教师

order by 教师名 Collate Chinese_PRC_Stroke_ci_as desc

4.order by 可按给定表达式计算结果排序 按教师年龄大小降序排序

select 教师_ID, 教师名, 出生日期, 系_ID, 性别_ID, 职称_ID from dbo.教师

order by DATEDIFF( yy, 出生日期,getdate() ) desc 将本年入学新生排在前面,老生排在后面

select 学生_ID, 姓名, 出生日期, 性别_ID, 籍贯_ID, 系_ID, 届, 班级, ( case when 届 = 2006 then 1 else 0 end )

from dbo.学生 order by ( case when 届 = 2006 then 1 else 0 end ) desc

5.随机排序

order by newid() 其它:

--union 合并

将本校学生与教师名字全部查询出来(去掉重复)。 select 教师名 from dbo.教师 union select 姓名 from dbo.学生

将本校学生与教师名字全部查询出来(不去掉重复)。 select 姓名 from dbo.学生 union all select 姓名 from dbo.学生 常用函数 --数学函数 select ABS(-9) select CEILING(9.00001) select FLOOR(9.9) select PI() select POWER(2,3) select SQRT(9) select SIGN(0) select ROUND( 892.35,1,7 ) select ROUND( 892.35,1,0 )

--绝对值

--比输入值大的最小整数 --比输入值小的最大整数 --派

--第一个参数的第二个参数次方 --平方根

--返回参数的正负

select 1+FLOOR( LOG10(48091) ) --随机数

select FLOOR(RAND()*10)

-----字符串函数------------------------------------------------------------------ select LEFT('aaaaa',2) --左截取 select RIGHT('123456',2) --右截取 select LEN('1') --字符长度 select LOWER('aaBN') --全小写 select UPPER('aaBN') --全大写 select rtrim( LTRIM(' aaa ') )+'**' --从右去掉空格,再从左去掉空格 select SUBSTRING('abcdefg',2,3) --从第2位开始截取3个字符 select REPLACE('aba','a','ccc') --把A换成CCC select STUFF( 'aaaaa',1,2,'bbbbbb' ) --从第1位开始2位换成BBBBBB ---------------------日期时间---------------------------- select GETDATE()

select YEAR( GETDATE() ) select month( GETDATE() ) select day( GETDATE() )

select DATEADD( mm,100 ,'1990-10-10' ) select DATEDIFF( yy, '1988-8-8',getdate() )

select 教师名 , DATEDIFF( yy, 出生日期, getdate() ) as 年龄 from dbo.教师

select DATENAME( yy,getdate() )+'年'

select DATEPART( yy, getdate() )

select DATENAME( yy,getdate() )+'年'+DATENAME( mm,getdate() )+'月'+ DATENAME( dd,getdate() )+'日' --本周/月/季/年的一 是 哪一天

select dateadd(day, 2- DATEPART(weekday,getdate()) ,getdate() )

SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()) , 0) SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()) , 0) SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()) , 0) SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()) , 0) --上周/月/季/年 最后一天

SELECT dateadd(ms,-3,DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)) SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) SELECT dateadd(ms,-3,DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)) SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

--本月的第一个星期一

select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate())), 0)

--上个月 多少天 --上月 最后一天 declare @a datetime

set @a= dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

print 1+month(getdate()) 

print convert(char(2),1+month(getdate()) )+'-' --select dateadd(mm, DATEDIFF(mm,0,getdate()) ,0)

SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

--通用时间差

declare @a datetime

set @a= dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

declare @b datetime

set @b= dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0))

print datediff(day, @b,@a);

-------转换函数-------------------------------------------------------------------------- select cast( '666' as int )+100

select convert(varchar(13),999 )+'***'--Integer.parseInt() select

convert(char(4),year( getdate() ))+'-'+convert(char(2),month( getdate() ))+'-'+convert(char(2),day( getdate() ) )

insert into 用法

1.向教师表中加入一个记录,字段的顺序与数目和表中一致 insert into 教师 values( ); 2. 字段的数目与顺序自己指定

Insert into 教师 (姓名,性别_id) values ( ‘张’,1) 3 . 从select检索中插入成批记录 insert into dbo.学生 ( 姓名) select 教师名 from dbo.教师

delete from dbo.xuesheng where ming like 'z%' update用法

1. 更新一个字段 Update 教师

Set 教师名=’李四’ Where 教师_id = 3; 教师基本工资上调5% Update 教师

Set 基本工资=基本工资*(1.05) 2. 多字段更新,每一个用 ,号隔开 Update 教师 Set 教师名=’李四’ , 性别_id = 1

Where 教师_id = 3;

集合论 交集 条件A AND 条件B select from A表 where exist (B查询)

SELECT语句A INTERSECT SELECT语句B 并集 条件A OR 条件B SELECT语句A UNION SELECT语句B 补集 NOT 条件A [HAVING] NOT 统计分组条件 SELECT语句A UNION SELECT语句B 差集 select from A表 where not exist (B查询)

--------------------------------------------------------------------------------------------------------------------------------------- 集合相等

集合包含 A包含B B中的元素 一定在A中 不在A中的元素 一定不在B中 1.用一句SQL语句获取 学生表中年龄最大的学生

--1.是一句SQL语句,

--2.绝对不能使用任何统计函数,如sum(),max(),min(),avg(),count()以及所有DBMS提供的函数。 方法一

select top 1 年龄 from 学生

order by 年龄 desc 方法二

select 年龄 from 学生

where 年龄 >= all (select 年龄 from 学生) 2.- 学生表中年龄第三大的学生

select top 1 年龄 from 学生

where 年龄 not in (

select top 2 年龄 from 学生

order by 年龄 desc )

order by 年龄 desc 3.分页sql

4. 删除除了自动编号不同,其他都相同的学生冗余信息

自动编号 学号 姓名 课程编号 课程名称 分数 1 2005001 张三 0001 数学 69 2 2005002 李四 0001 数学 89 3 2005001 张三 0001 数学 69

delete from tablename where 自动编号 not in (


SQL习题集(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:道路交通静化在交通安全中的应用

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: