数据库笔记09:Transact-SQL语言编程基础
2018-03-05 21:19
351 查看
/********************************* 第九单元 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-7A972CB106\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 @sumGO
/*********************/
--声明部分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=2012GOPRINT '当前错误号:'+CONVERT(varchar, @@ERROR)GO
--结论:全部变量是以@@打头,只能访问,不能修改其值
--3. 显示Course表有多少类课程,利用局部变量保存,然后再输出
USE Xk --切换上下文数据库GO
SELECT COUNT(DISTINCT Kind) 课程类别数 FROM Course;
DECLARE @KindCount intSELECT @KindCount=COUNT(DISTINCT Kind) FROM Course;PRINT 'Course表中有'+CONVERT(varchar, @KindCount)+'种类别的课程。'GO
--4. 输入一个整数,判断奇偶性。
DECLARE @n intSET @n=216IF @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=0WHILE @i<=100 --设置循环条件 --循环体(BEGIN...END作用类似于Java程序里花括号{}) BEGIN SET @sum=@sum+@i --累加 SET @i=@i+1 --迭代 ENDPRINT '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 intSELECT @a=45, @b=24SET @max=@aIF @b>@max SET @max=@bPRINT 'max='+CONVERT(varchar, @max)GO
--思考题:输入三个整数,输出最大那个整数
DECLARE @a int, @b int, @c int, @max intSELECT @a=15, @b=24, @c=-23SET @max=@aIF @b>@max SET @max=@bIF @c>@max SET @max=@cPRINT 'max='+CONVERT(varchar, @max)GO
--7. 对课程进行分类统计,要求显示课程类别、课程名称和报名人数,并计算各类课程的平均报名人数。查询结果按照课程类别与报名人数升序排列。
SELECT Kind, '课程类别'= CASE Kind WHEN '工程技术' THEN '工科类课程' WHEN '人文' THEN '人文类课程' WHEN '信息技术' THEN '信息类课程' ELSE '其它类课程' END, '课程名称'=CouName, '报名人数'=WillNumFROM CourseORDER BY Kind, WillNumCOMPUTE AVG(WillNum) BY KindGO
--8. 利用IF与GOTO语句实现1+2+3+……+100
DECLARE @i int, @sum intSELECT @i=1, @sum=0hw: SET @sum=@sum+@iSET @i=@i+1IF @i<=100 GOTO hwPRINT '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=1SET @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 ENDPRINT @strnewGO
--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 --指定返回值类型ASBEGIN --函数体开始 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程序实现阶乘:
/*了解基本知识点,参看教材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-7A972CB106\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 @sumGO
/*********************/
--声明部分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=2012GOPRINT '当前错误号:'+CONVERT(varchar, @@ERROR)GO
--结论:全部变量是以@@打头,只能访问,不能修改其值
--3. 显示Course表有多少类课程,利用局部变量保存,然后再输出
USE Xk --切换上下文数据库GO
SELECT COUNT(DISTINCT Kind) 课程类别数 FROM Course;
DECLARE @KindCount intSELECT @KindCount=COUNT(DISTINCT Kind) FROM Course;PRINT 'Course表中有'+CONVERT(varchar, @KindCount)+'种类别的课程。'GO
--4. 输入一个整数,判断奇偶性。
DECLARE @n intSET @n=216IF @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=0WHILE @i<=100 --设置循环条件 --循环体(BEGIN...END作用类似于Java程序里花括号{}) BEGIN SET @sum=@sum+@i --累加 SET @i=@i+1 --迭代 ENDPRINT '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 intSELECT @a=45, @b=24SET @max=@aIF @b>@max SET @max=@bPRINT 'max='+CONVERT(varchar, @max)GO
--思考题:输入三个整数,输出最大那个整数
DECLARE @a int, @b int, @c int, @max intSELECT @a=15, @b=24, @c=-23SET @max=@aIF @b>@max SET @max=@bIF @c>@max SET @max=@cPRINT 'max='+CONVERT(varchar, @max)GO
--7. 对课程进行分类统计,要求显示课程类别、课程名称和报名人数,并计算各类课程的平均报名人数。查询结果按照课程类别与报名人数升序排列。
SELECT Kind, '课程类别'= CASE Kind WHEN '工程技术' THEN '工科类课程' WHEN '人文' THEN '人文类课程' WHEN '信息技术' THEN '信息类课程' ELSE '其它类课程' END, '课程名称'=CouName, '报名人数'=WillNumFROM CourseORDER BY Kind, WillNumCOMPUTE AVG(WillNum) BY KindGO
--8. 利用IF与GOTO语句实现1+2+3+……+100
DECLARE @i int, @sum intSELECT @i=1, @sum=0hw: SET @sum=@sum+@iSET @i=@i+1IF @i<=100 GOTO hwPRINT '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=1SET @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 ENDPRINT @strnewGO
--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 --指定返回值类型ASBEGIN --函数体开始 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程序实现阶乘:
相关文章推荐
- C#学习笔记09:数据库编程(一)
- 数据库基础--Transact-SQL 编程基础
- Java基础知识强化之网络编程笔记09:TCP之客户端键盘录入服务器写到文本文件中
- (笔记)数据库编程基础
- Java学习笔记(八、数据库编程基础)
- Liunx 命令行与shell脚本编程大全 第八章学习笔记(Linux系统的包管理基础)
- Java基础知识强化之网络编程笔记23:Android网络通信之 Volley(Google开源网络通信库)
- java学习笔记——数据库基础2
- 我与python约个会:09.程序编程基础3~组合数据类型
- .黑马程序员之C#编程基础学习笔记:不断要求用户输入一个数字,当用户输入end的时候显示刚才输入的数字中的最大值。
- Python网络编程基础笔记-poll实现非阻塞socket
- VB.NET的数据库基础编程[zz]
- 计算机编程基础篇笔记 (一)---面对对象和面对过程
- 黑马程序员之WinForm编程基础学习笔记:输入Email地址,输出用户名和域名。
- 数据库与MySQL 【数据库高效编程 - 学习笔记 第一章、第二章】
- 黑马程序员--编程基础学习笔记二
- 数据库基础学习笔记
- Delphi的学习笔记十五——数据库编程1
- Python网络编程基础笔记-使用minidom生成XML文件