数据库笔记09:Transact-SQL语言编程基础

网友投稿 719 2022-05-29

/*********************************

第九单元 Transact-SQL语言编程基础

***********************************/

/*

了解基本知识点,参看教材P176~184

1、标识符(identifier)

(1)构成:字母、数字、下划线、@(at)、#(sharp)

(2)打头:不能以数字打头

(3)避免:不能使用T-SQL保留字

2、分隔符(separator)

方括号[]或双引号""

3、数据类型(data type)

4、常量(constant)

5、变量(variable)

(1)局部变量:都是以@打头的变量,可读可写

(2)全局变量:都是以@@打头的变量,只能访问但不能修改

6、运算符(operator)

7、表达式(expression)

8、函数(function)

9、对象的引用:四个层次(服务器名.数据库名.数据库所有者名.对象名)

*/

/*

任务:不用切换数据库,直接访问Xk数据库中的Student表记录

*/

SELECT   *

FROM   Student ;   --如果当前数据库不是Xk,那么就报错找不到对象名Student

SELECT   *

FROM   [ Q - 7 A972CB106 \ SQL2005 ]. Xk . dbo . Student ;   --有点类似于访问磁盘文件采用的完整标识符(c:\dx\notice\xy.txt)

SELECT   *

FROM   Xk . dbo . Student ;   --Xk数据库就在本地数据库服务器上,所以可以省掉服务器名

SELECT   *

FROM   Xk .. Student ;   --省掉数据库所有者名称,但是不能省掉原点

/*

任务:SQL Server 编程

*/

--1. 编程计算50与60之和

--声明部分

DECLARE  @ a   int ,  @ b   int ,  @ sum   int    --定义三个整型变量

--输入部分

SET  @ a = 50   --给变量a赋值

SET  @ b = 60   --给变量b赋值

--处理部分

SELECT  @ sum = @ a + @ b

--输出部分

PRINT  @ sum

GO

/*********************/

--声明部分

DECLARE  @ a   int ,  @ b   int ,  @ sum   int    --定义三个整型变量

--输入部分

SET  @ a = 50   --给变量a赋值

SET  @ b = 60   --给变量b赋值

--处理部分

SELECT  @ sum = @ a + @ b

--输出部分(T-SQL不会自动进行类型转换,必须用户调用类型转换函数CONVERT())

PRINT   CONVERT ( varchar ,  @ a )+ '+' + CONVERT ( varchar ,  @ b )+ '=' + CONVERT ( varchar ,  @ sum )

GO

--2. 输出SQL Server的版本号与服务器名称

-- ''是字符串或日期常量的定界符(delimiter)

PRINT   'SQL Server 版本号:' + @@ VERSION    --@@打头的是全局变量

PRINT   '服务器名称:' + @@ SERVERNAME   --@@打头的是全局变量

SET  @@ VERSION = 2012

GO

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

GO

--结论:全部变量是以@@打头,只能访问,不能修改其值

--3. 显示Course表有多少类课程,利用局部变量保存,然后再输出

USE   Xk   --切换上下文数据库

GO

SELECT   COUNT ( DISTINCT   Kind )  课程类别数  FROM   Course ;

DECLARE  @ KindCount   int

SELECT  @ KindCount = COUNT ( DISTINCT   Kind )   FROM   Course ;

PRINT   'Course表中有' + CONVERT ( varchar ,  @ KindCount )+ '种类别的课程。'

GO

--4. 输入一个整数,判断奇偶性。

DECLARE  @ n   int

SET  @ n = 216

IF  @ n % 2 = 0

PRINT   '偶数'

ELSE

PRINT   '奇数'

GO

/*

Java代码:

public class JudgeOddEven {

public static void main(String[] args) {

int n;

n = 215;

if (n % 2 == 0) {

System.out.println("偶数");

} else {

System.out.println("奇数");

}

}

}

VB代码:

Dim n As Integer

n = 215

If n Mod 2 = 0 Then

Print "偶数"

Else

Print "奇数"

End If

*/

--5. 编程计算1+2+3+……+100

--声明变量

DECLARE  @ i   int ,  @ sum   int

--变量初始化

SELECT  @ i = 1 ,  @ sum = 0

WHILE  @ i <= 100   --设置循环条件

--循环体(BEGIN...END作用类似于Java程序里花括号{})

BEGIN

SET  @ sum = @ sum + @ i   --累加

SET  @ i = @ i + 1   --迭代

END

PRINT   '1+2+...+100=' + CONVERT ( varchar ,  @ sum )

GO

/*

public class Sum {

public static void main(String[] args) {

int i, sum;

i = 1;

sum = 0;

while (i <= 100) {

sum = sum + i;

i++;

}

System.out.println("1+2+...+100=" + sum);

}

}

*/

--6. 输入两个整数,输出较大者

DECLARE  @ a   int ,  @ b   int ,  @ max   int

SELECT  @ a = 45 ,  @ b = 24

SET  @ max = @ a

IF  @ b > @ max

SET  @ max = @ b

PRINT   'max=' + CONVERT ( varchar ,  @ max )

GO

--思考题:输入三个整数,输出最大那个整数

DECLARE  @ a   int ,  @ b   int ,  @ c   int ,  @ max   int

SELECT  @ a = 15 ,  @ b = 24 ,  @ c =- 23

SET  @ max = @ a

IF  @ b > @ max

SET  @ max = @ b

IF  @ c > @ max

SET  @ max = @ c

PRINT   'max=' + CONVERT ( varchar ,  @ max )

GO

--7. 对课程进行分类统计,要求显示课程类别、课程名称和报名人数,并计算各类课程的平均报名人数。查询结果按照课程类别与报名人数升序排列。

SELECT   Kind ,   '课程类别' =

CASE   Kind

WHEN   '工程技术'   THEN   '工科类课程'

WHEN   '人文'   THEN   '人文类课程'

WHEN   '信息技术'   THEN   '信息类课程'

ELSE   '其它类课程'

END ,   '课程名称' = CouName ,   '报名人数' = WillNum

FROM   Course

ORDER   BY   Kind ,   WillNum

COMPUTE   AVG ( WillNum )   BY   Kind

GO

--8. 利用IF与GOTO语句实现1+2+3+……+100

DECLARE  @ i   int ,  @ sum   int

SELECT  @ i = 1 ,  @ sum = 0

hw :   SET  @ sum = @ sum + @ i

SET  @ i = @ i + 1

IF  @ i <= 100

GOTO   hw

PRINT   '1+2+3+…+100=' + CONVERT ( varchar , @ sum )

GO

/*

#include "stdio.h"

void main()

{

int i=1, sum=0;

hw: sum=sum+i;

i++;

if(i<=100) goto hw;

printf("sum=%d\n",sum);

}

*/

/*

任务:使用系统函数

参看教材P186~193

字符串函数、日期函数、数学函数、系统函数、元数据函数、安全函数、配置函数、聚合函数和排名函数

*/

--1. 查看“数据库”在“大型数据库开发”的起始位置

SELECT   CHARINDEX ( '数据库' , '大型数据库开发' )   --以字符为单位来定位的,一个英文字母、数字与汉字都认为是一个字符

/*

public class SearchString {

public static void main(String[] args) {

String str1 = "数据库";

String str2 = "大型数据库开发";

System.out.println(str2.indexOf(str1));

}

}

输出结果是2。

由于Java采用Unicode,所以一个字母、数字或汉字都当成一个字符看待。

Java程序里下标是从0开始的,因此输出结果2表明起始位置是第3个字符。

*/

--2. 输出字符串“SQL Server数据库管理系统”,要求每个字符之间加一个“*”

DECLARE  @ i   int ,  @ str   varchar ( 24 ),  @ strnew   varchar ( 48 )

SET  @ i = 1

SET  @ str = 'SQL Server数据库管理系统'

SET  @ strnew = ''

WHILE  @ i <= LEN ( @ str )

BEGIN

IF  @ i < LEN ( @ str )

SET  @ strnew = @ strnew + SUBSTRING ( @ str , @ i , 1 )+ '*'

ELSE

SET  @ strnew = @ strnew + SUBSTRING ( @ str , @ i , 1 )

SET  @ i = @ i + 1

END

PRINT  @ strnew

GO

--3. 重复显示“泸职院”3次,中间隔开3个空格,再重复显示3次。

PRINT   REPLICATE ( '泸职院' , 3 )+ SPACE ( 3 )+ REPLICATE ( '泸职院' , 3 )

--SELECT REPLICATE('泸职院',3), SPACE(3), REPLICATE('泸职院',3)

-- 说明:其它系统函数,大家下去自行练习掌握

/*

任务:创建自定义函数

*/

--1. 创建阶乘函数jc(n)

--函数三要素:函数名、参数列表、返回值

CREATE   FUNCTION   jc   --指定函数名

( @ n   int )   --指定参数(形参)

RETURNS   int   --指定返回值类型

AS

BEGIN   --函数体开始

DECLARE  @ i   int ,  @ jc   int   --声明变量

SELECT  @ i = 1 ,  @ jc = 1   --变量初始化

WHILE  @ i <= @ n   --设置循环条件

BEGIN   --循环体开始

SET  @ jc = @ jc * @ i   --累乘

SET  @ i = @ i + 1   --迭代

END   --循环体结束

RETURN  @ jc   --返回函数值

END   --函数体结束

PRINT   '5!=' + CONVERT ( varchar , dbo . jc ( 5 ))   --调用函数,传入实参

--练习:在Java程序里,创建“int jc(int n)”方法,然后在主方法里调用。

/*

public class TestJc {

public static void main(String[] args) {

System.out.println("5!=" + jc(5));

}

/**

* 阶乘函数

* @param n

* @return

*/

public   static   int   jc ( int   n )   {

int   jc   =   1 ;

for   ( int   i   =   1 ;   i   <=   n ;   i ++)   {

jc   =   jc   *   i ;

}

return   jc ;

}

}

*/

错误在于没有正确引用对象。

利用了类型转换函数CONVERT(目标类型名, 变量名)

数据库笔记09:Transact-SQL语言编程基础

这个思路可以推广到任何多个整数求最大值。

但是这种做法不符合结构化程序设计的原则。

其他系统函数大家下去自行学习。

Java程序实现阶乘:

SQL 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:对线面试官 | 字节跳动一面
下一篇:【最全的大数据面试系列】Hive面试题大全
相关文章