- 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)