📜  T-SQL-概述(1)

📅  最后修改于: 2023-12-03 15:35:14.338000             🧑  作者: Mango

T-SQL概述

什么是T-SQL

T-SQL,全称为Transact-SQL,是针对SQL Server数据库管理系统而开发的扩展SQL语言。

T-SQL是一种程序语言,用于存储过程、触发器、函数、视图等数据库对象的创建,也可以用于数据的增、删、改、查等操作。它是SQL Server的核心,支持复杂数据类型、事务处理、游标、嵌套查询、动态语句等高级特性。

T-SQL的使用场景

T-SQL广泛应用于企业级应用程序和数据库管理系统中,如CRM系统、ERP系统、数据仓库等。它可以实现复杂的业务逻辑,提升系统的性能和安全性,简化开发过程。

T-SQL也可以用于数据报表的生成和分析,通过使用聚合函数和窗口函数,可以方便地对数据进行分组、排序、筛选、统计等操作。

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时,需要熟悉其常用语法和高级特性,要注意数据的安全和性能。