/*********************************
 第九单元 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 @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  [email protected]@打头的是全局变量
PRINT '服务器名称:'+@@SERVERNAME [email protected]@打头的是全局变量

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;
    }
}

*/


数据库笔记09:Transact-SQL语言编程基础
错误在于没有正确引用对象。
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础

数据库笔记09:Transact-SQL语言编程基础
利用了类型转换函数CONVERT(目标类型名, 变量名)
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础

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

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

这个思路可以推广到任何多个整数求最大值。
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
但是这种做法不符合结构化程序设计的原则。

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

数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
数据库笔记09:Transact-SQL语言编程基础
其他系统函数大家下去自行学习。

数据库笔记09:Transact-SQL语言编程基础
Java程序实现阶乘:
数据库笔记09:Transact-SQL语言编程基础

相关文章:

  • 2021-07-23
  • 2022-01-10
  • 2021-07-01
  • 2021-11-04
  • 2021-10-17
  • 2021-09-28
  • 2021-09-02
猜你喜欢
  • 2021-10-07
  • 2021-09-30
  • 2021-06-23
  • 2021-08-20
  • 2021-04-17
  • 2021-09-15
  • 2022-12-23
相关资源
相似解决方案