
- T-SQL 教程
- T-SQL - 首頁
- T-SQL - 概述
- T-SQL - 資料型別
- T-SQL - 建立表
- T-SQL - 刪除表
- T-SQL - INSERT 語句
- T-SQL - SELECT 語句
- T-SQL - UPDATE 語句
- T-SQL - DELETE 語句
- T-SQL - WHERE 子句
- T-SQL - LIKE 子句
- T-SQL - ORDER BY 子句
- T-SQL - GROUP BY 子句
- T-SQL - DISTINCT 子句
- T-SQL - 表連線
- T-SQL - 子查詢
- T-SQL - 儲存過程
- T-SQL - 事務
- T-SQL - 索引
- T-SQL - 函式
- T-SQL - 字串函式
- T-SQL - 日期函式
- T-SQL - 數值函式
- T-SQL 有用資源
- T-SQL 快速指南
- T-SQL - 有用資源
- T-SQL - 討論
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 內建函式的列表:
SQL Server COUNT 函式 - SQL Server COUNT 聚合函式用於計算資料庫表中的行數。
SQL Server MAX 函式 - SQL Server MAX 聚合函式允許選擇特定列的最高(最大)值。
SQL Server MIN 函式 - SQL Server MIN 聚合函式允許選擇特定列的最低(最小)值。
SQL Server AVG 函式 - SQL Server AVG 聚合函式選擇特定表列的平均值。
SQL Server SUM 函式 - SQL Server SUM 聚合函式允許選擇數字列的總和。
SQL Server SQRT 函式 - 用於生成給定數字的平方根。
SQL Server RAND 函式 - 用於使用 SQL 命令生成隨機數。
SQL Server CONCAT 函式 - 用於將多個引數連線到單個引數。
SQL Server 數值函式 - 操作 SQL 中數字所需 SQL 函式的完整列表。
SQL Server 字串函式 - 操作 SQL 中字串所需 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)