第三章SQL编程
本章目标:
1.使用变量
2.输出语句
3.数据类型转换
4.逻辑控制语句
5.批处理
一.变量
1.什么是变量呢?
变量是存储数据的容器
T-SQL中的变量分为局部变量和全局变量
2.局部变量
局部变量的名称必须以标记@作为前缀
声明局部变量的语句如下:
declare @variable name(局部变量名称) DataType(数据类型)
局部变量赋值有两种方法:使用Set语句或Select语句
整型:
1
2
3
|
declare @num int set @num=1 print 'num的值是:' + convert (nvarchar(32),@num) |
字符串类型:(char varchar nvarchar)
1
2
3
|
declare @ name nvarchar(32) set @ name = '张三' print @ name |
小数类型(float decimal numeric(18,0))
1
2
3
|
declare @num decimal (18,2) set @num=5.2 print @num |
日期类型(datetime))
1
2
3
|
declare @date datetime set @date=GETDATE() print convert (nvarchar(32),@date,120) |
3.全局变量
全局变量都使用两个@符号为后缀
@@error(重点) | 最后一个T-SQL错误的错误号 |
@@identity | 最后一次插入的标识值 |
@@rowcount | 受上一个SQL语句影响的行数 |
@@serviceName | 该计算机上的SQL服务名称 |
@@Version | SQLServer的版本信息 |
4.SET语句和SELECT语句的区别
set语句和select的语句的区别
Set | Select | |
同时对多个变量赋值 | 不支持 | 支持 |
表达式返回多个值时 | 出错 | 将返回的最后一个值赋给变量 |
表达式未返回值时 | 变量将赋值为NULL | 变量保持原值 |
其中,set赋值语句一般用于赋给变量指定的数据常量,select赋值语句一般用于从表中查询数据,再赋给变量
use MySchool
--学号是23270李小龙姓名和年龄
select studentName as 姓名,datediff(YY,birthday,GETDATE()) as 年龄 from Student where StudentNo=23270 declare @age int
select @age=datediff(YY,birthday,GETDATE())
from Student
where StudentNo=23270
print @age
--比李小龙年龄小的人的姓名和年龄
select studentName as 姓名,datediff(YY,birthday,GETDATE()) as 年龄 from Student
where datediff(yy,birthday,Getdate())<@age --比李小龙年龄大的人的姓名和年龄
select studentName as 姓名,datediff(YY,birthday,GETDATE()) as 年龄 from Student
where DATEDIFF(YY,birthday,GETDATE())>@age --比李小龙年龄小一岁的人的信息
select * from Student
where DATEDIFF(YY,birthday,GETDATE())=@age-1 --比李小龙年龄大一岁的人的信息
select * from Student
where DATEDIFF(YY,birthday,GETDATE())=@age+1
二.输出语句
常用的输出语句有两种,即print语句和select语句.
语法:
print 局部变量或字符串
select 局部变量 as 自定义列名
其中,使用select语句输出数据是查询语句的特殊应用
用print语句输出的结果将在"消息"窗口中以文本方式显示,用select语句输出的结果将在结果窗口中以表格方式显示.
三.数据类型转换
cast()和convert()函数
cast(表达式 as 数据类型)
convert(数据类型[(长度)],表达式[,样式])
二者在本质上无任何区别 唯一不同之处是:在将日期时间类型的数据转换为字符串数据时,convert()函数可以通过第三个参数指定转换后字符数据的显示格式不同。
四.逻辑控制语句
在T-SQL中,常用的逻辑控制语句有以下几种
1.顺序结构控制语句
begin
语句或语句块
end
begin-end语句的作用类似于C#语言的"{}",它经常在分支结构语句中出现,表示语句块的开始和结束.
2.if-else条件语句
if(条件)
语句或语句块1
else
语句或语句块2
示例:
declare @age int
select @age=datediff(YY,birthday,GETDATE())
from Student
where StudentNo=23270
if(@age>=18)
begin
print '黄荣18了'
end
else
begin
print '小于18'
end
练习
--if练习
--统计并显示2013-08-09 的oop考试平均分
--如果平均分在70以上,显示“考试成绩优秀”,并显示前三名学生的考试信息
--如果在70分以下,显示“考试成绩较差”,并显示后三名学生的考试信息
--01.定义一个变量,保存平均分
--如果在70分以下,显示“考试成绩较差”,并显示后三名学生的考试信息
--01.定义一个变量,保存平均分 declare @avg int
select @avg=AVG(StudentResult) from Result,Subject
where Result.SubjectID=Subject.SubjectID
and ExamDate>='2013-08-09'
and ExamDate>='2013-08-10'
and Subject.SubjectName='oop'
--02.判定:>=70 显示优秀,同时显示分数最高的三个人的分数
if(@avg>=70)
begin
print '优秀'
select top 3 * from Result,Subject
where Result.SubjectID=Subject.SubjectID
and ExamDate>='2013-08-09'
and ExamDate>='2013-08-10'
and Subject.SubjectName='oop'
order by StudentResult desc
end
--02.判定:<70 显示差,同时显示分数最低的三个人的分数
else
begin
print '差'
select top 3 * from Result,Subject
where Result.SubjectID=Subject.Subjectid
and ExamDate>='2013-08-09'
and ExamDate<'2013-08-10'
and Subject.SubjectName='oop'
order by StudentResult asc
end
3.while循环语句
在while循环语句中可以使用continue和break语句来控制语句的执行
while(条件)
begin
语句和语句块
[break | continue]
end
示例:
检查学生“oop”课最近一次考试是否有不及格(60分及格)的学生。
如有,每人加2分,高于95分的学生不再加分,直至所有学生这次考试成绩均及格
--求符合条件的人数
declare @subid int
select @subid=subjectid
from Subject
where SubjectName='oop'
--定义一个Datetime类型的变量,保存最近一次考试时间
declare @maxdate datetime
select @maxdate=MAX(Examdate)
from Result
where SubjectId=@subid
--print Convert(nvarchar(32),@maxdate,120) declare @n int
select @n=COUNT(*) from Result
where SubjectId=@subid
and ExamDate=@maxdate
and StudentResult<70
--判定人数>0 --循环
while(@n>0)
begin
--有不及格的,提分+2 高于95,不提
update Result set StudentResult+=2
where SubjectId=@subid
and ExamDate=@maxdate --最近一次考试
and StudentResult<95 select @n=COUNT(*) from Result
where SubjectId=@subid
and ExamDate=@maxdate
and StudentResult<70
end select * from Result
order by SubjectId
4.case多分支语句
case-end语句计算一组条件表达式 ,并返回其中一个符合条件的结果
语法:
case
when 条件1 then 结果1
when 条件2 then 结果2
[ else 其他结果]
end
ABCDE五级打分制显示学生oop课最近一次考试成绩(姓名和等级)
A级: 90分以上,B级:80-分,C级: 70-分,D级:60-分,E级:60分以下
select @maxdate=MAX(ExamDate) from Result,Subject
where Result.SubjectId=Subject.SubjectId
and SubjectName='oop'
select studentName,成绩=
case
when StudentResult>=90 then 'A'
when StudentResult>=80 then 'B'
when StudentResult>=70 then 'C'
when StudentResult>=60 then 'D'
else 'E'
end
from Result,Student
where Result.StudentNo=Student.StudentNoand ExamDate=@maxdate
五.批处理
1.go指令
go关键字标志着批处理的结束,它是一条或多条SQL语句的集合.
以一条命令的方式来处理一组命令的过程称为批处理.每个批处理之间都是独立的,当一个批处理出现错误时,并不会影响其它批处理中SQL代码的运行.
批处理的主要好处是能够简化数据库的管理
打印直角三角形
-----方法一
declare @num1 nvarchar(200)
declare @count int
declare @result nvarchar(200)
set @num1='*'
set @count=0
set @result=' '
while(@count<5)
begin
set @result+=@num1
print @result
set @count+=1
end
--方法二
declare @i int
declare @j int
declare @num2 nvarchar(100)
set @i=1
set @j=1
set @num2=''
while(@i<=5)
begin
while(@j<=@i)
begin
set @num2+='*'
set @j+=1
end
print @num2
set @i+=1
end
行转列
--建表
create table tmp(rq varchar(10),shengfu nchar(1))
select * from tmp
--添加数据
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 as 日期,sum
(case
when shengfu='胜' then 1
else 0
end) as 胜,sum
(
case
when shengfu='负' then 1
else 0
end
) as 负
from tmp
group by rq
第三章SQL编程的更多相关文章
- S2 第三章SQL编程
.if练习 --统计并显示2013-- 的oop考试平均分 --如果平均分在70以上,显示“考试成绩优秀”,并显示前三名学生的考试信息 --如果在70分以下,显示“考试成绩较差”,并显示后三名学生的考 ...
- Objective-C 基础教程第三章,面向对象编程基础知
目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...
- VSTO开发指南(VB2013版) 第三章 Excel编程
通过前两章的内容,有了一定的基础,但进入第三章,实例的步骤非常多,并且随着VS版本的升级,部分功能菜单界面发生了很大变化,所以,第三章的案例我将逐步编写! 实例3.1的目标就是给Excel写一个加载宏 ...
- erlang 编程指南 第三章-顺序编程 课后练习
1. sum(3) => 6; sum(1,3) => 6; sum(6,6) => 6; sum(N) when is_integer(N) -> sum_acc(N,0); ...
- 第三章 AOP 编程选择
Spring为我们开发者提供了多种AOP的编程方式.我们该如何选择呢? 如果项目采用的是JDK5.0以上版本,我们可以选择@AspectJ的方式.这是第一选择. http://blog.csdn.ne ...
- Storm 第三章 Storm编程案例及Stream Grouping详解
1 功能说明 设计一个topology,来实现对文档里面的单词出现的频率进行统计.整个topology分为三个部分: SentenceSpout:数据源,在已知的英文句子中,随机发送一条句子出去. S ...
- 第三章 T-SQL 编程
3.1 使用变量 变量是可以存储数据值的对象.可以使用局部变量向SQL语句传递数据.在T-SQL中执行一批SQL语句时,可以声明许多变量以便临时使用.声明变量以后,可以在批处理中用一条T-SQL语句设 ...
- 第三章 - SQL基础及元数据获取
SQL的介绍 SQL的定义:结构化查询语句 SQL的作用:对库和表进行操作 SQL的常用分类 DDL 数据定义语言(Data Definition Language) DCL 数据控制语言(Data ...
- Learning Spark中文版--第三章--RDD编程(2)
Common Transformations and Actions 本章中,我们浏览了Spark中大多数常见的transformation(转换)和action(开工).在包含特定数据类型的RD ...
随机推荐
- javascript快速入门
这个在w3school在线文档讲解的很详细,还能在线练习. 所以我只写一些入门的东西和最常用的总结以及注意事项: JavaScript 是脚本语言 一般被人们称为JS,Jquery就是对js语言的封装 ...
- 数据结构:链表(python版) 续:增加比较函数
题目: 基于元素相等操作"=="定义一个单链表的相等比较函数.另请基于字典序的概念,为链表定义大于,小于,大于等于,小于等于的判断 class LList: "" ...
- js无限级树菜单
以前做网站,树形菜单一般都很简单,自己定义风格样式,简单的js控制,后来原来网上很多文章都在讨论Js树型菜单,看了几个实例,发现这个树比较简单好用. http://hovertree.com/texi ...
- SharePoint 2013 Designer系列之数据视图筛选
在SharePoint中,我们经常需要对列表进行简单的筛选,这时,数据视图就有作用了,我们可以定制对于字段的筛选,来进行展示:特别的,筛选不同于搜索,并没有对于附件或者文档的全文检索,如果需要全文检索 ...
- 关于web软件信息安全问题防护资料的整理 (一)
之前意识到了安全问题的重要性,于是就在网上找了一下安全问题的解决办法(主要是web应用以及政府网站方面的),问了一下同学的公司是怎么保证安全的,跟我说用的是shiro安全机制这个貌似好多公司都在用,网 ...
- android FrameLayout详解
首先看演示: FrameLayout框架布局是最简单的布局形式.所有添加到这个布局中的视图都以层叠的方式显示.第一个添加的控件被放在最底层,最后一个添加到框架布局中的视图显示在最顶层,上一层的控件会覆 ...
- CYQ.Data 数据层框架 CYQ.Data 数据框架 使用篇四 MAction 增删改
本篇内容概要 本篇继续上一篇内容,本节介绍所有增删改的相关操作. 1:添加数据 Insert方法 2:删除数据 Delete方法 3:更新数据 Update方法 一:添加操作 方法原型: public ...
- C语言链表实现约瑟夫环问题
需求表达:略 分析: 实现: #include<stdio.h> #include<stdlib.h> typedef struct node { int payload ; ...
- RMAN-03002, RMAN-06059, ORA-19625 and ORA-27037 When Running RMAN Backup of Archivelogs
RMAN备份数据库时,出现下面错误错误信息: Starting backup at 25-MAY-15 current log archived allocated channel: ORA_DISK ...
- SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法
操作步骤: 1. 在 Microsoft Windows 2003 或 Windows XP 桌面上,依次单击"开始"."运行",然后在"打开&quo ...