T-sql 从入门到放弃

2019-07-10  本文已影响0人  鲸鱼酱375

T-SQL是SQL语言的一种版本,且只能在SQL SERVER上使用。它是ANSI SQL的加强版语言、提供了标准的SQL命令。另外,T-SQL还对SQL做了许多补允,提供了类似C、Basic和Pascal的基本功能,如变量说明、流控制语言、功能函数等。
T-SQL代表的Transact结构查询语言是微软的产品,是SQL语言的扩展。

1.数据类型

1.1 精确数值类型

精确数值类型

1.2近似数值类型

近似数值

1.3日期和时间类型

image.png

1.4字符串

字符串

1.5 unicode 字符串

unicode

1.6 二进制字符串

二进制

1.7 其他数据类型

QL_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中引入)。

2.创建表格

CREATE TABLE table_name( 
   column1 datatype, 
   column2 datatype, 
   column3 datatype, 
   ..... 
   columnN datatype, 
   PRIMARY KEY( one or more columns ));

查看表格是否创建成功

exec sp_columns CUSTOMERS

3.删除表格

3.1 drop

DROP TABLE table_name;

3.2 delete

DELETE FROM table_name 
WHERE [condition]; 

delete删除是可以有选择性的,也可以不用where筛选删除整个

4.插入数据

4.1为制定列添加值

INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]   
VALUES (value1, value2, value3,...valueN); 

4.2 为表的所有列添加值

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

4.3 使用另一个表的数据添加值

INSERT INTO first_table_name  
   SELECT column1, column2, ...columnN  
      FROM second_table_name 
      [WHERE condition];

5.update用法

UPDATE table_name 
SET column1 = value1, column2 = value2...., columnN = valueN 
WHERE [condition];

5.1 update与subquery子查询连用

UPDATE table 
SET column_name = new_value 
[ WHERE OPERATOR [ VALUE ] 
   (SELECT COLUMN_NAME 
   FROM TABLE_NAME) 
   [ WHERE) ] 

例子:对CUSTOMERS表中AGE大于或等于27的所有客户的SALARY乘以0.25。
CUSTOMERS_BKP (ID NAME AGE ADDRESS SALARY )

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

6.like用法

百分号(%)
下划线(_)
百分号表示零个,一个或多个字符。 下划线表示单个数字或字符。 符号可以组合使用。

网站上面有个例子没太想明白:
查找以2开头且长度至少为3个字符的所有值

WHERE SALARY LIKE'2 _%_%“

start with "a" and are at least 3 characters in length

WHERE CustomerName LIKE 'a_%_%'

7. join

在MS SQL Server中有不同类型的连接 --

8.存储

Create procedure <procedure_Name> 
As 
Begin 
<SQL Statement> 
End 
Go

9.事务

事务控制命令仅与DML命令INSERT,UPDATE和DELETE一起使用。 在创建表或删除它们时,不能使用它们,因为这些操作会在数据库中自动提交。

为了在MS SQL Server中使用事务控制命令,我们必须以“begin tran”或begin transaction命令开始事务,否则这些命令将不起作用。

10.索引

10.1 创建索引

CREATE INDEX index_name ON table_name
CREATE INDEX index_name 
ON table_name (column_name)
CREATE UNIQUE INDEX index_name 
on table_name (column_name)
CREATE INDEX index_name on table_name (column1, column2) 

10.2 不适合用索引的情况

不应在小表上使用索引。
经常进行大批量更新或插入操作的表不应设置索引。
不应在可能含大量NULL值的列上使用索引。
频繁操作的列不应设置索引。

11.t-sql中的函数用法

LINK

12.变量

DECLARE @variablename data_type

12.1 变量的数据类型

12.2 变量的设置

变量的设置

13.t-sql中的循环

image.png

14.JOIN

14.1 derived table

The focus of this lesson is derived tables. You can use derived tables when you want to break down a complex query into smaller steps. A derived table is a query which is used in the place of a table. Derived tables are a great solution if you want to create intermediate calculations that need to be used in a larger query.

SELECT a.RecordId, a.Age, a.BloodGlucoseRandom,  b.MaxGlucose   # Select maximum glucose value (use colname from derived table)          
FROM Kidney a
# Join to derived table
JOIN (SELECT Age, MAX(BloodGlucoseRandom) AS MaxGlucose FROM Kidney GROUP BY Age) b
# Join on Age
ON a.Age=B.AGE

15.CTE

WITH CTEName (col1,col2)
AS
(SELECT col1,col2
 from TableName)

15.1 用法

例子1

WITH BloodPressureAge(Age,MaxBloodPressure)
AS
(SELECT age,max(BloodPressure) as MaxBloodPressure
FROM Kidney
GROUP BY age)

SELECT a.age,MIN(a.BloodPressure),b.MaxBloodPressure
from Kidney a
join BloodPressureAge b
on a.Age=b.Age
GROUP BY a.age, b.MaxBloodPressure

例子2:return all the information regarding the patient(s) with the maximum BloodPressure

# Create the CTE
WITH BloodPressure
AS (select max(BloodPressure) as MaxBloodPressure from kidney)

SELECT *
FROM Kidney a
# Join the CTE  
join BloodPressure b
on a.BloodPressure=b.MaxBloodPressure

16.windows function

聚合函数中的字句可以是PARTITION BY子句,但不可是ORDER BY子句
排序函数(列) OVER(选项),这里的选项可以是ORDER BY子句,也可以是 OVER(PARTITION BY子句 ORDER BY子句),但不可以是PARTITION BY子句

16.1 lead()

next

16.2 LAG()

previous

16.3 FIRST_VALUE()

16.4 LAST_VALUE()

16.5 rank()

16.6 stdev()

17. cte与windows function连用

例子

WITH QuotaCount AS (
SELECT SalesPerson, SalesYear, CurrentQuota,
ROW_NUMBER()
OVER (PARTITION BY CurrentQuota ORDER BY CurrentQuota) AS QuotaList
FROM SaleGoal)
SELECT * FROM QuotaCount;

参考资料:https://www.cnblogs.com/csdbfans/p/3504845.html

reference:
https://bbs.csdn.net/topics/320018055
https://www.w3cschool.cn/t_sql/t_sql-n1461we8.html

上一篇下一篇

猜你喜欢

热点阅读