我的云文档怎么没有了(我的云文档怎么找)
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(目标类型名, 变量名)
这个思路可以推广到任何多个整数求最大值。
但是这种做法不符合结构化程序设计的原则。
其他系统函数大家下去自行学习。
Java程序实现阶乘:
SQL 数据库
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。