📅  最后修改于: 2023-12-03 15:35:14.338000             🧑  作者: Mango
T-SQL,全称为Transact-SQL,是针对SQL Server数据库管理系统而开发的扩展SQL语言。
T-SQL是一种程序语言,用于存储过程、触发器、函数、视图等数据库对象的创建,也可以用于数据的增、删、改、查等操作。它是SQL Server的核心,支持复杂数据类型、事务处理、游标、嵌套查询、动态语句等高级特性。
T-SQL广泛应用于企业级应用程序和数据库管理系统中,如CRM系统、ERP系统、数据仓库等。它可以实现复杂的业务逻辑,提升系统的性能和安全性,简化开发过程。
T-SQL也可以用于数据报表的生成和分析,通过使用聚合函数和窗口函数,可以方便地对数据进行分组、排序、筛选、统计等操作。
-- 创建数据库
CREATE DATABASE ExampleDB;
-- 切换数据库
USE ExampleDB;
-- 创建表
CREATE TABLE [dbo].[Students] (
[ID] INT NOT NULL,
[Name] VARCHAR (50) NOT NULL,
[Age] INT NULL,
[Gender] VARCHAR (10) NULL,
[Class] VARCHAR (50) NULL,
[Score] DECIMAL (18, 2) NULL,
PRIMARY KEY CLUSTERED ([ID] ASC)
);
-- 插入数据
INSERT INTO [dbo].[Students] (ID, Name, Age, Gender, Class, Score)
VALUES (1, '小明', 18, '男', '一班', 95.6),
(2, '小红', 19, '女', '二班', 88.7);
-- 删除表
DROP TABLE [dbo].[Students];
-- 删除数据库
DROP DATABASE ExampleDB;
-- 查询所有数据
SELECT * FROM [dbo].[Students];
-- 查询指定列的数据
SELECT [ID], [Name], [Score] FROM [dbo].[Students];
-- 查询带有筛选条件的数据
SELECT * FROM [dbo].[Students] WHERE [Age] >= 18 AND [Score] >= 90;
-- 对数据进行分组和统计
SELECT [Class], AVG([Score]) AS [Average Score] FROM [dbo].[Students] GROUP BY [Class];
-- 对数据进行排序
SELECT * FROM [dbo].[Students] ORDER BY [Score] DESC, [Age] ASC;
-- 使用窗口函数进行数据分析
SELECT [ID], [Name], [Age], [Score],
AVG([Score]) OVER (PARTITION BY [Class]) AS [Class Average Score]
FROM [dbo].[Students];
-- 创建存储过程
CREATE PROCEDURE [dbo].[GetScoreByClass] (@class VARCHAR(50))
AS
BEGIN
SELECT [Name], [Score] FROM [dbo].[Students] WHERE [Class] = @class;
END;
-- 调用存储过程
EXEC [dbo].[GetScoreByClass] '一班';
-- 创建函数
CREATE FUNCTION [dbo].[GetAverageScoreByClass] (@class VARCHAR(50))
RETURNS DECIMAL(18,2)
AS
BEGIN
DECLARE @avg_score DECIMAL(18,2);
SELECT @avg_score = AVG([Score]) FROM [dbo].[Students] WHERE [Class] = @class;
RETURN @avg_score;
END;
-- 调用函数
SELECT [dbo].[GetAverageScoreByClass]('一班');
-- 创建触发器
CREATE TRIGGER [dbo].[Students_AfterUpdateScore]
ON [dbo].[Students]
AFTER UPDATE
AS
BEGIN
DECLARE @id INT, @name VARCHAR(50), @old_score DECIMAL(18,2), @new_score DECIMAL(18,2);
SELECT @id = [ID], @name = [Name], @old_score = [Score], @new_score = i.[Score]
FROM [Inserted] i, [Deleted] d
WHERE i.[ID] = d.[ID];
IF @old_score <> @new_score
BEGIN
PRINT 'Updating score of student ' + @name + ' from ' + CAST(@old_score AS VARCHAR(10)) + ' to ' + CAST(@new_score AS VARCHAR(10));
END;
END;
-- 更新数据,触发触发器
UPDATE [dbo].[Students] SET [Score] = 90 WHERE [ID] = 1;
T-SQL是一种非常强大的语言,它可以完成各种复杂的数据库操作,提高了数据库开发的效率。在使用T-SQL时,需要熟悉其常用语法和高级特性,要注意数据的安全和性能。