您的位置:首页 > 数据库

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

2018-03-05 21:19 281 查看
/********************************* 第九单元 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程序实现阶乘:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: