數據庫筆記09:Transact-SQL語言編程基礎

      網友投稿 835 2025-03-31

      數據庫筆記09:Transact-SQL語言編程基礎

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

      第九單元 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小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:wps表格怎么切換為2003界面(wps更換界面)
      下一篇:excel表格如何在格里畫一個長方形
      相關文章
      国产成人99久久亚洲综合精品| 亚洲视频一区在线| 亚洲国产精品成人精品小说 | 国产午夜亚洲精品不卡电影| 亚洲国产午夜精品理论片| 久久丫精品国产亚洲av| 亚洲人成网站在线播放影院在线| 亚洲成A人片在线观看无码不卡 | 国产亚洲精品国看不卡| 亚洲片国产一区一级在线观看| 成人亚洲综合天堂| 国产精品亚洲综合网站| 亚洲国产午夜中文字幕精品黄网站| 亚洲Av无码乱码在线播放| 色欲aⅴ亚洲情无码AV| 亚洲国产精品毛片av不卡在线 | 亚洲阿v天堂在线2017免费| 四虎亚洲国产成人久久精品| 亚洲AV之男人的天堂| 亚洲午夜av影院| 亚洲色偷偷偷鲁综合| 亚洲αv久久久噜噜噜噜噜| 国产亚洲福利精品一区| 亚洲AV日韩AV永久无码绿巨人| 亚洲激情中文字幕| 亚洲理论精品午夜电影| 国产精品高清视亚洲一区二区 | 亚洲欧美日韩综合久久久| 精品亚洲成A人在线观看青青| 亚洲v国产v天堂a无码久久| 中文字幕亚洲综合久久男男| 欧洲亚洲国产清在高| 内射干少妇亚洲69XXX| 亚洲Av无码一区二区二三区| 亚洲色成人四虎在线观看| www亚洲精品少妇裸乳一区二区| 国产亚洲成人在线播放va| 久久亚洲精品成人777大小说| 亚洲日韩乱码久久久久久| 亚洲熟妇久久精品| 亚洲欧洲中文日韩久久AV乱码|