期末速成数据库极简版【分支循环&函数】(4)

简介: 期末速成数据库极简版【分支循环&函数】(4)



  • 语法
  • 注意事项
  • 举例
  • 与C语言差别就是把花括号{ } ,变成了begin end语句块,其他均差不多

全局变量&局部变量

@@全局变量

  • 全局变量由系统提供且预先声明的变量。
  • 全局变量的使用: 用户只能读取,不能修改
  • 引用全局变量时,变量名前一定要加上@@标记
  • 输出全局变量可以采用SELECT或者PRINT命令。

@局部变量

  • 局部变量由用户根据需要定义,用于保存临时数据或由存储过程返回的结果。
  • 局部变量的使用: 引用局部变量时,变量名前一定要加上@标记
  • 采用DECLARE命令定义declare
  • 采用SET或者SELECT命令赋值select
  • 输出局部变量可以采用SELECT或者PRINT命令。select  print

局部变量定义declare

局部变量的定义:局部变量是由用户采用declare命令定义。

DECLARE  @ 变量名  数据类型   [,… n]  

  • 一次可以声明多个变量,变量之间用逗号隔开;
  • 声明时可不赋初值,此时均初始化为NULL;
  • 声明时也可以根据需要赋初值。

例: DECLARE    @A   CHAR(20)

DECLARE    @f  float,@cn  CHAR(8)=‘aa’

局部变量赋值select

局部变量赋值:局部变量可以在定义变量的同时赋值,也可以定义后采用SET或者SELECT命令赋值。

  • 格式一:定义变量的同时赋值

例: DECLARE    @A   int=888

  • 格式二:SET 赋值

语法具体为: SET  @变量名 = 表达式

DECLARE  @a char(30),@b int      

SET  @a = 'This is my test'        

SET  @b=999

注:SET语句一次只能给一个变量赋值

局部变量赋值select

  • 格式三: SELECT 赋值

语法具体为: SELECT  @变量名 = 表达式 [,…n ]

例: DECLARE  @a char(30),@b int        

SELECT  @a = 'This is my test',@b=999  

注:SELECT语句可同时为多个变量赋值。

【1】分支结构IF

--【例1】 对给定学号进行查询,如果其平均成绩不及格的则打印学号和平均成绩,否则打印学号即可
declare @sno char(12),@avgrade numeric(3,1) 
set @sno='6310910329'
select @avgrade=avg(grade)
from scores
where sno=@sno
if @avgrade<60
begin
print @sno
print @avgrade
end
else
begin
print @sno
end
--【例2】 对给定学号进行查询,运用多分支IF句型实现分等级打印学生成绩。
declare @sno char(12),@grade float(10)
set @sno='6310910329'
select @grade=grade
from scores
IF @grade>=90.0   
begin 
PRINT '优秀' 
print @grade
end
ELSE IF @grade>=80.0  
begin 
PRINT '良好'
print @grade
end
ELSE IF @grade>=70.0  
begin
PRINT '中等'
print @grade
end
ELSE IF @grade>=60.0 
begin 
PRINT '及格'
print @grade
end
ELSE   
PRINT '不及格'

【2】分支结构CASE

简单CASE语句

--【例1】查询教师姓名、职称以及职称等级。其中职称等级对应规则为:
--教授与副教授为高级;讲师为中级;助教为初级;其它为不清楚。
--select teachername,profession,
--case profession
--when '教授' then  '高级'
--when '副教授' then  '高级'
--when '讲师' then  '中级'
--when '助教' then  '初级'
--else '不清楚'
--end as 职称等级
--from teacher;

搜索CASE语句

--【例2】查询grade表中的学号、课程号以及成绩等级。其中成绩等级对应规则为:
--成绩>=90,等级为“优”;
--成绩>=80,等级为“良”;
--成绩>=60,等级为“及格”;
--成绩<60,等级为“不及格”。
select sno,grade,course,--逗号千万不要忘记
case
when grade >=90 then '优'
when grade >=80 then '良'
when grade >=60 then '及格'
when grade< 60 then '不及格'
end as 等级
from scores

【3】循环结构While

看的懂即可,和C语言差不多

【4】系统函数

进入函数,函数和C语言也一样,分为系统函数和用户自定义函数(个人创建)

常用字符串函数

  • ltrim(x)函数用于去掉字符串x开头的所有空格字符。
  • rtrim(x)函数用于去掉字符串x结尾的所有空格字符。
  • left(x,n)函数返回字符串x的前n个字符。
  • right(x,n)函数返回字符串x的后n个字符。
  • substring(x,start,length)函数返回从字符串x的第n个位置开始获取length长度的字符串。
  • concat(x1,x2,….)函数用于将x1、x2等若干个字符串连接成一个新字符串。
--【例1】将字符串' 中 国 '作为参数,观察两个函数的返回结果。
select ltrim('  中国')
select rtrim('中国   ')
select left('中国',1)
select right('中国',1)
select substring('我爱中国',1,2)
select concat('我爱','中国')

时间函数

  • GETDATE()函数返回当前系统日期和时间。(无参数)          
  • YEAR(date)函数返回表示指定日期中的年份。(有参数)
--【例2】采用系统函数返回当前系统日期和时间以及当前的年份。
select GETDATE(),YEAR(GETDATE())

【5】自定义函数—标量函数

  • 标量型函数只能返回单个值。
  • 只能是输入参数,不能有输出参数,所有输入参数前加@
  • create后返回,单词是returns,不是return
  • returns 后面是返回值的变量类型
  • 在函数体中式 return

函数创建

函数调用


🙂

--【例1】创建一个名为get_name_fn()的函数,该函数的功能是为根据学生学号查询学生姓名。并且调用
--create function get_name_fn(@sno char(12))
--returns char(8)
--begin
-- declare @sname char(8)
-- select @sname=sname from student 
-- where sno=@sno
-- return @sname
--end;
--调用
--print dbo.get_name_fn('6310410104 ')

--【例2】创建一个函数get_name_fn(),该函数查询成绩不及格的学生的学号,并且调用
--create function get_name_down_fn(@grade int)
--returns char(8)
--begin
--declare @sno char(8)
--select @sno=sno from scores
--where grade=@grade
--return @sno
--end;
----调用
--print dbo.get_name_down_fn(60)
//❌查询结果只有一个??

【6】自定义函数—内嵌表值函数

  • 内联表值函数返回结果为一张表

函数创建

函数调用


🙂

--【例1】创建一个函数get_name_fn(),该函数查询成绩不及格的学生的学号,并且调用
--create function get_grade_down_fn(@grade as int)
--returns table
--return
--(  
--select sno from scores
--where grade=@grade
--)
----调用
--select *
--from dbo.get_grade_down_fn(60)
//✔

这章的内容会考察一个【大题】必须会!!但是其实和C语言差不多,相信大家都能够轻松上手。

目录
相关文章
|
1月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
3月前
|
SQL 数据处理 数据库
|
3月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
335 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库基础第二篇(函数)
MySQL数据库基础第二篇(函数)
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
45 5
|
5月前
|
关系型数据库 MySQL 数据库
MySQL数据库——函数-字符串函数、数值函数、日期函数、流程函数
MySQL数据库——函数-字符串函数、数值函数、日期函数、流程函数
46 2
|
5月前
|
存储 传感器 时序数据库
时序数据库influx有字符串拼接函数吗
【6月更文挑战第25天】时序数据库influx有字符串拼接函数吗
93 0
|
5月前
|
SQL 分布式计算 MaxCompute
MaxCompute操作报错合集之通过UDF(用户定义函数)请求外部数据库资源并遇到报错,是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
239 0
|
5月前
|
存储 SQL 关系型数据库
MySQL数据库——存储函数(介绍、案例)
MySQL数据库——存储函数(介绍、案例)
144 0
|
5月前
|
存储 SQL 关系型数据库
MySQL数据库——存储过程-循环(while、repeat、loop)
MySQL数据库——存储过程-循环(while、repeat、loop)
1064 0