T-SQL 快速指南



T-SQL - 概述

在20世紀70年代,IBM開發了一種名為“SEQUEL”(結構化英語查詢語言)的產品,後來SEQUEL被改名為“SQL”,代表結構化查詢語言。

1986年,SQL被美國國家標準協會(ANSI)批准,1987年被國際標準化組織(ISO)批准。

SQL是一種結構化查詢語言,是所有關係資料庫管理系統(RDBMS)產品的通用資料庫語言。不同的RDBMS產品供應商透過擴充套件SQL來開發他們自己的RDBMS產品的資料庫語言。

T-SQL代表Transact-SQL,它是微軟的產品,是SQL語言的擴充套件。

示例

MS SQL Server - SQL\T-SQL

ORACLE - SQL\PL-SQL

T-SQL - 資料型別

SQL Server資料型別是一個屬性,它指定任何物件的數 據型別。SQL Server中的每個列、變數和表示式都具有相關的資料型別。這些資料型別可以在建立表時使用。您可以根據需要為表列選擇特定的資料型別。

SQL Server提供七類以及其他類別的數 據型別以供使用。

精確數值型別

型別
bigint -9,223,372,036,854,775,808 9,223,372,036,854,775,807
int -2,147,483,648 2,147,483,647
smallint -32,768 32,767
tinyint 0 255
bit 0 1
decimal -10^38 +1 10^38 –1
numeric -10^38 +1 10^38 –1
money -922,337,203,685,477.5808 +922,337,203,685,477.5807
smallmoney -214,748.3648 +214,748.3647

Numeric和decimal是固定精度和比例的資料型別,並且在功能上是等效的。

近似數值型別

型別
Float -1.79E + 308 1.79E + 308
Real -3.40E + 38 3.40E + 38

日期和時間型別

型別

datetime(3.33毫秒精度)

1753年1月1日 9999年12月31日

smalldatetime(1分鐘精度)

1900年1月1日 2079年6月6日

date(1天精度,SQL Server 2008中引入)

0001年1月1日 9999年12月31日

datetimeoffset(100納秒精度,SQL Server 2008中引入)

0001年1月1日 9999年12月31日

datetime2(100納秒精度,SQL Server 2008中引入)

0001年1月1日 9999年12月31日

time(100納秒精度,SQL Server 2008中引入)

00:00:00.0000000 23:59:59.9999999

字元字串

序號 型別和描述
1

char

固定長度非Unicode字元資料,最大長度為8,000個字元。

2

varchar

可變長度非Unicode資料,最大長度為8,000個字元。

3

Varchar (max)

可變長度非Unicode資料,最大長度為231個字元(SQL Server 2005中引入)。

4

text

可變長度非Unicode資料,最大長度為2,147,483,647個字元

Unicode字元字串

序號 型別和描述
1

nchar

固定長度Unicode資料,最大長度為4,000個字元。

2

nvarchar

可變長度Unicode資料,最大長度為4,000個字元。

3

Nvarchar (max)

可變長度Unicode資料,最大長度為230個字元(SQL Server 2005中引入)。

4

ntext

可變長度Unicode資料,最大長度為1,073,741,823個字元。

二進位制字串

序號 型別和描述
1

binary

固定長度二進位制資料,最大長度為8,000位元組。

2

varbinary

可變長度二進位制資料,最大長度為8,000位元組。

3

varbinary(max)

可變長度二進位制資料,最大長度為231位元組(SQL Server 2005中引入)。

4

image

可變長度二進位制資料,最大長度為2,147,483,647位元組。

其他資料型別

  • sql_variant - 儲存各種SQL Server支援的資料型別的值,但不包括text、ntext和timestamp。

  • timestamp - 儲存資料庫範圍內的唯一編號,每當更新行時都會更新。

  • uniqueidentifier - 儲存全域性唯一識別符號 (GUID)。

  • xml - 儲存XML資料。您可以將XML例項儲存在列或變數中(SQL Server 2005中引入)。

  • cursor - 對遊標的引用。

  • table - 儲存結果集以供以後處理。

  • hierarchyid - 用於表示層次結構中位置的可變長度系統資料型別(SQL Server 2008中引入)。

T-SQL - 建立表

建立基本表涉及命名錶並定義其列以及每列的資料型別。

SQL Server 的 CREATE TABLE 語句用於建立新表。

語法

以下是 CREATE TABLE 語句的基本語法:

CREATE TABLE table_name( 
   column1 datatype, 
   column2 datatype, 
   column3 datatype, 
   ..... 
   columnN datatype, 
   PRIMARY KEY( one or more columns ));

CREATE TABLE 是告訴資料庫系統您想要執行的操作的關鍵字。在本例中,您想要建立一個新表。表 的唯一名稱或識別符號位於 CREATE TABLE 語句之後。然後在括號中列出定義表中每一列以及它是什麼型別的資料。透過以下示例可以更清楚地理解語法。

可以使用 CREATE TABLE 語句和 SELECT 語句的組合建立現有表的副本。您可以在使用另一個表建立表中檢視完整詳細資訊。

示例

在此示例中,讓我們建立一個 CUSTOMERS 表,其中 ID 作為主鍵,NOT NULL 是約束條件,表示在建立此表中的記錄時這些欄位不能為 NULL:

CREATE TABLE CUSTOMERS( 
   ID   INT              NOT NULL, 
   NAME VARCHAR (20)     NOT NULL, 
   AGE  INT              NOT NULL, 
   ADDRESS  CHAR (25) , 
   SALARY   DECIMAL (18, 2),        
   PRIMARY KEY (ID));

您可以透過檢視 SQL 伺服器顯示的訊息來驗證您的表是否已成功建立,否則您可以使用以下命令:

exec sp_columns CUSTOMERS

以上命令產生以下輸出。

TABLE_QUALIFIER   TABLE_OWNER   TABLE_NAME   COLUMN_NAME   DATA_TYPE   TYPE_NAME
   PRECISION   LENGTH SCALE   RADIX   NULLABLE   REMARKS   COLUMN_DEF   SQL_DATA_TYPE 
   SQL_DATETIME_SUB   CHAR_OCTET_LENGTH   ORDINAL_POSITION   IS_NULLABLE   SS_DATA_TYPE
   
TestDB    dbo    CUSTOMERS   ID        4    int      10   4    0      10     0
   NULL   NULL   4   NULL    NULL      1    NO       56 
   
TestDB    dbo    CUSTOMERS   NAME      12   varchar  20   20   NULL   NULL   0
   NULL   NULL   12   NULL   20        2    NO       39
  
TestDB    dbo    CUSTOMERS   AGE       4    int      10   4    0      10     0
   NULL   NULL   4   NULL    NULL      3    NO       56 
 
TestDB    dbo    CUSTOMERS   ADDRESS   1    char     25   25   NULL   NULL   1
   NULL   NULL   1   NULL    25   4    YES  39  

TestDB    dbo    CUSTOMERS   SALARY    3    decimal  18   20   2      10     1
   NULL   NULL   3   NULL    NULL      5    YES      106 

您現在可以看到 CUSTOMERS 表存在於您的資料庫中,您可以使用它來儲存與客戶相關的所需資訊。

T-SQL - 刪除表

SQL Server 的 DROP TABLE 語句用於刪除表定義以及該表的所有資料、索引、觸發器、約束和許可權規範。

注意 - 使用此命令時必須小心,因為一旦刪除表,表中的所有資訊都將永遠丟失。

語法

以下是 DROP TABLE 語句的基本語法:

DROP TABLE table_name;

示例

讓我們首先驗證 CUSTOMERS 表,然後將其從資料庫中刪除:

Exec sp_columns CUSTOMERS;

以上命令顯示以下表。

TABLE_QUALIFIER   TABLE_OWNER   TABLE_NAME   COLUMN_NAME   DATA_TYPE   TYPE_NAME
   PRECISION   LENGTH SCALE   RADIX   NULLABLE   REMARKS   COLUMN_DEF   SQL_DATA_TYPE 
   SQL_DATETIME_SUB   CHAR_OCTET_LENGTH   ORDINAL_POSITION   IS_NULLABLE   SS_DATA_TYPE
   
TestDB    dbo    CUSTOMERS   ID        4   int        10   4    0      10     0
   NULL   NULL   4   NULL    NULL      1   NO         56 
   
TestDB    dbo    CUSTOMERS   NAME      12  varchar    20   20   NULL   NULL   0
   NULL   NULL   12   NULL   20        2   NO         39
  
TestDB    dbo    CUSTOMERS   AGE       4   int        10   4    0      10     0
   NULL   NULL   4   NULL    NULL      3   NO         56 
 
TestDB    dbo    CUSTOMERS   ADDRESS   1   char       25   25   NULL   NULL   1
   NULL   NULL   1   NULL    25        4   YES        39  

TestDB    dbo    CUSTOMERS   SALARY   3   decimal     18   20   2      10     1
   NULL   NULL   3   NULL    NULL     5   YES         106 

CUSTOMERS 表存在於資料庫中,所以讓我們刪除它。以下是執行此操作的命令。

DROP TABLE CUSTOMERS; 
Command(s) completed successfully.

使用以上命令,您將不會獲得任何行。

Exec sp_columns CUSTOMERS; 
No rows\data will be displayed 

T-SQL - INSERT 語句

SQL Server 的 INSERT INTO 語句用於向資料庫中的表新增新的資料行。

語法

以下是 INSERT INTO 語句的兩種基本語法。

INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]   
VALUES (value1, value2, value3,...valueN); 

其中 column1、column2…columnN 是您要向其中插入資料的表中的列名。

如果您要為表的所有列新增值,則不需要在 SQL 查詢中指定列名。但請確保值的順序與表中列的順序相同。以下是 SQL INSERT INTO 語法:

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

示例

以下語句將在 CUSTOMERS 表中建立六條記錄:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
  
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );  

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );  

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 ); 
 
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );  

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (6, 'Komal', 22, 'MP', 4500.00 );

語法

您可以使用第二種語法在 CUSTOMERS 表中建立記錄,如下所示:

INSERT INTO CUSTOMERS VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );

所有上述語句都將在 CUSTOMERS 表中生成以下記錄:

ID  NAME       AGE         ADDRESS              SALARY 
1   Ramesh     32          Ahmedabad            2000.00 
2   Khilan     25          Delhi                1500.00 
3   kaushik    23          Kota                 2000.00 
4   Chaitali   25          Mumbai               6500.00 
5   Hardik     27          Bhopal               8500.00 
6   Komal      22          MP                   4500.00 
7   Muffy      24          Indore               10000.00 

使用另一個表填充一個表

您可以透過另一個表上的 SELECT 語句將資料填充到表中,前提是另一個表具有一組欄位,這些欄位需要填充第一個表。以下是語法:

INSERT INTO first_table_name  
   SELECT column1, column2, ...columnN  
      FROM second_table_name 
      [WHERE condition];

T-SQL - SELECT 語句

SQL Server 的 SELECT 語句用於從資料庫表中提取資料,該資料以結果表的形式返回資料。這些結果表稱為結果集

語法

以下是 SELECT 語句的基本語法:

SELECT column1, column2, columnN FROM table_name;

其中,column1、column2…是您想要提取其值的表的欄位。如果您想要提取欄位中所有可用的欄位,那麼您可以使用以下語法:

SELECT * FROM table_name;

示例

考慮 CUSTOMERS 表具有以下記錄:

ID  NAME       AGE       ADDRESS             SALARY 
1   Ramesh     32        Ahmedabad           2000.00 
2   Khilan     25        Delhi               1500.00 
3   kaushik    23        Kota                2000.00 
4   Chaitali   25        Mumbai              6500.00 
5   Hardik     27        Bhopal              8500.00 
6   Komal      22        MP                  4500.00 
7   Muffy      24        Indore              10000.00 

以下命令是一個示例,它將提取 CUSTOMERS 表中可用的客戶的 ID、Name 和 Salary 欄位:

SELECT ID, NAME, SALARY FROM CUSTOMERS; 

以上命令將產生以下輸出。

ID  NAME          SALARY 
1   Ramesh        2000.00 
2   Khilan        1500.00 
3   kaushik       2000.00 
4   Chaitali      6500.00 
5   Hardik        8500.00 
6   Komal         4500.00 
7   Muffy         10000.00 

如果您想提取 CUSTOMERS 表的所有欄位,請使用以下查詢:

SELECT * FROM CUSTOMERS;

以上將產生以下輸出。

ID  NAME       AGE       ADDRESS              SALARY 
1   Ramesh     32        Ahmedabad            2000.00 
2   Khilan     25        Delhi                1500.00 
3   kaushik    23        Kota                 2000.00 
4   Chaitali   25        Mumbai               6500.00 
5   Hardik     27        Bhopal               8500.00 
6   Komal      22        MP                   4500.00 
7   Muffy      24        Indore               10000.00 

T-SQL - UPDATE 語句

SQL Server 的 UPDATE 查詢用於修改表中現有的記錄。

您可以將 WHERE 子句與 UPDATE 查詢一起使用以更新選定的行,否則所有行都將受到影響。

語法

以下是帶有 WHERE 子句的 UPDATE 查詢的基本語法:

UPDATE table_name 
SET column1 = value1, column2 = value2...., columnN = valueN 
WHERE [condition];

您可以使用 AND 或 OR 運算子組合 N 個條件。

示例

考慮 CUSTOMERS 表具有以下記錄:

ID  NAME       AGE       ADDRESS             SALARY 
1   Ramesh     32        Ahmedabad           2000.00 
2   Khilan     25        Delhi               1500.00 
3   kaushik    23        Kota                2000.00 
4   Chaitali   25        Mumbai              6500.00 
5   Hardik     27        Bhopal              8500.00 
6   Komal      22        MP                  4500.00 
7   Muffy      24        Indore              10000.00 

以下命令是一個示例,它將更新 ID 為 6 的客戶的 ADDRESS:

UPDATE CUSTOMERS 
SET ADDRESS = 'Pune' 
WHERE ID = 6; 

CUSTOMERS 表現在將具有以下記錄:

ID  NAME       AGE       ADDRESS             SALARY 
1   Ramesh     32        Ahmedabad           2000.00 
2   Khilan     25        Delhi               1500.00 
3   kaushik    23        Kota                2000.00 
4   Chaitali   25        Mumbai              6500.00 
5   Hardik     27        Bhopal              8500.00 
6   Komal      22        Pune                4500.00 
7   Muffy      24        Indore              10000.00 

如果您想修改 CUSTOMERS 表中的所有 ADDRESS 和 SALARY 列值,則不需要使用 WHERE 子句。UPDATE 查詢如下所示:

UPDATE CUSTOMERS 
SET ADDRESS = 'Pune', SALARY = 1000.00;

CUSTOMERS 表現在將具有以下記錄。

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Pune             1000.00 
2   Khilan     25        Pune             1000.00 
3   kaushik    23        Pune             1000.00 
4   Chaitali   25        Pune             1000.00 
5   Hardik     27        Pune             1000.00 
6   Komal      22        Pune             1000.00 
7   Muffy      24        Pune             1000.00 

T-SQL - DELETE 語句

SQL Server 的 DELETE 查詢用於從表中刪除現有記錄。

您必須將 WHERE 子句與 DELETE 查詢一起使用才能刪除選定的行,否則將刪除所有記錄。

語法

以下是帶有 WHERE 子句的 DELETE 查詢的基本語法:

DELETE FROM table_name 
WHERE [condition]; 

您可以使用 AND 或 OR 運算子組合 N 個條件。

示例

考慮 CUSTOMERS 表具有以下記錄:

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00 

以下命令是一個示例,它將刪除 ID 為 6 的客戶:

DELETE FROM CUSTOMERS 
WHERE ID = 6;

CUSTOMERS 表現在將具有以下記錄。

ID  NAME       AGE       ADDRESS              SALARY 
1   Ramesh     32        Ahmedabad            2000.00 
2   Khilan     25        Delhi                1500.00 
3   kaushik    23        Kota                 2000.00 
4   Chaitali   25        Mumbai               6500.00 
5   Hardik     27        Bhopal               8500.00 
7   Muffy      24        Indore               10000.00 

如果您想從 CUSTOMERS 表中刪除所有記錄,則不需要使用 WHERE 子句。DELETE 查詢如下所示:

DELETE FROM CUSTOMERS;

CUSTOMERS 表現在不會有任何記錄。

T-SQL - WHERE 子句

MS SQL Server 的 **WHERE** 子句用於在從單個表提取資料或與多個表連線時指定條件。

只有在滿足給定條件的情況下,它才會返回表中的特定值。您必須使用 WHERE 子句來篩選記錄並僅提取必要的記錄。

WHERE 子句不僅用於 SELECT 語句,還用於 UPDATE、DELETE 語句等,我們將在後續章節中進行探討。

語法

以下是包含 WHERE 子句的 SELECT 語句的基本語法:

SELECT column1, column2, columnN  
FROM table_name 
WHERE [condition]

您可以使用比較運算子或邏輯運算子(如 >、<、=、LIKE、NOT 等)來指定條件。下面的示例將使這個概念更加清晰。

示例

考慮 CUSTOMERS 表具有以下記錄:

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00 

以下命令是一個示例,它將從 CUSTOMERS 表中提取 ID、Name 和 Salary 欄位,其中工資大於 2000。

SELECT ID, NAME, SALARY  
FROM CUSTOMERS 
WHERE SALARY > 2000;

以上命令將產生以下輸出。

ID  NAME       SALARY 
4   Chaitali   6500.00 
5   Hardik     8500.00 
6   Komal      4500.00 
7   Muffy      10000.00

以下命令是一個示例,它將從 CUSTOMERS 表中為名為“Hardik”的客戶提取 ID、Name 和 Salary 欄位。需要注意的是,所有字串都應放在單引號('')內,而數值則不應加引號,如上例所示:

SELECT ID, NAME, SALARY  
FROM CUSTOMERS 
WHERE NAME = 'Hardik';

以上命令將產生以下輸出。

ID  NAME     SALARY 
5   Hardik   8500.00 

T-SQL - LIKE 子句

MS SQL Server 的 **LIKE** 子句用於使用萬用字元運算子將值與類似值進行比較。與 LIKE 運算子一起使用的萬用字元有兩個:

  • 百分號 (%)
  • 下劃線 (_)

百分號表示零個、一個或多個字元。下劃線表示單個數字或字元。這些符號可以組合使用。

語法

以下是 % 和 _ 的基本語法。

SELECT *\column-list FROM table_name 
WHERE column LIKE 'XXXX%' 
 
or   

SELECT *\column-list FROM table_name 
WHERE column LIKE '%XXXX%'  

or  

SELECT *\column-list FROM table_name 
WHERE column LIKE 'XXXX_'  

or  

SELECT *\column-list FROM table_name 
WHERE column LIKE '_XXXX'  

or  

SELECT  *\column-list FROM table_name 
WHERE column LIKE '_XXXX_' 

您可以使用 AND 或 OR 運算子組合 N 個條件。XXXX 可以是任何數值或字串值。

示例

以下是一些示例,這些示例顯示了 WHERE 部分具有使用 '%' 和 '_' 運算子的不同 LIKE 子句。

序號 語句 & 說明
1

WHERE SALARY LIKE '200%'

查詢以 200 開頭的任何值

2

WHERE SALARY LIKE '%200%'

查詢任何位置包含 200 的任何值

3

WHERE SALARY LIKE '_00%'

查詢第二位和第三位為 00 的任何值

4

WHERE SALARY LIKE '2_%_%'

查詢以 2 開頭且至少包含 3 個字元的任何值

5

WHERE SALARY LIKE '%2'

查詢以 2 結尾的任何值

6

WHERE SALARY LIKE '_2%3'

查詢第二位為 2 且以 3 結尾的任何值

7

WHERE SALARY LIKE '2___3'

查詢五位數中以 2 開頭並以 3 結尾的任何值

假設 CUSTOMERS 表包含以下記錄。

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00 

以下命令是一個示例,它將顯示 CUSTOMERS 表中 SALARY 以 200 開頭的所有記錄。

SELECT * FROM CUSTOMERS 
WHERE SALARY LIKE '200%'; 

以上命令將產生以下輸出。

ID   NAME     AGE     ADDRESS       SALARY 
1    Ramesh   32      Ahmedabad     2000.00 
3    kaushik  23      Kota          2000.00

T-SQL - ORDER BY 子句

MS SQL Server 的 **ORDER BY** 子句用於根據一個或多個列對資料進行升序或降序排序。某些資料庫預設按升序對查詢結果進行排序。

語法

以下是 ORDER BY 子句的基本語法。

SELECT column-list  
FROM table_name  
[WHERE condition]  
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

您可以在 ORDER BY 子句中使用多個列。請確保您用於排序的列必須在列列表中。

示例

考慮 CUSTOMERS 表具有以下記錄:

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00 

以下命令是一個示例,它將按 NAME 和 SALARY 升序排序結果。

SELECT * FROM CUSTOMERS 
   ORDER BY NAME, SALARY 

以上命令將產生以下輸出。

ID  NAME       AGE       ADDRESS           SALARY 
4   Chaitali   25        Mumbai            6500.00 
5   Hardik     27        Bhopal            8500.00 
3   kaushik    23        Kota              2000.00 
2   Khilan     25        Delhi             1500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00 
1   Ramesh     32        Ahmedabad         2000.00 

以下命令是一個示例,它將按 NAME 降序排序結果。

SELECT * FROM CUSTOMERS 
   ORDER BY NAME DESC

上述命令將產生以下結果:

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00
7   Muffy      24        Indore             10000.00  
6   Komal      22        MP                 4500.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00
5   Hardik     27        Bhopal             8500.00
4   Chaitali   25        Mumbai             6500.00  

T-SQL - GROUP BY 子句

SQL Server 的 **GROUP BY** 子句與 SELECT 語句一起使用,用於將相同的資料排列成組。

GROUP BY 子句位於 SELECT 語句中的 WHERE 子句之後,ORDER BY 子句之前。

語法

以下是 GROUP BY 子句的基本語法。GROUP BY 子句必須位於 WHERE 子句中的條件之後,如果使用 ORDER BY 子句,則必須位於 ORDER BY 子句之前。

SELECT column1, column2 
FROM table_name 
WHERE [ conditions ] 
GROUP BY column1, column2 
ORDER BY column1, column2 

示例

假設 CUSTOMERS 表包含以下記錄:

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00 

如果您想知道每個客戶的工資總額,則以下將是 GROUP BY 查詢。

SELECT NAME, SUM(SALARY) as [sum of salary] FROM CUSTOMERS 
   GROUP BY NAME;

以上命令將產生以下輸出。

NAME        sum of salary 
Chaitali    6500.00 
Hardik      8500.00 
kaushik     2000.00 
Khilan      1500.00 
Komal       4500.00 
Muffy       10000.00 
Ramesh      2000.00

現在讓我們考慮以下 CUSTOMERS 表,其中包含具有重複名稱的記錄。

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00 
2   Khilan     25        Delhi             1500.00 
3   kaushik    23        Kota              2000.00 
4   Chaitali   25        Mumbai            6500.00 
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00 

如果我們想知道每個客戶的工資總額,則以下將是 GROUP BY 查詢。

SELECT NAME, SUM(SALARY) as [sum of salary] FROM CUSTOMERS 
   GROUP BY NAME 

以上命令將產生以下輸出。

NAME        sum of salary 
Hardik      8500.00 
kaushik     8500.00 
Komal       4500.00 
Muffy       10000.00 
Ramesh      3500.00 

T-SQL - DISTINCT 子句

MS SQL Server 的 **DISTINCT** 關鍵字與 SELECT 語句一起使用,用於消除所有重複記錄並僅提取唯一記錄。

在表中可能存在多個重複記錄的情況。在提取此類記錄時,提取唯一記錄比提取重複記錄更有意義。

語法

以下是用於消除重複記錄的 DISTINCT 關鍵字的基本語法。

SELECT DISTINCT column1, column2,.....columnN  
FROM table_name 
WHERE [condition] 

示例

假設 CUSTOMERS 表包含以下記錄。

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00 

讓我們看看以下 SELECT 查詢是如何返回重複的工資記錄的。

SELECT SALARY FROM CUSTOMERS 
   ORDER BY SALARY 

上述命令將產生以下輸出,其中工資 2000 出現了兩次,這是原始表中的重複記錄。

SALARY 
1500.00 
2000.00 
2000.00 
4500.00 
6500.00 
8500.00 
10000.00

現在讓我們在上述 SELECT 查詢中使用 DISTINCT 關鍵字,並檢視結果。

SELECT DISTINCT SALARY FROM CUSTOMERS 
   ORDER BY SALARY 

上述命令產生以下輸出,其中我們沒有任何重複項。

SALARY 
1500.00 
2000.00 
4500.00 
6500.00 
8500.00 
10000.00 

T-SQL - 表連線

MS SQL Server 的 **Joins** 子句用於組合資料庫中兩個或多個表中的記錄。JOIN 是一種透過使用每個表中通用的值來組合來自兩個表中的欄位的方法。

考慮以下兩個表:(a) CUSTOMERS 表如下:

ID  NAME       AGE       ADDRESS             SALARY 
1   Ramesh     32        Ahmedabad           2000.00 
2   Khilan     25        Delhi               1500.00 
3   kaushik    23        Kota                2000.00 
4   Chaitali   25        Mumbai              6500.00 
5   Hardik     27        Bhopal              8500.00 
6   Komal      22        MP                  4500.00 
7   Muffy      24        Indore              10000.00 

(b) 另一個表是 ORDERS,如下所示:

OID  DATE                       CUSTOMER_ID        AMOUNT 
100  2009-10-08 00:00:00.000    3                  1500.00 
101  2009-11-20 00:00:00.000    2                  1560.00 
102  2009-10-08 00:00:00.000    3                  3000.00 
103  2008-05-20 00:00:00.000    4                  2060.00 

讓我們在 SELECT 語句中連線這兩個表,如下所示:

SELECT ID, NAME, AGE, AMOUNT 
   FROM CUSTOMERS, ORDERS 
   WHERE  CUSTOMERS.ID = ORDERS.CUSTOMER_ID 
OR 
SELECT A.ID, A.NAME, A.AGE, B.AMOUNT 
   FROM CUSTOMERS A inner join  ORDERS B on A.ID = B.Customer_ID 

以上命令將產生以下輸出。

ID   NAME      AGE    AMOUNT 
2    Khilan    25     1560.00 
3    kaushik   23     1500.00 
3    kaushik   23     3000.00 
4    Chaitali  25     2060.00 

值得注意的是,連線是在 WHERE 子句中執行的。可以使用多種運算子來連線表,例如 =、<、>、<>、<=、>=、!=、BETWEEN、LIKE 和 NOT;它們都可以用於連線表。但是,最常見的運算子是等號。

MS SQL Server 連線型別:

MS SQL Server 中有多種型別的連線:

  • **INNER JOIN** - 當兩個表中都存在匹配項時返回行。

  • **LEFT JOIN** - 返回左側表的所有行,即使右側表中沒有匹配項。

  • **RIGHT JOIN** - 返回右側表的所有行,即使左側表中沒有匹配項。

  • **FULL JOIN** - 當其中一個表中存在匹配項時返回行。

  • **SELF JOIN** - 這用於將表本身連線到自身,就好像該表是兩個表一樣,在 MS SQL Server 語句中臨時重新命名至少一個表。

  • **CARTESIAN JOIN** - 返回來自兩個或多個連線表的記錄集的笛卡爾積。

T-SQL - 子查詢

**子查詢** 或 **內部查詢** 或 **巢狀查詢** 是另一個 SQL Server 查詢中的查詢,並巢狀在 WHERE 子句中。子查詢用於返回將在主查詢中用作條件的資料,以進一步限制要檢索的資料。

子查詢可以與 SELECT、INSERT、UPDATE 和 DELETE 語句以及 =、<、>、>=、<=、IN、BETWEEN 等運算子一起使用。

子查詢必須遵循以下一些規則:

  • 必須將子查詢括在括號中。

  • 子查詢必須包含 SELECT 子句和 FROM 子句。

  • 子查詢可以包含可選的 WHERE、GROUP BY 和 HAVING 子句。

  • 子查詢不能包含 COMPUTE 或 FOR BROWSE 子句。

  • 只有在包含 TOP 子句時才能包含 ORDER BY 子句。

  • 您可以巢狀多達 32 層的子查詢。

帶有 SELECT 語句的子查詢

語法

子查詢最常與 SELECT 語句一起使用。以下是基本語法。

SELECT column_name [, column_name ] 
FROM   table1 [, table2 ] 
WHERE  column_name OPERATOR 
   (SELECT column_name [, column_name ] 
   FROM table1 [, table2 ] 
   [WHERE]) 

示例

假設 CUSTOMERS 表包含以下記錄。

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00 

讓我們將以下子查詢與 SELECT 語句一起應用。

SELECT *  
   FROM CUSTOMERS
   WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500)

以上命令將產生以下輸出。

ID  NAME       AGE       ADDRESS          SALARY 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
7   Muffy      24        Indore           10000.00 

帶有 INSERT 語句的子查詢

子查詢也可以與 INSERT 語句一起使用。INSERT 語句使用子查詢返回的資料插入到另一個表中。子查詢中的選擇資料可以使用任何字元、日期或數字函式進行修改。

語法

以下是基本語法。

INSERT INTO table_name [ (column1 [, column2 ]) ] 
   SELECT [ *|column1 [, column2 ] 
   FROM table1 [, table2 ] 
   [ WHERE VALUE OPERATOR ]

示例

考慮一個與 CUSTOMERS 表結構相似的表 CUSTOMERS_BKP。以下是將完整的 CUSTOMERS 表複製到 CUSTOMERS_BKP 的語法。

INSERT INTO CUSTOMERS_BKP 
   SELECT * FROM CUSTOMERS  
   WHERE ID IN (SELECT ID FROM CUSTOMERS)

帶有 UPDATE 語句的子查詢

子查詢可以與 UPDATE 語句一起使用。使用 UPDATE 語句與子查詢時,可以更新表中的單個列或多個列。

語法

以下是基本語法。

UPDATE table 
SET column_name = new_value 
[ WHERE OPERATOR [ VALUE ] 
   (SELECT COLUMN_NAME 
   FROM TABLE_NAME) 
   [ WHERE) ] 

示例

讓我們假設我們有可用的 CUSTOMERS_BKP 表,它是 CUSTOMERS 表的備份。

以下命令示例將 CUSTOMERS 表中所有年齡大於或等於 27 的客戶的 SALARY 更新為 0.25 倍。

UPDATE CUSTOMERS 
   SET SALARY = SALARY * 0.25 
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP WHERE AGE >= 27 )

這將影響兩行,最終 CUSTOMERS 表將包含以下記錄。

ID  NAME       AGE       ADDRESS             SALARY 
1   Ramesh     32        Ahmedabad           500.00 
2   Khilan     25        Delhi               1500.00 
3   kaushik    23        Kota                2000.00 
4   Chaitali   25        Mumbai              6500.00 
5   Hardik     27        Bhopal              2125.00 
6   Komal      22        MP                  4500.00 
7   Muffy      24        Indore              10000.00 

帶有 DELETE 語句的子查詢

子查詢可以與 DELETE 語句一起使用,就像上面提到的任何其他語句一樣。

語法

以下是基本語法。

DELETE FROM TABLE_NAME 
[ WHERE OPERATOR [ VALUE ] 
   (SELECT COLUMN_NAME 
   FROM TABLE_NAME) 
   [ WHERE) ] 

示例

讓我們假設我們有可用的 CUSTOMERS_BKP 表,它是 CUSTOMERS 表的備份。

以下命令示例將刪除 CUSTOMERS 表中所有年齡大於或等於 27 的客戶的記錄。

DELETE FROM CUSTOMERS 
   WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP WHERE AGE >=27 )

這將影響兩行,最終 CUSTOMERS 表將包含以下記錄。

ID  NAME       AGE       ADDRESS          SALARY 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00  
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00 

T-SQL - 儲存過程

MS SQL Server 的 **儲存過程** 用於節省時間,避免一遍遍編寫相同的程式碼,而是將其儲存在資料庫中,並透過傳遞引數來獲得所需輸出。

語法

以下是儲存過程建立的基本語法。

Create procedure <procedure_Name> 
As 
Begin 
<SQL Statement> 
End 
Go

示例

假設 CUSTOMERS 表包含以下記錄。

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00 

以下命令是一個示例,它將從 Testdb 資料庫的 CUSTOMERS 表中提取所有記錄。

CREATE PROCEDURE SelectCustomerstabledata 
AS 
SELECT * FROM Testdb.Customers 
GO

以上命令將產生以下輸出。

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00 
2   Khilan     25        Delhi             1500.00 
3   kaushik    23        Kota              2000.00 
4   Chaitali   25        Mumbai            6500.00 
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00 

T-SQL - 事務

**事務** 是針對資料庫執行的工作單元。事務是按邏輯順序完成的工作單元或序列,無論是由使用者手動完成,還是由某種資料庫程式自動完成。

事務是對資料庫進行一個或多個更改的傳播。例如,如果您正在建立記錄、更新記錄或從表中刪除記錄,那麼您正在對錶執行事務。控制事務對於確保資料完整性和處理資料庫錯誤非常重要。

實際上,您將許多 SQL 查詢組合成一組,並將它們作為一個事務的一部分一起執行。

事務屬性

事務具有以下四個標準屬性,通常用首字母縮寫 ACID 來表示:

  • **原子性** - 確保工作單元中的所有操作都成功完成;否則,事務將在失敗點中止,之前的操作將回滾到其以前的狀態。

  • **一致性** - 確保資料庫在成功提交的事務後正確更改狀態。

  • **隔離性** - 使事務能夠獨立於彼此並透明地執行。

  • **永續性** - 確保已提交事務的結果或效果在系統故障的情況下仍然存在。

事務控制

以下命令用於控制事務:

  • **COMMIT** - 儲存更改。

  • **ROLLBACK** - 回滾更改。

  • **SAVEPOINT** - 在事務組內建立用於 ROLLBACK 的點。

  • **SET TRANSACTION** - 為事務命名。

事務控制命令僅與 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。在建立表或刪除表時不能使用它們,因為這些操作會自動提交到資料庫中。

為了在 MS SQL Server 中使用事務控制命令,我們必須使用“begin tran”或 begin transaction 命令開始事務,否則這些命令將不起作用。

COMMIT 命令

COMMIT 命令是用於將事務呼叫的更改儲存到資料庫的事務命令。此命令儲存自上次 COMMIT 或 ROLLBACK 命令以來對資料庫的所有事務。

語法

以下是 COMMIT 命令的語法。

COMMIT; 

示例

假設 CUSTOMERS 表包含以下記錄。

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00 
2   Khilan     25        Delhi             1500.00 
3   kaushik    23        Kota              2000.00 
4   Chaitali   25        Mumbai            6500.00 
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00 

以下命令示例將刪除表中 age = 25 的記錄,然後提交資料庫中的更改。

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25 
COMMIT 

結果,表中的兩行將被刪除,SELECT 語句將產生以下輸出。

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00
3   kaushik    23        Kota              2000.00
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00 

ROLLBACK 命令

ROLLBACK 命令是用於撤消尚未儲存到資料庫的事務的事務命令。此命令只能用於撤消自上次發出 COMMIT 或 ROLLBACK 命令以來的事務。

語法

以下是 ROLLBACK 命令的語法。

ROLLBACK

示例

假設 CUSTOMERS 表包含以下記錄。

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00 

以下命令示例將刪除表中 age = 25 的記錄,然後回滾資料庫中的更改。

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25; 
ROLLBACK

結果,刪除操作不會影響表,SELECT 語句將產生以下結果。

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00 

SAVEPOINT 命令

SAVEPOINT 是事務中的一個點,您可以在該點將事務回滾到某個點,而無需回滾整個事務。

語法

以下是 SAVEPOINT 命令的語法。

SAVE TRANSACTION SAVEPOINT_NAME

此命令僅用於在事務性語句之間建立 SAVEPOINT。ROLLBACK 命令用於撤消一組事務。

以下是回滾到 SAVEPOINT 的語法。

ROLLBACK TO SAVEPOINT_NAME

在以下示例中,我們將從 CUSTOMERS 表中刪除三條不同的記錄。我們必須在每次刪除之前建立一個 SAVEPOINT,以便我們可以隨時回滾到任何 SAVEPOINT 以將相應的資料返回到其原始狀態。

示例

考慮 CUSTOMERS 表具有以下記錄:

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00 

以下是操作序列:

Begin Tran 
SAVE Transaction SP1 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 1  
1 row deleted. 
SAVE Transaction SP2 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 2 
1 row deleted.
SAVE Transaction SP3 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 3 
1 row deleted.

已經進行了三次刪除,但是,我們改變了主意,並決定回滾到我們標識為 SP2 的 SAVEPOINT。因為 SP2 是在第一次刪除後建立的,所以最後兩次刪除被撤消了:

ROLLBACK Transaction SP2 
Rollback complete. 

請注意,由於我們回滾到 SP2,所以只進行了第一次刪除。

SELECT * FROM CUSTOMERS 

已選擇 6 行。

ID  NAME       AGE       ADDRESS          SALARY 
2   Khilan     25        Delhi        1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00 

SET TRANSACTION 命令

SET TRANSACTION 命令可用於啟動資料庫事務。此命令用於指定後續事務的特性。

語法

以下是 SET TRANSACTION 的語法。

SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>

T-SQL - 索引

索引是資料庫搜尋引擎可以用來加速資料檢索的特殊查詢表。簡單地說,索引是指向表中資料的指標。資料庫中的索引非常類似於書末的索引。

例如,如果您想引用書中討論某個主題的所有頁面,您首先參考索引,該索引按字母順序列出所有主題,然後參考一個或多個特定頁碼。

索引有助於加快 SELECT 查詢和 WHERE 子句的速度,但會減慢資料輸入(使用 UPDATE 和 INSERT 語句)的速度。建立或刪除索引不會對資料產生任何影響。

建立索引涉及 CREATE INDEX 語句,該語句允許您命名索引,指定表以及要索引的列,並指示索引是升序還是降序。

索引也可以是唯一的,類似於 UNIQUE 約束,因為它可以防止在存在索引的列或列組合中插入重複項。

CREATE INDEX 命令

以下是 CREATE INDEX 的基本語法。

語法

CREATE INDEX index_name ON table_name

單列索引

單列索引是僅基於一個表列建立的索引。以下是基本語法。

語法

CREATE INDEX index_name 
ON table_name (column_name)

示例

CREATE INDEX singlecolumnindex 
ON customers (ID)

唯一索引

唯一索引不僅用於效能,也用於資料完整性。唯一索引不允許將任何重複值插入表中。以下是基本語法。

語法

CREATE UNIQUE INDEX index_name 
on table_name (column_name)

示例

CREATE UNIQUE INDEX uniqueindex 
on customers (NAME)

組合索引

組合索引是表中兩列或多列上的索引。以下是基本語法。

語法

CREATE INDEX index_name on table_name (column1, column2) 

示例

CREATE INDEX compositeindex 
on customers (NAME, ID)

無論建立單列索引還是組合索引,都要考慮在查詢的 WHERE 子句中經常用作篩選條件的列。

如果只使用一列,則應選擇單列索引。如果 WHERE 子句中經常使用兩列或多列作為篩選器,則組合索引是最佳選擇。

隱式索引

隱式索引是由資料庫伺服器在建立物件時自動建立的索引。主鍵約束和唯一約束會自動建立索引。

DROP INDEX 命令

可以使用 MS SQL SERVER DROP 命令刪除索引。刪除索引時應小心,因為效能可能會變慢或變快。

語法

以下是基本語法。

DROP INDEX tablename.index_name

何時避免使用索引?

雖然索引旨在提高資料庫的效能,但在某些情況下應避免使用索引。以下指南指示何時應重新考慮使用索引:

  • 不應在小型表上使用索引。

  • 頻繁進行大型批次更新或插入操作的表不應建立索引。

  • 不應在包含大量 NULL 值的列上使用索引。

  • 不應為經常被操作的列建立索引。

T-SQL - 函式

MS SQL Server 具有許多內建函式來對字串或數字資料進行處理。以下是所有有用的 SQL 內建函式的列表:

T-SQL - 字串函式

MS SQL Server 字串函式可以應用於字串值,也可以返回字串值或數字資料。

以下是帶示例的字串函式列表。

ASCII()

字元表示式的 ASCII 碼值將作為輸出。

示例

以下查詢將給出給定字元的 ASCII 碼值。

Select ASCII ('word') 

CHAR()

給定 ASCII 碼或整數的字元將作為輸出。

示例

以下查詢將給出給定整數的字元。

Select CHAR(97)

NCHAR()

給定整數的 Unicode 字元將作為輸出。

示例

以下查詢將給出給定整數的 Unicode 字元。

Select NCHAR(300)

CHARINDEX()

給定字串表示式中給定搜尋表示式的起始位置將作為輸出。

示例

以下查詢將給出給定字串表示式“KING”中“G”字元的起始位置。

Select CHARINDEX('G', 'KING')

LEFT()

給定字串左側的指定數量的字元將作為輸出。

示例

以下查詢將給出給定字串“WORLD”中提到的 4 個字元的字串“WORL”。

Select LEFT('WORLD', 4)

RIGHT()

給定字串右側的指定數量的字元將作為輸出。

示例

以下查詢將給出給定字串“INDIA”中提到的 3 個字元的字串“DIA”。

Select RIGHT('INDIA', 3)

SUBSTRING()

基於起始位置值和長度值的部分字串將作為給定字串的輸出。

示例

以下查詢將給出“WOR”、“DIA”、“ING”字串,因為我們分別為給定字串“WORLD”、“INDIA”和“KING”提到了 (1,3)、(3,3) 和 (2,3) 作為起始值和長度值。

Select SUBSTRING ('WORLD', 1,3) 
Select SUBSTRING ('INDIA', 3,3) 
Select SUBSTRING ('KING', 2,3)

LEN()

給定字串表示式的字元數將作為輸出。

示例

以下查詢將為字串表示式“HELLO”給出 5。

Select LEN('HELLO') 

LOWER()

給定字串資料的小寫字串將作為輸出。

示例

以下查詢將為字元資料“SQLServer”給出“sqlserver”。

Select LOWER('SQLServer') 

UPPER()

給定字串資料的大寫字串將作為輸出。

示例

以下查詢將為字元資料“SqlServer”給出“SQLSERVER”。

Select UPPER('SqlServer')

LTRIM()

刪除前導空格後,給定字串資料的字串表示式將作為輸出。

示例

以下查詢將為字元資料“   WORLD”給出“WORLD”。

Select LTRIM('   WORLD')

RTRIM()

刪除尾隨空格後,給定字串資料的字串表示式將作為輸出。

示例

以下查詢將為字元資料“INDIA   ”給出“INDIA”。

Select RTRIM('INDIA   ') 

REPLACE()

用指定字元替換所有出現的指定字元後,給定字串資料的字串表示式將作為輸出。

示例

以下查詢將為字串資料“INDIA”給出字串“KNDKA”。

Select REPLACE('INDIA', 'I', 'K')

REPLICATE()

重複字串表示式將作為給定字串資料(指定次數)的輸出。

示例

以下查詢將為字串資料“WORLD”給出字串“WORLDWORLD”。

Select REPLICATE('WORLD', 2)

REVERSE()

反向字串表示式將作為給定字串資料的輸出。

示例

以下查詢將為字串資料“WORLD”給出字串“DLROW”。

Select REVERSE('WORLD')

SOUNDEX()

返回四個字元的 (SOUNDEX) 程式碼以評估兩個給定字串的相似性。

示例

以下查詢將為字串“Smith”、“Smyth”給出“S530”。

Select SOUNDEX('Smith'), SOUNDEX('Smyth')

DIFFERENCE()

整數將作為兩個給定表示式的輸出。

示例

以下查詢將為表示式“Smith”、“Smyth”給出 4。

Select Difference('Smith','Smyth') 

注意 - 如果輸出值為 0,則表示兩個給定表示式之間相似度較弱或沒有相似度。

SPACE()

字串將作為具有指定數量空格的輸出。

示例

以下查詢將給出“I LOVE INDIA”。

Select 'I'+space(1)+'LOVE'+space(1)+'INDIA'

STUFF()

用指定字元替換從起始字元到指定長度的字元後,給定字串資料的字串表示式將作為輸出。

示例

以下查詢將根據給定的起始字元和長度分別為 2 和 4,以及“IJK”作為指定的目標字串,為字串資料“ABCDEFGH”給出字串“AIJKFGH”。

Select STUFF('ABCDEFGH', 2,4,'IJK') 

STR()

字元資料將作為給定數字資料的輸出。

示例

以下查詢將根據指定的長度為 6 和小數為 2,為給定的 187.369 給出 187.37。

Select STR(187.369,6,2) 

UNICODE()

整數將作為給定表示式第一個字元的輸出。

示例

以下查詢將為表示式“RAMA”給出 82。

Select UNICODE('RAMA') 

QUOTENAME()

給定的字串將作為具有指定分隔符的輸出。

示例

以下查詢將根據指定的雙引號分隔符,返回給定字串 'RAMA' 的 "RAMA"。

Select QUOTENAME('RAMA','"') 

PATINDEX()

從給定表示式中返回第一次出現的起始位置,正如我們指定需要 'I' 位置。

示例

以下查詢將返回 'INDIA' 的 1。

Select PATINDEX('I%','INDIA') 

FORMAT()

給定表示式將以指定的格式作為輸出。

示例

以下查詢將根據指定的格式(其中 'D' 代表星期幾名稱)返回 getdate 函式的 '星期一, 十一月 16, 2015'。

SELECT FORMAT ( getdate(), 'D') 

CONCAT()

連線給定引數值後,將返回單個字串作為輸出。

示例

以下查詢將為給定的引數返回 'A,B,C'。

Select CONCAT('A',',','B',',','C') 

T-SQL - 日期函式

以下是 MS SQL Server 中日期函式的列表。

GETDATE()

它將返回當前日期和時間。

語法

上述函式的語法:

GETDATE()

示例

以下查詢將返回 MS SQL Server 中的當前日期和時間。

Select getdate() as currentdatetime

DATEPART()

它將返回日期或時間的一部分。

語法

上述函式的語法:

DATEPART(datepart, datecolumnname)

示例

示例 1:以下查詢將返回 MS SQL Server 中當前日期的一部分。

Select datepart(day, getdate()) as currentdate

示例 2:以下查詢將返回 MS SQL Server 中當前月份的一部分。

Select datepart(month, getdate()) as currentmonth

DATEADD()

它將透過新增或減去日期和時間間隔來顯示日期和時間。

語法

上述函式的語法:

DATEADD(datepart, number, datecolumnname)

示例

以下查詢將返回 MS SQL Server 中當前日期和時間之後 10 天的日期和時間。

Select dateadd(day, 10, getdate()) as after10daysdatetimefromcurrentdatetime 

DATEDIFF()

它將顯示兩個日期之間的日期和時間差。

語法

上述函式的語法:

DATEDIFF(datepart, startdate, enddate)

示例

以下查詢將返回 MS SQL Server 中 2015-11-16 和 2015-11-11 日期之間的小時差。

Select datediff(hour, 2015-11-16, 2015-11-11) as 
differencehoursbetween20151116and20151111 

CONVERT()

它將以不同的格式顯示日期和時間。

語法

上述函式的語法:

CONVERT(datatype, expression, style)

示例

以下查詢將以不同的格式返回 MS SQL Server 中的日期和時間。

SELECT CONVERT(VARCHAR(19),GETDATE()) 
SELECT CONVERT(VARCHAR(10),GETDATE(),10) 
SELECT CONVERT(VARCHAR(10),GETDATE(),110)

T-SQL - 數值函式

MS SQL Server 數值函式可以應用於數值資料,並返回數值資料。

以下是帶有示例的數值函式列表。

ABS()

數值表示式的絕對值將作為輸出。

示例

以下查詢將返回絕對值。

Select ABS(-22) 

ACOS()

指定數值表示式的反餘弦值將作為輸出。

示例

以下查詢將返回 0 的反餘弦值。

Select ACOS(0) 

ASIN()

指定數值表示式的反正弦值將作為輸出。

示例

以下查詢將返回 0 的反正弦值。

Select ASIN(0)

ATAN()

指定數值表示式的反正切值將作為輸出。

示例

以下查詢將返回 0 的反正切值。

Select ATAN(0) 

ATN2()

指定數值表示式在所有四個象限的反正切值將作為輸出。

示例

以下查詢將返回 0 在所有四個象限的反正切值。

Select ATN2(0, -1) 

假設 CUSTOMERS 表包含以下記錄。

ID  NAME       AGE       ADDRESS             SALARY 
1   Ramesh     32        Ahmedabad           2000.00 
2   Khilan     25        Delhi               1500.00 
3   kaushik    23        Kota                2000.00 
4   Chaitali   25        Mumbai              6500.00 
5   Hardik     27        Bhopal              8500.00 
6   Komal      22        MP                  4500.00 
7   Muffy      24        Indore              10000.00 

BETWEEN()

如果值存在於給定的兩個表示式之間,則這些值將作為輸出。

示例

以下查詢將返回以下輸出。

SELECT salary from customers where salary between 2000 and 8500

輸出

salary 
2000.00 
2000.00 
6500.00 
8500.00 
4500.00

MIN()

從給定表示式中返回最小值作為輸出。

示例

以下查詢將從 customers 表的給定 'salary' 表示式返回 '1500.00'。

Select MIN(salary)from CUSTOMERS

MAX()

從給定表示式中返回最大值作為輸出。

示例

以下查詢將從 customers 表的給定 'salary' 表示式返回 '10000.00'。

Select MAX(salary)from CUSTOMERS

SQRT()

給定數值表示式的平方根將作為輸出。

示例

以下查詢將為給定的 4 的數值表示式返回 2。

Select SQRT(4) 

PI()

將返回 PI 值作為輸出。

示例

以下查詢將返回 PI 值 3.14159265358979。

Select PI() 

CEILING()

將返回給定值,先對小數進行四捨五入到下一個最高值。

示例

以下查詢將為給定的 123.25 值返回 124。

Select CEILING(123.25) 

FLOOR()

將返回給定值,先對小數進行四捨五入到小於或等於表示式的值。

示例

以下查詢將為給定的 123.25 值返回 123。

Select FLOOR(123.25) 

LOG()

給定表示式的自然對數將作為輸出。

示例

以下查詢將為給定的 1 值返回 0。

Select LOG(1) 
廣告