阅读(1504) 赞(3)

T-SQL 快速指南

2016-12-12 14:45:27 更新

T-SQL - 概述

T-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提供七个类别,包括要使用的和其他类别的数据类型。

精确数值类型

类型从至
bigint-9,223,372,036,854,775,8089,223,372,036,854,775,807
int2,147,483,6482,147,483,647
smallint-32,76832,767
tinyint0255
bit01
decimal-10 ^ 38加110 ^ 38 -1
numeric-10 ^ 38加110 ^ 38 -1
money-922,337,203,685,477.5808+922,337,203,685,477.5807
smallmoney-214,748.3648+214,748.3647

数字和小数是固定精度和标度数据类型,在功能上等效。

近似数值类型

类型从至
Float-1.79E + 3081.79E + 308
Real-3.40E + 383.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.000000023:59:59.9999999

字符型

Sr.No类型及说明
1

char

固定长度的非Unicode字符数据,最大长度为8,000个字符。

2

varchar

最大长度为8,000个字符的可变长度非Unicode数据。

3

Varchar (max)

可变长度的非Unicode数据,最大长度为231个字符(在SQL Server 2005中引入)。

4

text

可变长度非Unicode数据,最大长度为2,147,483,647个字符。

Unicode

Sr.No类型及说明
1

nchar

固定长度的Unicode数据,最大长度为4,000个字符。

2

nvarchar

最大长度为4,000个字符的可变长度Unicode数据。

3

Nvarchar (max)

最大长度为230个字符的可变长度Unicode数据(在SQL Server 2005中引入)。

4

ntext

最大长度为1,073,741,823个字符的可变长度Unicode数据。

二进制字符串

Sr.No类型及说明
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 -时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

  • 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语句的组合,SELECT语句来创建。您可以检查在创建表使用另一个表的完整信息。

使用CREATE TABLE 和 SELECT 的组合语句可以为现有表创建一个副本,也可以使用CREATE TABLE 语句来检查另一张表的完整性。

例

在这个例子中,我们将创建一张名称为CUSTOMERS表,ID为主键,NOT 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;

例

让我们先验证刚才创建的客户表,然后我们会从数据库中将它删除。

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的数据表,下面我们对它进行删除。以下是删除数据表CUSTOMERS
的命令。

DROP TABLE CUSTOMERS; 
Command(s) completed successfully.

执行了上述命令以后,你就查询不到CUSTOMERS表的数据了,该数据表被成功删除。

Exec sp_columns CUSTOMERS; 
No rowsdata 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,...列是要插入数据的表中的列的名称。

如果要为表的所有列添加值,则不需要在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 );

语法

您可以使用第二种方法如下在顾客表中的记录 -

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 Query用于修改表中的现有记录。

您可以使用WHERE子句与UPDATE查询更新所选行,否则所有行都会受到影响。

语法

以下是UPDATE查询与WHERE子句的基本语法。

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 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用于从表中删除现有记录。

您最好使用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 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表中获取薪水大于2000的用户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可以是任何数字或字符串值。

例

以下是一些示例,显示具有带有'%'和'_'运算符的不同LIKE子句的WHERE部分。

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个字符的所有值

五

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 DES

上述命令将产生以下结果集:

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 

让我们先来看下未使用DISTINCT关键字情况下SELECT查询返回的结果集:

SELECT SALARY FROM CUSTOMERS 
   ORDER BY SALARY 

其中,工资为2000的记录出现了两次,这是因为CUSTOMERS表中存在两条SALARY为2000的记录。

SALARY 
1500.00 
2000.00 
2000.00 
4500.00 
6500.00 
8500.00 
10000.00

现在让我们使用DISTINCT关键字对CUSTOMERS表进行SELECT查询并查看结果:

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_BKP的表,表结构与CUSTOMERS表相同,并将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表中AGE大于或等于27的所有客户的SALARY乘以0.25。

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

上述命令将产生以下结果集:

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表中所有的年龄大于或等于27的客户的记录。

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

上述命令将产生以下结果集:

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命令是用于将事务调用的更改保存到数据库的事务命令。 此命令将自上次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 

以下命令示例将从删除从CUSTOMERS表中删除所有年龄等于25的用户记录。

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25 
COMMIT 

上述命令将产生以下结果集:

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 

下面的命令将从CUSTOMERS表中删除年龄等于25的用户记录,然后使用ROLLBACK命令,回滚数据。

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25; 
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 

SAVEPOINT命令

SAVEPOINT命令可以使事务回滚到某个点节点,而不回滚整个事务。

语法

以下是SAVEPOINT命令的语法。

SAVE TRANSACTION SAVEPOINT_NAME

此命令仅用于在事务语句之间创建SAVEPOINT。 ROLLBACK命令用于撤消一组事务。

以下是回滚到一个事务节点的语法。

ROLLBACK TO SAVEPOINT_NAME

在下面的示例中,我们将从CUSTOMERS表中删除三个不同的记录。 我们将在每次删除之前创建一个SAVEPOINT,以便我们可以随时将ROLLBACK任何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.

三个删除已经发生,但是,我们改变了主意,决定ROLLBACK到SAVEPOINT,我们确定为SP2。 因为SP2是在第一次删除后创建的,所以最后两个删除被撤消

ROLLBACK Transaction SP2 
Rollback complete. 

请注意,我们回滚到SP2后,相当于只发生了第一次删除。

SELECT * FROM CUSTOMERS 

查询后的结果为6条记录:

ID  NAME       AGE       ADDRESS          SALARY 
2   Khilan     25        Ahmedabad        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的计数功能 -在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 - 字符串函数

SQLServer字符串函数扫描应用于字符串值,或返回字符串值或数字数据。

下面是带有示例的String函数列表。

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”字符串作为字符串给定字符串'WORLD'的4个字符。

Select LEFT('WORLD', 4)

RIGHT()

给定字符串的右边部分,直到指定的字符数作为给定字符串的输出。

例

下面的查询将给出'DIA'字符串3个给定字符串'INDIA'的字符数。

Select RIGHT('INDIA', 3)

SUBSTRING()

基于开始位置值和长度值的字符串的一部分将作为给定字符串的输出。

例

以下查询将给出分别对于给定字符串“WORLD”提供(1,3),(3,3)和(2,3)作为开始和长度值的“WOR”,“DIA”,“ING” ,'INDIA'和'KING'。

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

LEN()

字符数将作为给定字符串表达式的输出。

例

以下查询将为5提供“HELLO”字符串表达式。

Select LEN('HELLO') 

LOWER()

小写字符串将作为给定字符串数据的输出。

例

以下查询将为'SQL Server'字符数据提供'sql server'。

Select LOWER('SQLServer') 

UPPER()

大写字符串将作为给定字符串数据的输出。

例

以下查询将为“Sql Server”字符数据提供“SQL SERVER”。

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

整数值将作为给定的两个表达式的输出。

例

以下查询将给出4个“Smith”,“Smyth”表达式。

Select Difference('Smith','Smyth') 

注 -如果输出值为0,表示给定2个表达式之间的相似度较弱或没有相似性。

SPACE()

字符串来作为的空格指定数量的输出。

例

下面的查询将给出'I LOVE INDIA'。

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

STUFF()

字符串表达式将作为给定字符串数据的输出,在从起始字符替换为指定字符的指定长度之后。

例

下面的查询将给出'ABCDEFGH'字符串数据的'AIJKFGH'字符串作为给定的起始字符和长度分别为2和4,'IJK'作为指定的目标字符串。

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

STR()

字符数据将作为给定数字数据的输出。

例

以下查询将给定187.37的187.37,基于指定的长度为6和十进制为2。

Select STR(187.369,6,2) 

UNICODE()

整数值将作为给定表达式的第一个字符的输出。

例

以下查询将为82提供“RAMA”表达式。

Select UNICODE('RAMA') 

QUOTENAME()

给定字符串将作为输出与指定的分隔符。

例

以下查询将为给定的“RAMA”字符串指定“RAMA”,因为我们指定双引号作为分隔符。

Select QUOTENAME('RAMA','"') 

PATINDEX()

需要从指定的“I”位置的给定表达式开始第一个出现的位置。

例

下面的查询将给出'INDIA'的1。

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

FORMAT()

给定表达式将作为具有指定格式的输出。

例

下面的查询将给出'星期一,2015年11月16日'的getdate函数按照指定的格式,'D'表示星期名称。

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

输出给定值的绝对值。

例

以下查询将输出-22的绝对值:22。

Select ABS(-22)

ACOS()

输出给定值的反余弦值。

例

以下查询将输出0的反余弦值:1.5707963267948966。

Select ACOS(0)

ASIN()

输出给定值的正弦值。

例

以下查询将输出0的正弦值:0。

Select ASIN(0)

ATAN()

输出给定值的反正切值。

例

以下查询将输出0的反正切值:0。

Select ATAN(0)

ATN2()

输出给定值的方位角,也可以理解为计算复数 x+yi 的幅角。

例

以下查询将输出(0,-1)的方位角: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()

输出给定的两个表达式之间的值。

例

以下实例将输出薪水区间在2000到8500之间的所有薪水值:

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(Π)的值。

例

下面的查询将输出3.14159265358979

Select PI()

CEILING()

给定值向上舍入(正向无穷大的方向)后输出。

例

下面的查询将输出124。

Select CEILING(123.25)

FLOOR()

给定值向下舍入(正向无穷小的方向)后输出。

例

下面的查询将输出123。

Select FLOOR(123.25) 

LOG()

输出给定值的对数。

例

下面的查询将输出0。

Select LOG(1)