简介:T-SQL语句创建库、创建表和听、和添加约束等。T-SQL是数据库结构化查询语言,常见的增加、删出、修改、查询、创建库和创建表的语句,还支持定义变量、输出语句。逻辑控制语句(IF、CASE、WHERE等)、过程或函数等,这些称为T-SQL编程。

T-SQL中的变量分为局部变量和全局变量。局部变量的使用是先声明,再赋值。全局变量由系统定义和维护,可以直接使用,但一般不定全局变量。

变量是一块内存空间的表示,变量是存储数据的容器。数组是一连串的空间,所以有下表。

3.1使用变量

变量是可以存储数据值得对象,可以使用局部变量向SQL语句传递数据。可以声明许多变量以便临时使用。声明变量以后,可以用一条T-SQL语句设置该变量的值。处理中的下一条语句可以从该变量中检索数值,并给出结果。

局部变量:T-SQL中,局部变量的名称必须以标记@作为前缀。语法:

DECLARE @variable_name DateType

variable_name为局部变量的名称,DataType为数据类型。

例如:

DECLARE @name varchar(8)   --声明存放姓名变量name,最多可以存储8个字符

DECLARE @number int           --声明一个存放学好的变量number

局部变量的赋值有两种方法:使用SET语句或SELECT语句

语法

SET @variable_name =value

或者

SELECT @varible_name=value

示例1

  1. /*--查询李文才的信息--*/
  2. DECLARE @name varchar(8) --学生姓名
  3. set @name ='李文才' --使用SEL赋值
  4. select StudentNo,StudentName,BornDate,Address
  5. from Student
  6. where StudentName =@name
  7. /*--查找与李文才学号相邻的学生信息--*/
  8. DECLARE @studentNo int --学号
  9. --使用SELECT赋值
  10. select @studentNo=StudentNo from student
  11. where StudentName =@name
  12. select StudentNo ,StudentName,BornDate ,Address
  13. from Student
  14. where (StudentNo =@studentNo+1) OR (studentNo =@studentNo -1)
  15. GO

SEL语句与SELECT语句的区别  及使用上的不同

  SEL            SELECT
同时对多个变量赋值 不支持 支持
表达式返回多个值时 出错 将返回的最后一个值赋给变量
表达式返回值时 变量被赋值为NULL 变量保持原值
  1. DECLARE @addr nvarchar(100),@name nvarchar(100) --声明多个局部变量
  2. set @addr =' ',@name='张三' --发生语法错误
  3. select @addr='北京',@name='张三' --为两个局部变量@addr@name赋值
  4.  
  5. set @addr=(select address from Student) --发生语法错误
  6. select @addr=Address from Student --最后一条记录的Address列值
  7. set @addr=(select Address from Student where 1<0)
  8. --查询无结果时,@addr被赋值为NULL
  9. select @addr='北京'
  10. select @addr=Address from student where 1<0
  11. --查询无结果时,@addr保持原值

--01.在SQL中如何定义一个变量??
--变量分为局部变量和全局变量:
局部变量:@作为前缀,如@age
全局变量以@@作为前缀,如@@version
全部变量由系统定义和维护,我们只能读取,不能修改
--SQL中变量也分成两类:局部变量和全局变量
--011.局部变量

--int
declare @num int
set @num=0
print @num

--字符串
declare @name nvarchar(32)
set @name='张三'
print @name

--日期
declare @mydate datetime
set @mydate=getdate()
print @mydate

--小数
declare @price decimal(18,2)
set @price=18.89
print @price

--程序的boolean对应数据库中的bit 在SQL Server中认为就是假,非就是真
declare @sex bit
set @sex=-1000
print @sex

--查询和微冷的雨相邻的学生信息
--定义一个变量,保存微冷的雨的学号
declare @stuno int
select @stuno=StudentNo from student
where studentno=23311
print @stuno

--李小龙
select * from student
where studentno=@stuno-41

--习大大
select * from student
where studentno=@stuno+5

--局部变量练习一
--set与select区别
--01.set不支持给多个变量赋值的,但是select支持
declare @num1 int,@num2 int
select @num1=studentno,@num2=gradeid from student
where studentno=23270

--02.表达式返回多个值的时候,set会出错,但是select会将最后一个值赋值给变量

declare @result nvarchar(20)
select @result=studentname from student
print @result
select * from student

declare @myresult nvarchar(20)
set @myresult=(select studentname from student)
print @myresult

--03.当表达式没有返回值时,set变量会被赋值为null
declare @myresult nvarchar(20)
set @myresult='李四'
set @myresult=(select studentname from student where 0>100)
if(@myresult is null)
begin
print '是空'
end

USE ajax

select * from admin
where uaddress=null

null--不代表空,代表不知道。

use myschool
declare @myresult nvarchar(20)
set @myresult='张三'
select @myresult=studentname from student where 0>100
select @myresult
--03.什么场景下选用select,什么场景下选用set
--如果是从某一张表中获取数据赋值给某个变量,那么只能用select
--其他的场景下两个等价

declare @tag nvarchar(2)
set @tag='★'
print @tag
print @tag+@tag
print @tag+@tag+@tag
print @tag+@tag+@tag+@tag
print @tag+@tag+@tag+@tag+@tag 
--go的位置:结论:如果语句是select,那么go关键字可以和select语句位于同一行,其他语句要另起一行.
--go的含义是将go之前所有的语句看成是一个可执行单独,用白话来说,就是将一堆sql语句,一次性的交给SQL Server引擎处理.

select * from student 
select * from grade 
go

create table test
(
id int primary key not null,
name nvarchar(20)
)
go
select dateadd(yy,2,getdate())

--*************************1.局部变量案例*********************************************
--**************************练习********************************************
--练习:查询学号是(李小龙)的学生姓名和年龄,并输出比他小岁的学员信息(姓名和年龄)
--01.先找出李小龙的年龄@age 
declare @age int
select @age=datediff(yy,birthday,getdate()) from student
where studentno=23270
--02.where 年龄=@age-1
select studentname,datediff(yy,birthday,getdate()) 
from student
where datediff(yy,birthday,getdate())=@age-1

--**************************3.SQL Server数据类型转换**********************************
--在SQL Server中数据类型转换有两种方式
--方式一:Cast(要转换的变量as 目标类型)
declare @num int
set @num=20
print '我的年龄是'+cast(@num as nvarchar(20))+'岁'
print '我的年龄是'+convert(nvarchar(20),@num)+'岁'

--日期类型转字符串
declare @date datetime
set @date=getdate()
print '今天是'+convert(nvarchar(20),@date,120)

--方式二:Convert(目标类型,要转换的变量,style)

--**************************4.floor和ceiling函数********************************

--floor:
select floor(1.92) --向下取整

--ceiling
select ceiling(1.01) --向上取整
--**************************5.逻辑控制语句*****************************************
--**************if else while case end******************

--现在定义一个变量,判断该变量的值是否大于
declare @num int
set @num=6
if(@num>=50)
print '请根据您的身体状况选择性观看'

else 
begin
print '年龄小于,不能观看'
print '你能看到我吗'
end

05.if--else的使用

--练习:
--统计并显示2013-08-09 的oop考试平均分
--如果平均分在70分以上,显示“考试成绩优秀”,并显示前三名学生的考试信息
--如果在以下,显示“考试成绩较差”,并显示后三名学生的考试信息
--定义一个变量保存oop对应的课程编号

declare @subid int
select @subid=SubjectId from Subject
where subjectname='oop'
--定义一个变量,保存平均分
declare @avg int
--如何求2013-08-09 oop 平均分
select @avg=AVG(StudentResult) from result
where examdate>='2013-08-09' and examdate<'2013-08-10'
and subjectid=@subid
--判定@avg和的关系
if(@avg>=70)
begin
--01.打印成绩优秀
print '成绩优秀'
--02.显示前名学生成绩信息
select top 3 studentno,studentresult from result
where examdate>='2013-08-09' and examdate<'2013-08-10'
and subjectid=@subid
order by studentresult desc
end
else
begin
print '成绩好烂!罚吃番薯'
End

declare @num int
set @num=5
if(@num=1)
begin
print '1'
end
else if(@num=2)
begin 
print '2'
end
else
begin
print 'aa'
end

06.while 循环

生命诚可贵,爱情价更高。若为学习故,二者皆可抛。
--在SQL 中,只有while一种循环,没有do-while和for循环
--并且没有while(true)的写法,可以使用while(1=1)替代。
--注意:SQL中比较是否相等,用单等号(=)
--求出1到100之间所有偶数的和
//1 ----100之间所有偶数的和
int sum = 0; //保存总和
int num = 1;
while (num<=100)
{
//判定当前num和2的关系
if (num%2==0)
{
sum = sum + num;
}
//num++
num++;
}
Console.WriteLine(sum);

while(9=9)
begin
print '11' 
end
--int count = 0;
-- for (int i = 0; i <= 100; i++)
-- {
-- if (i%2==0)
-- {
-- count += i;
-- }
-- }
-- Console.WriteLine(count);
-- Console.ReadLine();

--注意点:每一次更改变量值的时候,都要加上set关键字
--在SQL Server中不支持++,支持+=
--在SQL Server中,对比变量使用=

01.1到100之间所有偶数的和

--01.定义一个变量,保存总和
declare @sum int
set @sum=0
--02.定义一个初始变量
declare @num int
set @num=1
--03.进行while循环
while(@num<=100)
begin
--判定
if(@num%2=0) --代码执行到这里,证明@num是偶数
begin
set @sum+=@num
end
set @num+=1
end
--出了循环,打印总和sum
print @sum

02.打印直角三角形

*
**
***
****
*****
--用循环的方式打印出直角三角形(不是重点,是难点)

declare @i int
declare @j int
declare @str nvarchar(100)
set @i=1
set @j=1
set @str=''
while(@i<=5)
begin
while(@j<=@i)
begin
set @str+='*' 
set @j+=1
end
print @str
set @i+=1
end

declare @str2 nvarchar(200)
declare @count int
declare @result nvarchar(200)
set @str2='*'
set @count=0
set @result=''
while(@count<5)
begin
set @result+=@str2
print @result
set @count+=1
end

print '你好'+char(9)+'吃饭'

07.设置输出结果的格式

--****************************6.设置输出结果的格式***************************************
--如果我们想让【结果】和【消息】窗口在同一个窗口显示,那么我们可以
--点击工具→选项→查询结果→SQL Server界面,将选项改成以文本形式显示结果
--*****************************************************************************
use myschool

select * from student
--内容回顾
/*
1.局部变量
declare @num int
set @num=5
print @num
2.全局变量:一般不会自己定义全局变量
@@error:捕获上一条SQL宇语句的错误号。如果返回证明上一条语句没有问题
3.while:
while(1=1)
begin

end

if --else
4.类型转换
convert(目标数据类型,要转换的变量,120) cast(变量as 目标数据类型)
*/
select * from student
--****************** 7.经典while循环加分题目***************************************
--检查学生“oop”课最近一次考试是否有不及格(60分及格)的学生。
--如有,每人加2分,高于95分的学生不再加分,直至所有学生这次考试成绩均及格
--***********************************************************************
--01.看一下oop课程最近一次考试分以下人数
--准备一个变量,保存不及格人数,科目编号,最近考试时间

--01.科目编号
select * from result
declare @subid int
select @subid=subjectid from subject
where subjectname='oop'

--02.最近一次考试时间
declare @mydate datetime
select @mydate=max(examdate) from result
where subjectid=@subid

--03.不及格人数
declare @num int
select @num=count(1) from result
where subjectid=@subid
and examdate=@mydate
and studentresult<70

--04.
while(@num>0) --有成绩低于分的学员,
begin
--每个人+2分,但是分以上不加分
update result set studentresult+=2
where studentresult<95
and subjectid=@subid
and examdate=@mydate

select @num=count(1) from result
where subjectid=@subid
and examdate=@mydate
and studentresult<70
print @num

end

select * from result
order by subjectid,examdate

08.Case End 经典练习

--Case End在面试的时候,会换一种方式考察,就是行转列思想。
--*************************8.Case End 经典练习**************************************
--采用美国ABCDE五级打分制显示学生oop课最近一次考试成绩(姓名等级)
--A级: 90分以上
--B级:80-分
--C级: 70-分
--D级:60-分
--E级:60分以下
--*****************************************************************************
declare @subid int
declare @maxdate datetime

select @subid=subjectid
from subject
where subjectname='oop'

select @maxdate=max(examdate)
from result
where subjectid=@subid

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 student,result
where student.StudentNo=result.StudentNo
and subjectid=@subid
and examdate=@maxdate

select * from result

--方式二

declare @subid int
declare @maxdate datetime

select @subid=subjectid
from subject
where subjectname='oop'

select @maxdate=max(examdate)
from result
where subjectid=@subid

select studentname,等级=
case
StudentResult
when 90 then 'A'
when 80 then 'B'
when 70 then 'C'
when 60 then 'D'
else 'E'
end
from student,result
where student.StudentNo=result.StudentNo
and subjectid=@subid
and examdate=@maxdate
--方式二:when后面不是区间,而是定值的时候
--可以使用该方式
declare @subid int
declare @date datetime
select @subid=subjectid from subject
where subjectname='oop'

select @date=max(examdate)
from result
where subjectid=@subid
select studentname,等级=
case studentresult
when 90 then 'A'
when 80 then 'B'
when 70 then 'C'
when 60 then 'D'
else 'E'
end 
from student,result
where student.studentno=result.studentno
and subjectid=@subid
and examdate=@date
select * from result

--Go
select * from student
select * from subject
go

--go必须独占一行
create table myttttt3

id int identity(1,1) primary key not null,
name nvarchar(20)

go

select * from sysobjects where name='mm'

  1. Declare @date datetime --考试时间
  2. select @date=max(ExamDate) from Result
  3. inner Join Subject ON Result.SubjectNo=Subject.SubjectNo
  4. where SubjectName='java Logic'
  5.  
  6. select 学号=StudentResult< THEN 'E'
  7. where StudentResult BETWEEN AND THEN 'D'
  8. where SrudentResult BETWEEN AND THEN 'C'
  9. where studentResult BETWEEN AND THEN 'B'
  10. else 'A'
  11. end
  12. from result
  13. inner join subject on result.SubjectNo=Subject.SubjectNo
  14. where subjectName='java Login' and ExamDate=@date

/*1.一道SQL语句面试题,关于group by
表内容:
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))
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

作业:1.全局变量的总结
2.局部变量的经典案例:上机练习3和课上的讲解内容,(手写,写到本上)
3.while循环加分经典练习,自己下去看看,写写!
4.第四章预习
09.go关键字
批处理可以将一堆(N条SQL)一次性的发送给SQL引擎执行。
Go关键字是一个批处理结束的标识。

第四章 高级查询

四、高级查询

本章依次讲解四个问题:
01.简单子查询 
02.in/not in 子查询 
03.Exists子查询 
04.T-SQL语句的综合应用

01.简单子查询

案例1:查询学生表中比"美洋洋"小的学员信息(姓名,地址)

--不用变量
--所想即所得
select studentname,address 
from Student
where Birthday>(select Birthday from Student where StudentName='美洋洋')

案例2:查询“oop”课程至少一次考试刚好等于60分的学生(姓名,成绩)

select Studentname,studentresult
from Student,result,Subject
where Student.StudentNo=Result.StudentNo
and Result.SubjectId=Subject.SubjectId
and SubjectName='oop'
and StudentResult=60

--用子查询如何实现???
--用到什么条件,交给子查询解决
select studentname,studentresult
from Student,Result
where Student.StudentNo=Result.StudentNo
and SubjectId=(select SubjectId from Subject where SubjectName='oop')
and StudentResult=60

--只检索学生姓名
select studentname 
from Student
where StudentNo in
(select StudentNo 
from Result
where StudentResult=60 and SubjectId=
(select SubjectId 
from Subject 
where SubjectName='oop'
)
)

3.2 输出语句

T-SQL支持输出语句,用于输出显示处理的数据结果。输出语句分为两种:PRINT语句和SELECT语句。语法:

PRINT 局部变量或字符串

SELECT 局部变量 AS 自定义列名

其中,使用SELECT语句输出数据是查询语句的特殊应用。

示例2

PRINT '服务器的名称:'+@@SERCERNAME

PRINT 'SQL Server的版本' + @@VERSION

SELECT @@SERVERNAME AS '服务器名称'

SELECT @version AS 'SQL Server的版本'

转换函数  PRINT '当前错误号'+CONVERT(varchar(5)),@@ERROR

示例3

INSERT INTO Student

(StudentName,StudentNo,LoginPwd,GradeId,Sex,BornDate,IdentityCard)

VALUES ('武松',10011,'123456',1,0,'1990-12-31','11010119901231001X')

PRINT '当前错误号'+CONVER(varchar(5),@@ERROR)

UPDATE Student SET BornDate='1970-7-8' WHERE StudentNo=10011

PRINT '当前错误号:'+CONVERT(varchar(5),@@ERROR)

GO

@@ERROR用于表示最近一条SQL 语句是否有错误。如果有错误,则返回非零的值。第一次INSERT语句没错,所以为0;第二条UPDATE语句违反了出生日期必须大于等于1980年1月1日的检查约束,所以错误号不为零。

3.3重点数据类型转换

3.3.1

CAST()和CONVERT()函数

与C#语言类似,在T-SQL语言中,数据类型的转换也分为隐式转换和显式转换。在T-SQL语言中 除了CONVERT()函数能够实现数据类型显式转换功能之外,T-SQL还提供CAST()函数。

示例4

  1. DECLARE @name varchar() --姓名
  2. DECLARE @Result decimal(,) --考试成绩
  3. DECLARE @NO int
  4. set @NO =
  5. select @name =StudentName from Student
  6. where StudentNo=@NO
  7. select @Result =StudentResult from Student
  8. Inner join Result on Student.StudentNo=Result.StudentNo
  9. Inner Join Subject on Result.SubjectNo=Subject.SubjectNo
  10. where SubjectName='jave Logic' AND Student.StudentNo=@NO
  11. AND EXAMDate=='2.13-2-15'
  12. print '姓名:'+@name
  13. print '成绩:'+cast(@Result as varchar())
  14. GO

语法
CAST(表达式AS数据类型)

CONVERT(数据类型[(长度)],表达式[ ,样式])

CAST()函数和COVERT()函数用于讲某种数据类型的表达式转换为另一种数据类型的表达式。与CAST()函数不同之处是,在将日期时间类型/浮点的数据转换为字符串数据时,CONVERT()函数可以通过第3个参数指定转换后的字符样式,不同的样式是转换后字符数据的显示格式不同. CONVERT()函数的第3个参数可以省略.有关样式的具体取值以及对应的显示样式请查SQL Server联机丛书。

3.4逻辑控制语句

顺序结构控制语句: begin-end语句

分支结构控制语句: if-else语句和case-end语句

循环结构控制语句: while 语句

3.4.1begin-end语句

语法

begin

语句和语句快

end

begin-end语句的作用类似于C#的"{}",他经常在分支结构语句和循环结构语句中出现,表示语句块的开始和结束.在一个语句块中可以包含另一个语句块

3.4.1 if-else条件语句

if-else语句属于分支结构,它于C#编程语言的if语句类似,也是根据条件是否成立来确定程序执行方向的.

语法:

if(条件)

语句或语句块1

else

语句或语句块2

当if语句中的条件表达式结果为TRUE是,执行语句或语句块1的代码;否则执行语句或语句块2.

如果多条语句则需要与begin-end结合使用,表示一个完整的语句块

if(条件)

begin

语句1

语句2

....

end

else

.......

  1. --查询获得"JAVA longic"课程最近一次考试的日期
  2. declare @date datetime --考试日期
  3. select @date =MAX(ExamDate) FROM Result INNER JOIN Subject
  4. ON Result.SubjectNo=Subject.SubjectNo
  5. WHERE SubjectName='Java Logic'
  6.  
  7. --查询获得本次考试的平均分
  8. DECLARE @myavg decimal(,) --平均分
  9. SELECT @myavg=AVG(StudentResult) FROM Result
  10. INNER JOIN Subject ON Result.SubjectNo=Subject.SubjectNo
  11. WHERE SubjectName 'Java Logic' AND ExamDate=@date
  12.  
  13. PEINT '平均分:'+CONVERT(varchar(),@myavg)
  14. IF (@myavg>)
  15. begin
  16. print '考试成绩优秀,前三名的成绩'
  17. selcet top StudentNo, StudentResult FROM Result
  18. INNER JOIN Subject ON Result.SubjectNo=Subject.SubjectNo
  19. WHERE SubjectName='Java Logic' AND ExamDate=@date
  20. ORDER BY StudentResult DESC
  21. END
  22. ELSE
  23. BEGIN
  24. print '考试成绩较差者,后三名的成绩'
  25. select top StudentNo,StudentResult from Result
  26. INNER JOIN Subject ON Result.SubjectNo=Subject.SubjectNo
  27. WHERE SubjectName='Java Logic' AND ExamDate=@date
  28. ORDER BY StudentResult
  29. END
  30.  
  31.  

把输出的表格数据和文本消息显示在同一个窗体中,需要做如下设置。

选择Microsoft SQL Server Management Studio 菜单中的“工具”→"选择"选项,弹出"选项"对话框,选择"查询结果"→"SQL Server"→"常规"选项,将"显示结果的默认方式"设置为"以文本格式显示结果"。

3.4.3 while循环语句

while循环语句可以根据某些条件重复执行一条SQL语句或一个语句块。通过使用while关键字,可以确保只要指定的条件为TRUE,就会重复执行语句或语句块,直至指定条件为FALSE为止。

在while循环语句中可以使用continue和break语句来控制语句的执行。

语法:

while(条件)

begin

语句或语句块

[break | continue]

END

使用break语句将跳出当前循环结束while循环.使用continue语句会使循环跳过continue语句后面的语句,回到while循环的第一条语句,准备下一轮的条件判断。

  1. Declare @date datetime --考试时间
  2. Declare @subNo int --课程编号
  3. select @subNo =SubjectNo from Subject
  4. where SubjectName='Winforms'
  5.  
  6. select @date=max(ExamDate) from Result
  7. where SubjectNo=@subNo
  8.  
  9. declare @n int
  10. while(=) --条件永远成立
  11. begin
  12. select @n=count (*) from Result
  13. where SubjectNo=@subNo AND ExamDate=@date AND StudentResult<
  14. --统计不及格人数
  15. IF(@n>) --每人加2
  16. Update result set StudentResult=StudentResult+ from result
  17. where SubjectNo=@subNo AND ExamDate=@date AND StudentResult<
  18. else
  19. break --退出循环
  20. END
  21. print '加分后的成绩如下:'
  22. select StudentName,StudentResult from Result
  23. INner Join Student On Result.StudentNo=Student.StudentNo
  24. where SubjectNo=@subNo And ExamDate =@date

3.4.4 case多分支语句

ease-END语句计算一组条件表达式,并返回其中一个符合条件的结果

语法:

case

when 条件1 then 结果1

when 条件2 then 结果2

[else 其他结果]

END

case语句表示如果"条件1"成立,则执行"结果1",其余类推。如果when的条件都不匹配,则执行else后面的结果。else可以省略。如果省略else并且when的条件表达式的结果都不为TRUE则

case-END语句返回null.

3.5批处理

3.5.1 GO指令

示例8

  1. --批处理1
  2. create table punish( --创建表
  3. StuNo int NOT NULL --学号
  4. StuCnt int NOT NULL, --不及格次数
  5. StuMng varchar() --处理意见
  6.  
  7. )
  8. GO
  9.  
  10. --批处理2
  11. INSERT into Punish --批量插入数据
  12. select StudentNo 学号,count() 不及格次数,' '处理意见
  13. from Result where StudentResult <
  14. group BY StudentNo
  15. GO
  16.  
  17. --批处理3
  18. UPDATE Punish set StuMng='警告'
  19. where StuCnt= --更新只有1次不及格记录的处理意见
  20. Update Punish set StuMng='肄业'
  21. where StuCnt Between and --更新有2次或3次不及格记录的处理意见
  22. UPDate Punish set StuMng='开除'
  23. where StuCnt > --更新3次以上不及格记录的处理建意
  24. GO
  25.  
  26. --批处理4
  27. select * from Punish --查询更新后的结果
  28. GO

本章总结

变量的使用是先声明,再赋值。局部变量前必须要“@”作为前缀,全局变量前必须有两个“@”作为前缀。

变量的赋值有两种方式:set语句和select语句

输出结果也有两种方式:print语句和select语句

数据类型转换的两个函数:cast()和CONVERT()

控制流语句提供了条件操作所需的顺序和逻辑

语句块使用begin-END

批处理可以提高语句执行的效率,批处理结束的标志是"GO"

23:55:24

万能的 SQL编程的更多相关文章

  1. 从c#角度看万能密码SQL注入漏洞

    以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...

  2. sqL编程篇(三) 游标与存储过程

    sql编程2 游标与存储过程 sql编程中的游标的使用:提供的一种对查询的结果集进行逐行处理的一种方式不用游标的处理解决方式:逐行修改工资update salar set 工资=‘新工资’ where ...

  3. SQL编程篇 (二) 定义与流程控制

    分类: sql编程:标准的sql 编程 * 纯sql 在标准的编程中又分为 sqlserver-->T-sql oracle-->pl-sql(扩展) 变量:在使用变量之前先定义 声明变量 ...

  4. 数据库之SQL编程

    定义局部变量 declare @num int 途径一: 途径二: set 和select赋值方式的区别 唯一区别,如果从数据库表中获取数据,只能用 select ) select @name =st ...

  5. SQL Server(六)——索引、视图和SQL编程

    1.索引 添加索引,设计界面,在任何一列前右键--索引/键--点击进入添加某一列为索引 2.视图 视图就是我们查询出来的虚拟表 创建视图:create view 视图名 as SQL查询语句,分组,排 ...

  6. sql编程小结

    对照mysql5.1手册,对这几天学的sql编程进行小结,主要涉及触发器.存储过程.权限管理.主从分离等,权当抛砖引玉,高手请略过. 一.触发器 通俗的说就是在指定的数据表增删改的前或后触发执行特定的 ...

  7. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  8. SQL编程之高级查询(子查询)以及注意事项

    SQL编程之高级查询(子查询)以及注意事项   1.什么是子查询? 当一个查询是另一个查询的条件时,称之为子查询.子查询可以使用几个简单命令构造功能强大的复合命令.子查询最常用于SELECT-SQL命 ...

  9. SQL Server数据库(SQL Sever语言 函数以及SQL编程)

    1.数学函数:操作一个数据,返回一个结果 --去上限: ceiling ☆select ceiling(price) from car --去下限:floor ☆select floor(price) ...

随机推荐

  1. crm2011 使用SOAP 查询单个记录 Retrieve

    function getServiceUrl() {     var serverUrl = Xrm.Page.context.getServerUrl();     if (serverUrl.ma ...

  2. SharePoint 2013 在母版页中插入WebPart

    最近QQ群里有朋友问,如何在母版页里插入自己开发的WebPart.其实很简单,母版页中虽然不允许插入WebPartZone,但是Designer就可以插入WebPart:或者手动注册,然后插入WebP ...

  3. OPENGLES 基础(一些链接和随笔)

    http://imgtec.eetrend.com/blog/3912 http://blog.csdn.net/zj8792612/article/details/16116145   在线着色器编 ...

  4. Nessus常见问题整理

    个别问题感谢大学霸__IT达人在Kali中文网的解答. 问题1: Kali自带Nessus产品注册失败 报Error(500):Activation failed  出现这个错误原因很多.其中有一个原 ...

  5. Objective-C 快速入门--基础(一)

    1.实例变量的可见度有哪些?对访问变量有什么影响? 所谓的内部,指的是相应类的@implementation和@end之间 示例: @interface Person : NSObject { @pu ...

  6. 干货之UIButton的title和image自定义布局

    当需要实现一个自定义布局图片和标题的按钮时候,不知道有多少少年直接布局了UIButton,亦或是自定义一个UIView,然后以空白UIButton.UILabel.UIImageVew作为subVie ...

  7. 转:能和LoadRunner匹敌的VS2010/2012Web负载测试

    原文出处:http://www.cnblogs.com/aarond/archive/2013/04/18/performance.html VS自带的Web负载测试真的很大程度上能和专业的loadr ...

  8. 软件开发与UML的关系

    今天,我们上<统一建模语言UML>.课上老师给我们讲解了软件开发与UML之间的关系:UML常用于建立软件系统的模型,适用于系统开发的不同阶段.UML的应用贯穿于系统开发的不同阶段.1.需求 ...

  9. FTP远程文件传输命令

    使用ftp命令进行远程文件传输 ftp命令是标准的文件传输协议的用户接口.ftp是在TCP/IP网络上的计算机之间传输文件的简单有效的方法.它允许用户传输ASCII文件和二进制文件. 在ftp会话过程 ...

  10. JAVA 8 默认方法-Default Methods

    什么是默认方法-Default Methods 简单的说,就是可以在接口中定义一个已实现方法,且该接口的实现类不需要实现该方法: 如下示例: interface GreetingService { v ...