T-SQL

----------------------------------T-SQL(MSSQL_SERVER獨有語言)-------------------------------
--T-SQL基本命令:
--DECLARE 聲明
--PRINT  輸出
--getDate 獲得時間
--CONVERT 類型轉換
--CAST  類型轉換
DECLARE @name VARCHAR(60);
SET @name = '左曉芬';
PRINT @name + '電話號碼:' + CONVERT(VARCHAR(11), 13419546540);
PRINT @name + '電話號碼:' + CAST(13419546540 AS VARCHAR(11));

 

--全局變量:
--標識: @@
--例如:@@version , @@ERROR , @@CONNECTIONS , @@IDENTITY
SELECT @@VERSION AS '版本' , @@ERROR AS '錯誤數' ,
@@CONNECTIONS AS '連接數' , @@IDENTITY AS '最後標識';

 

--局部變量:
--標識: @
--例如:@sumPreson , @avgMark , @countStudent
DECLARE @sum INT;
SELECT @sum=stuNO FROM stuInfo WHERE stuName='郭麗';
PRINT @sum;
SELECT * FROM stuInfo WHERE stuNO=10006;


--利用自定義變量查詢(查詢名字叫楊榮凱同學的學號相鄰的兩個同學信息)
DECLARE @stuNO INT;
SELECT @stuNO = stuNO FROM stuInfo
WHERE stuName = '楊榮凱';
SELECT * FROM stuInfo
WHERE stuNO = @stuNO - 1 OR stuNO = @stuNO + 1;


--邏輯控制語句IF ELSE
--語法:
-- IF()
--  BEGIN
--   ......
--  END
-- ELSE
--  BEGIN
--   ......
--  END
-->例子一:
IF EXISTS (SELECT stuNO FROM stuInfo WHERE stuName='左曉芬')
 BEGIN
  PRINT '這個同學存在!';
 END
ELSE
 BEGIN
  PRINT '這個同學不存在';
 END


-->例子二:
-->統計並顯示本班筆試平均分,如果平均分在70以上,顯示“成績優秀“,
-->並顯示前三名學員的考試信息;如果在70以下,顯示“本班成績較差“,
-->並顯示後三名學員的考試信息 。
DECLARE @avgWriteExam FLOAT;
SELECT @avgWriteExam = AVG(labExam) FROM stuMark;
PRINT @avgWriteExam
IF(@avgWriteExam > 70)
 BEGIN
  PRINT '成績優秀!';
 END
ELSE
 BEGIN
  PRINT '本班成績較差';
 END

 

 

--循環控制語句 WHILE
--語法:
--WHILE()
--  BEGIN
--   ......
--  END
-->例子一:
-->累加1到100
DECLARE @sum INT , @i INT;
SET @sum = 0 ;
SET @i = 0 ;
WHILE(@i < 100)
 BEGIN
  SET @i = @i + 1;
  SET @sum = @sum + @i;
 END
PRINT '1到100累加後的值爲 : '+CONVERT(VARCHAR(10),@sum);
--當要向標量賦予一個常量值時 需要在變量前面加上SET

-->例子二
-->創建一張表,並向裏插入10000條數據
IF EXISTS ( SELECT * FROM sysobjects WHERE name='test')
DROP TABLE test ;
CREATE TABLE test(
 id INT IDENTITY(1,1) PRIMARY KEY,
 name VARCHAR(50)
);

DECLARE @count INT;
SET @count = 0 ;
WHILE(@count < 10000)
 BEGIN
  INSERT INTO test VALUES('神'+CAST( @count AS VARCHAR(10) ));
  SET @count = @count + 1 ;
 END
SELECT * FROM test;

 


--多分支語句 CASE   WHEN   THEN   WHEN   THEN   ELSE   END
--語法:
-- CASE
--  WHEN ......  THEN ......
--  WHEN ......  THEN ......
--  ELSE ......
-- END
-->例子:查詢成績表筆試成績等級
SELECT * , '等級' =
CASE
 WHEN writtenExam >= 90 THEN 'A'
 WHEN writtenExam BETWEEN 80 AND 90 THEN 'B'
 WHEN writtenExam BETWEEN 70 AND 80 THEN 'C'
 WHEN writtenExam BETWEEN 60 AND 70 THEN 'D'
 ELSE 'E'
END
FROM stuMark 


--------------------------------------------------------------------------------------

 

----------------------------------實際應用的例子--------------------------------------
-->取出TEST表中後100條數據,並按升序排列
SELECT * FROM (SELECT TOP 100 * FROM test ORDER BY id DESC) AS T ORDER BY id ASC

-->取出test表中第10行到第100行的數據
SELECT TOP 100 * FROM test EXCEPT SELECT TOP 9 * FROM test     --第一種
SELECT TOP 91 * FROM test WHERE id NOT IN(SELECT TOP 9 id FROM test )    --第二種

-->本次考試成績較差,假定要提分,確保每人筆試都通過。提分規則很簡單,
-->先每人都加2分,看是否都通過,如果沒有全部通過,每人再加2分,
-->再看是否都通過,如此反覆提分,直到所有人都通過爲止 。
DECLARE @count INT ;
SELECT @count = COUNT(*) FROM stuMark WHERE writtenExam < 60;
WHILE(@count > 0)
 BEGIN
  UPDATE stuMark SET writtenExam = writtenExam + 2 WHERE writtenExam < 60 ;
  SELECT @count = COUNT(*) FROM stuMark WHERE writtenExam < 60;
 END
SELECT * FROM stuMark;          --第一種

DECLARE @minMark FLOAT;
SELECT @minMark = MIN(writtenExam) FROM stuMark ;
PRINT '這個班級最低分爲:'+CAST( @minMark AS VARCHAR(10) );
WHILE(@minMark < 60)
 BEGIN
  UPDATE stuMark SET writtenExam = writtenExam + 2 WHERE writtenExam < 60;
  SELECT @minMark = MIN(writtenExam) FROM stuMark ;
 END
SELECT * FROM stuMark;          --第二種


-->則根據如下規則對機試成績進行反覆加分,
-->直到平均分超過85分爲止。請編寫T-SQL語句實現。
-->90分以上:   不加分
-->80-89分:   加1分
-->70-79分:   加2分
-->60-69分:   加3分
-->60分以下:   加5分
DECLARE @avg FLOAT;
SELECT @avg = AVG(labExam) FROM stuMark
WHILE(@avg <= 85)
 BEGIN
  UPDATE stuMark SET labExam = labExam +
  CASE
   WHEN labExam >= 90 THEN 0
   WHEN labExam BETWEEN 80 AND 90 THEN 1
   WHEN labExam BETWEEN 70 AND 80 THEN 2
   WHEN labExam BETWEEN 60 AND 70 THEN 3
   ELSE 5
  END
  SELECT @avg = AVG(labExam) FROM stuMark
 END
SELECT * FROM stuMark


-------------------------------------------------------------------------------------------------

 

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章