T-SQL – 快速指南
T-SQL – 快速指南
T-SQL – 概述
1970 年代,IBM 开发的产品名为“SEQUEL”,结构化英语查询语言,后来 SEQUEL 更名为“SQL”,代表结构化查询语言。
1986年,SQL得到ANSI(美国国家标准协会)的认可,1987年,得到ISO(国际标准组织)的认可。
SQL 是一种结构查询语言,是所有 RDBMS 产品的通用数据库语言。不同的 RDBMS 产品供应商通过为自己的 RDBMS 产品扩展 SQL 来开发自己的数据库语言。
T-SQL 代表 Transact Structure Query Language,它是 Microsoft 的产品,是 SQL 语言的扩展。
例子
MS SQL Server – SQL\T-SQL
ORACLE – SQL\PL-SQL
T-SQL – 数据类型
SQL Server 数据类型是一个属性,用于指定任何对象的数据类型。SQL Server 中的每个列、变量和表达式都有相关的数据类型。创建表时可以使用这些数据类型。您可以根据需要为表列选择特定的数据类型。
SQL Server 提供了七个类别,包括其他类别的数据类型以供使用。
精确数字类型
Type | 从 | 至 |
---|---|---|
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 &plus1 | 10^38 –1 |
numeric | -10^38 &plus1 | 10^38 –1 |
money | -922,337,203,685,477.5808 | &plus922,337,203,685,477.5807 |
smallmoney | -214,748.3648 | &plus214,748.3647 |
数字和小数是固定精度和小数位数数据类型,在功能上是等效的。
近似数值类型
Type | 从 | 至 |
---|---|---|
Float | -1.79E+308 | 1.79E+308 |
Real | -3.40E+38 | 3.40E+38 |
日期和时间类型
Type | 从 | 至 |
---|---|---|
datetime(3.33 milliseconds accuracy) |
1753 年 1 月 1 日 | 9999 年 12 月 31 日 |
smalldatetime(1 minute accuracy) |
1900 年 1 月 1 日 | 2079 年 6 月 6 日 |
date(1 day accuracy. Introduced in SQL Server 2008) |
0001 年 1 月 1 日 | 9999 年 12 月 31 日 |
datetimeoffset(100 nanoseconds accuracy. Introduced in SQL Server 2008) |
0001 年 1 月 1 日 | 9999 年 12 月 31 日 |
datetime2(100 nanoseconds accuracy. Introduced in SQL Server 2008) |
0001 年 1 月 1 日 | 9999 年 12 月 31 日 |
time(100 nanoseconds accuracy. Introduced in SQL Server 2008) |
00:00:00.0000000 | 23:59:59.9999999 |
字符串
Sr.No | 类型和描述 |
---|---|
1 |
char 固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。 |
2 |
varchar 最多 8,000 个字符的可变长度非 Unicode 数据。 |
3 |
Varchar (max) 最大长度为 231 个字符的可变长度非 Unicode 数据(在 SQL Server 2005 中引入)。 |
4 |
text 可变长度非 Unicode 数据,最大长度为 2,147,483,647 个字符 |
Unicode 字符串
Sr.No | 类型和描述 |
---|---|
1 |
nchar 固定长度的 Unicode 数据,最大长度为 4,000 个字符。 |
2 |
nvarchar 可变长度 Unicode 数据,最大长度为 4,000 个字符。 |
3 |
Nvarchar (max) 最大长度为 2 的可变长度 Unicode 数据30 字符(在 SQL Server 2005 中引入)。 |
4 |
ntext 可变长度 Unicode 数据,最大长度为 1,073,741,823 个字符。 |
二进制字符串
Sr.No | 类型和描述 |
---|---|
1 |
binary 固定长度的二进制数据,最大长度为 8,000 字节。 |
2 |
varbinary 可变长度的二进制数据,最大长度为 8,000 字节。 |
3 |
varbinary(max) 最大长度为 2 的变长二进制数据31 字节(在 SQL Server 2005 中引入)。 |
4 |
image 可变长度二进制数据,最大长度为 2,147,483,647 字节。 |
其他数据类型
-
sql_variant – 存储各种 SQL Server 支持的数据类型的值,文本、ntext 和时间戳除外。
-
时间戳– 存储数据库范围的唯一编号,每次更新行时都会更新该编号。
-
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 语句的组合来创建现有表的副本。您可以在使用另一个表创建表中查看完整的详细信息。
例子
在此示例中,让我们创建一个以 ID 作为主键的 CUSTOMERS 表,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 – 插入语句
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、姓名和薪水字段 –
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 – 更新语句
SQL Server UPDATE Query 用于修改表中的现有记录。
您可以将 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 Query 用于从表中删除现有记录。
您必须使用带有 DELETE 查询的 WHERE 子句来删除选定的行,否则所有记录都将被删除。
句法
以下是带有 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
以下命令是一个示例,该示例将从薪水大于 2000 的 CUSTOMERS 表中获取 ID、姓名和薪水字段。
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、姓名和薪水字段。重要的是要注意,所有字符串都应该在单引号(”)内给出,而数值应该在没有任何引号的情况下给出,如上例所示 –
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 子句,其中包含“%”和“_”运算符。
Sr.No | 声明和说明 |
---|---|
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 子句之前(如果使用)。
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
上述命令将产生以下输出,其中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 表中所有 AGE 大于或等于 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 表中删除所有 AGE 大于或等于 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 – 在要回滚的事务组中创建点。
-
SET TRANSACTION – 在交易上放置一个名称。
事务控制命令仅与 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。在创建表或删除表时不能使用它们,因为这些操作是在数据库中自动提交的。
为了在 MS SQL Server 中使用事务控制命令,我们必须以 ‘begin tran’ 或 begin transaction 命令开始事务,否则这些命令将不起作用。
提交命令
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
以下命令示例将从表中删除年龄 = 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 命令是用于撤消尚未保存到数据库的事务的事务性命令。此命令只能用于撤消自上次发出 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
以下命令示例将从表中删除年龄 = 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 命令的语法。
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 ISOLATION LEVEL <Isolationlevel_name>
T-SQL – 索引
索引是数据库搜索引擎可以用来加速数据检索的特殊查找表。简单地说,索引是指向表中数据的指针。数据库中的索引与书末的索引非常相似。
例如,如果您想参考一本书中讨论某个主题的所有页面,您首先参考索引,该索引按字母顺序列出所有主题,然后参考一个或多个特定页码。
索引有助于加快 SELECT 查询和 WHERE 子句的速度,但它会减慢数据输入,使用 UPDATE 和 INSERT 语句。可以在不影响数据的情况下创建或删除索引。
创建索引涉及 CREATE INDEX 语句,它允许您命名索引、指定表和要索引的列,以及指示索引是按升序还是降序排列。
索引也可以是唯一的,类似于 UNIQUE 约束,因为索引可以防止存在索引的列或列组合中的重复条目。
创建索引命令
以下是 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 子句中经常使用两列或更多列作为过滤器,则复合索引将是最佳选择。
隐式索引
隐式索引是在创建对象时由数据库服务器自动创建的索引。索引是为主键约束和唯一约束自动创建的。
删除索引命令
可以使用 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 String Functions – 在 SQL 中操作字符串所需的 SQL 函数的完整列表。
T-SQL – 字符串函数
MS SQL Server 字符串函数可应用于字符串值或将返回字符串值或数字数据。
以下是带有示例的字符串函数列表。
ASCII()
Ascii 代码值将作为字符表达式的输出出现。
例子
以下查询将给出给定字符的 Ascii 代码值。
Select ASCII ('word')
字符()
字符将作为给定 Ascii 代码或整数的输出。
例子
以下查询将给出给定整数的字符。
Select CHAR(97)
NCHAR()
Unicode 字符将作为给定整数的输出。
例子
以下查询将给出给定整数的 Unicode 字符。
Select NCHAR(300)
CHARINDEX()
给定搜索表达式的起始位置将作为给定字符串表达式的输出出现。
例子
以下查询将给出给定字符串表达式 ‘KING’ 的 ‘G’ 字符的起始位置。
Select CHARINDEX('G', 'KING')
剩下()
给定字符串的左侧部分直到指定数量的字符将作为给定字符串的输出出现。
例子
以下查询将为给定字符串 ‘WORLD’ 提供 4 个字符数的 ‘WORL’ 字符串。
Select LEFT('WORLD', 4)
正确的()
给定字符串的右侧部分直到指定数量的字符将作为给定字符串的输出出现。
例子
以下查询将给出 ‘DIA’ 字符串,如所提及的 3 个字符数,用于给定字符串 ‘INDIA’。
Select RIGHT('INDIA', 3)
子字符串()
基于起始位置值和长度值的字符串的一部分将作为给定字符串的输出。
例子
以下查询将分别给出我们提到的 ‘WOR’、’DIA’、’ING’ 字符串(1,3)、(3,3)和(2,3)作为给定字符串 ‘WORLD’ 的起始值和长度值,“印度”和“国王”。
Select SUBSTRING ('WORLD', 1,3) Select SUBSTRING ('INDIA', 3,3) Select SUBSTRING ('KING', 2,3)
伦()
字符数将作为给定字符串表达式的输出出现。
例子
以下查询将为 ‘HELLO’ 字符串表达式提供 5。
Select LEN('HELLO')
降低()
小写字符串将作为给定字符串数据的输出。
例子
以下查询将为“SQLServer”字符数据提供“sqlserver”。
Select LOWER('SQLServer')
上()
大写字符串将作为给定字符串数据的输出。
例子
以下查询将为“SqlServer”字符数据提供“SQLSERVER”。
Select UPPER('SqlServer')
LTRIM()
删除前导空格后,字符串表达式将作为给定字符串数据的输出出现。
例子
以下查询将为“WORLD”字符数据提供“WORLD”。
Select LTRIM(' WORLD')
RTRIM()
删除尾随空格后,字符串表达式将作为给定字符串数据的输出出现。
例子
以下查询将为“INDIA”字符数据提供“INDIA”。
Select RTRIM('INDIA ')
代替()
在用指定字符替换所有出现的指定字符后,字符串表达式将作为给定字符串数据的输出出现。
例子
以下查询将为“INDIA”字符串数据提供“KNDKA”字符串。
Select REPLACE('INDIA', 'I', 'K')
复制()
重复字符串表达式将作为指定次数的给定字符串数据的输出。
例子
以下查询将为“WORLD”字符串数据提供“WORLDWORLD”字符串。
Select REPLICATE('WORLD', 2)
撤销()
反向字符串表达式将作为给定字符串数据的输出出现。
例子
以下查询将为“WORLD”字符串数据提供“DLROW”字符串。
Select REVERSE('WORLD')
SOUNDEX()
返回四字符 (SOUNDEX) 代码以评估两个给定字符串的相似性。
例子
以下查询将为“Smith”、“Smyth”字符串提供“S530”。
Select SOUNDEX('Smith'), SOUNDEX('Smyth')
区别()
整数值将作为给定两个表达式的输出出现。
例子
以下查询将为 ‘Smith’、’Smyth’ 表达式提供 4。
Select Difference('Smith','Smyth')
注意– 如果输出值为 0,则表示给定 2 个表达式之间的相似性较弱或没有相似性。
空间()
字符串将作为具有指定数量空格的输出出现。
例子
以下查询将给出“我爱印度”。
Select 'I'&plusspace(1)&plus'LOVE'&plusspace(1)&plus'INDIA'
东西()
字符串表达式将作为给定字符串数据的输出,从起始字符替换为指定字符到指定长度后。
例子
以下查询将给出 ‘ABCDEFGH’ 字符串数据的 ‘AIJKFGH’ 字符串,根据给定的起始字符和长度分别为 2 和 4,以及 ‘IJK’ 作为指定的目标字符串。
Select STUFF('ABCDEFGH', 2,4,'IJK')
STR()
字符数据将作为给定数字数据的输出。
例子
以下查询将根据指定的长度为 6 和十进制为 2 为给定的 187.369 提供 187.37。
Select STR(187.369,6,2)
统一码()
整数值将作为给定表达式的第一个字符的输出。
例子
以下查询将为 ‘RAMA’ 表达式提供 82。
Select UNICODE('RAMA')
引用名()
给定的字符串将作为带有指定分隔符的输出出现。
例子
以下查询将为给定的“RAMA”字符串提供“RAMA”,因为我们将双引号指定为分隔符。
Select QUOTENAME('RAMA','"')
专利索引()
当我们指定“I”位置时,给定表达式中第一次出现的起始位置是必需的。
例子
以下查询将为“印度”提供 1。
Select PATINDEX('I%','INDIA')
格式()
给定的表达式将作为指定格式的输出出现。
例子
以下查询将按照指定格式为 getdate 函数提供“2015 年 11 月 16 日星期一”,其中“D”指的是工作日名称。
SELECT FORMAT ( getdate(), 'D')
CONCAT()
连接给定的参数值后,单个字符串将作为输出出现。
例子
以下查询将给出给定参数的“A、B、C”。
Select CONCAT('A',',','B',',','C')
T-SQL – 日期函数
以下是 MS SQL Server 中的日期函数列表。
获取日期()
它将返回当前日期和时间。
句法
上述函数的语法 –
GETDATE()
例子
以下查询将在 MS SQL Server 中返回当前日期和时间。
Select getdate() as currentdatetime
日期部分()
它将返回日期或时间的一部分。
句法
上述函数的语法 –
DATEPART(datepart, datecolumnname)
例子
示例 1 – 以下查询将返回 MS SQL Server 中当前日期的部分。
Select datepart(day, getdate()) as currentdate
示例 2 – 以下查询将返回 MS SQL Server 中当前月份的部分。
Select datepart(month, getdate()) as currentmonth
日期添加()
它将通过添加或减去日期和时间间隔来显示日期和时间。
句法
上述函数的语法 –
DATEADD(datepart, number, datecolumnname)
例子
以下查询将从 MS SQL Server 中的当前日期和时间返回 10 天后的日期和时间。
Select dateadd(day, 10, getdate()) as after10daysdatetimefromcurrentdatetime
日期差异()
它将显示两个日期之间的日期和时间。
句法
上述函数的语法 –
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(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)
晒黑()
反正切值将作为指定数值表达式的输出。
例子
以下查询将给出反正切值为 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
之间()
如果给定的两个表达式之间存在值,则这些值将作为输出出现。
例子
以下查询将提供以下输出。
SELECT salary from customers where salary between 2000 and 8500
输出
salary 2000.00 2000.00 6500.00 8500.00 4500.00
最小值()
最小值将作为给定表达式的输出。
例子
以下查询将为客户表中给定的“薪水”表达式提供“1500.00”。
Select MIN(salary)from CUSTOMERS
最大限度()
最大值将作为给定表达式的输出。
例子
以下查询将为客户表中给定的“薪水”表达式提供“10000.00”。
Select MAX(salary)from CUSTOMERS
SQRT()
给定数值表达式的平方根将作为输出出现。
例子
以下查询将为给定的 4 数值表达式提供 2。
Select SQRT(4)
PI()
PI 值将作为输出出现。
例子
以下查询将为 PI 值提供 3.14159265358979。
Select PI()
天花板()
给定值将在四舍五入是下一个最高值的小数后作为输出出现。
例子
以下查询将为给定的 123.25 值提供 124。
Select CEILING(123.25)
地面()
在四舍五入小于或等于表达式的小数后,给定值将作为输出出现。
例子
以下查询将为给定的 123.25 值提供 123。
Select FLOOR(123.25)
日志()
给定表达式的自然对数将作为输出。
例子
以下查询将为给定的 1 值提供 0。
Select LOG(1)