T-SQL语句的学习
基本数据类型
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 |
近似数据类型
FLOAT | -1.79E + 308 | 1.79E + 308 |
REAL | -3.40E + 38 | 3.40E + 38 |
日期和时间类型
DATATIME (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日 |
DATATIME2(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 最大长度为8,000个字符的可变长度非Unicode数据。 |
3 | VARCHAR(MAX) 最大长度为231个字符的可变长度非Unicode数据(在SQL Server 2005中引入)。 |
4 | TEXT 可变长度非Unicode数据,最大长度为2,147,483,647个字符。 |
Unicode字符串
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数据。 |
二进制字符串
1 | BINARY 固定长度二进制数据,最大长度为8,000字节。 |
2 | VARBINARY 最大长度为8,000字节的可变长度二进制数据。 |
3 | VARBINARY(MAX) 最大长度为231字节的可变长度二进制数据(在SQL Server 2005中引入)。 |
4 | IMAGE 最大长度为2,147,483,647字节的可变长度二进制数据。 |
创建表的基本语法
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns ));
查看SQL服务器显示的消息来验证表是否已经创建成功
exec sp_columns CUSTOMERS
INSERT语句
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]
VALUES (value1, value2, value3,...valueN);
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
可以通过SELECT语句将数据填充到表中,而另一个表提供另一个表具有一组字段,这是填充第一个表所必需的
INSERT INTO first_table_name
SELECT column1, column2, ...columnN
FROM second_table_name
[WHERE condition];
UPDATE查询与WHERE子句的基本语法
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
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个字符的所有值 |
五 | WHERE SALARY LIKE'%2' 查找以2结尾的所有值 |
6 | WHERE SALARY LIKE'%_2 3' 查找在第二个位置有2,并以3结束的所有值 |
7 | WHERE SALARY LIKE'2___3“ 查找以2开头并以3结尾的五位数字中的任何值 |
ORDER BY
SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
SELECT * FROM CUSTOMERS
ORDER BY NAME DES
GROUP BY 分类汇总
SELECT column1, column2
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2
ORDER BY column1, column2
示例
SELECT NAME, SUM(SALARY) as [sum of salary] FROM CUSTOMERS
GROUP BY NAME;
DISTINCT关键字 去除重复记录
SELECT DISTINCT column1, column2,.....columnN
FROM table_name
WHERE [condition]
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
T-SQL 子查询 嵌套查询
语法
以下是基本语法。
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 )
convent的用法
convert(decimal(15,2),AVG(grade))
获取平均数后保留两位小数
HAVING 的用法
对分组后的信息进行过滤
HAVING 只能与 SELECT 语句一起使用。
HAVING 通常在 GROUP BY 子句中使用。
如果不使用 GROUP BY 子句,则 HAVING 的行为与 WHERE 子句一样。
例:HAVING MIN(grade)>80
select top 1 * from。。。。。。
用于选取第一条数据