SQL Server 常用关键字与功能详解

news2024/11/23 4:36:40

SQL Server 是 Microsoft 提供的一种功能强大的关系型数据库管理系统,其中支持丰富的关键字和函数,用于数据查询、处理和管理。以下是 SQL Server 中常见的关键字及其用途的详解总结。


1. 控制流关键字

控制流关键字用于控制 SQL 脚本的执行逻辑,包括条件判断和循环等操作。

1.1 IFELSE
  • 用于条件判断并执行不同的分支。
IF EXISTS (SELECT 1 FROM Users WHERE UserID = 1)
    PRINT 'User exists'
ELSE
    PRINT 'User does not exist'
1.2 IIF
  • 三元操作符,类似于 CASE WHEN,用于简单的条件判断。
SELECT IIF(Age >= 18, 'Adult', 'Minor') AS AgeGroup
FROM Users
1.3 CASE
  • 用于多条件分支选择。
SELECT 
    CASE 
        WHEN Age >= 18 THEN 'Adult'
        ELSE 'Minor'
    END AS AgeGroup
FROM Users
1.4 BEGINEND
  • 用于定义一个逻辑代码块。
BEGIN
    PRINT 'Start of block'
    SELECT * FROM Users
END
1.5 WHILE
  • 用于循环操作。
DECLARE @Counter INT = 0
WHILE @Counter < 5
BEGIN
    PRINT @Counter
    SET @Counter = @Counter + 1
END

2. 数据操作关键字

这些关键字主要用于对数据进行增删改查操作。

2.1 SELECT
  • 用于查询数据。
SELECT * FROM Users
2.2 INSERT
  • 用于插入数据。
INSERT INTO Users (UserID, UserName)
VALUES (1, 'John')
2.3 UPDATE
  • 用于更新数据。
UPDATE Users SET UserName = 'Jane' WHERE UserID = 1
2.4 DELETE
  • 用于删除数据。
DELETE FROM Users WHERE UserID = 1
2.5 MERGE
  • 用于合并数据(插入、更新或删除)。
MERGE INTO TargetTable AS Target
USING SourceTable AS Source
ON Target.ID = Source.ID
WHEN MATCHED THEN
    UPDATE SET Target.Name = Source.Name
WHEN NOT MATCHED BY TARGET THEN
    INSERT (ID, Name) VALUES (Source.ID, Source.Name)
WHEN NOT MATCHED BY SOURCE THEN
    DELETE;

3. 数据处理函数

SQL Server 提供了丰富的内置函数,用于处理数据。

3.1 字符串函数
  • RTRIMLTRIM: 去除字符串右侧或左侧的空格。
SELECT RTRIM('Hello   ') AS Trimmed
  • STUFF: 替换字符串中指定位置的子字符串。
SELECT STUFF('abcdef', 2, 3, '123') AS Result -- 输出: a123ef
  • LEN: 返回字符串的长度。
SELECT LEN('Hello') AS StringLength
3.2 数学函数
  • ABS: 返回绝对值。
  • ROUND: 四舍五入。
  • POWER: 计算幂次方。
SELECT POWER(2, 3) AS Result -- 输出: 8
3.3 日期函数
  • GETDATE: 返回当前系统时间。
  • DATEADD: 在日期上加上指定的时间间隔。
SELECT DATEADD(DAY, 1, '2024-01-01') AS NextDay
  • DATEDIFF: 计算两个日期之间的差异。
SELECT DATEDIFF(DAY, '2024-01-01', '2024-01-10') AS DaysDifference

4. 窗口函数关键字

窗口函数用于在查询中执行分组或排序相关的操作。

4.1 OVER
  • 配合聚合函数使用,为每一行提供额外的计算结果。
SELECT Name, Salary, RANK() OVER (ORDER BY Salary DESC) AS Rank
FROM Employees
4.2 PARTITION BY
  • 用于分组,配合 OVER 使用。
SELECT Name, Department, RANK() OVER (PARTITION BY Department ORDER BY Salary DESC) AS Rank
FROM Employees

5. 临时表关键字

5.1 TEMPDB
  • 系统数据库,用于存储临时表和对象。
5.2 ###
  • #: 创建本地临时表。
  • ##: 创建全局临时表。
CREATE TABLE #TempTable (ID INT, Name NVARCHAR(50))
INSERT INTO #TempTable VALUES (1, 'John')
SELECT * FROM #TempTable

6. 事务管理关键字

用于管理数据操作的事务性。

6.1 BEGIN TRANCOMMIT
  • 用于开启和提交事务。
BEGIN TRAN
UPDATE Users SET Name = 'NewName' WHERE ID = 1
COMMIT
6.2 ROLLBACK
  • 用于回滚事务。
BEGIN TRAN
UPDATE Users SET Name = 'NewName' WHERE ID = 1
ROLLBACK

7. 安全与权限管理关键字

7.1 GRANTREVOKE
  • 用于分配和撤销权限。
GRANT SELECT ON Users TO UserRole
REVOKE SELECT ON Users FROM UserRole
7.2 DENY
  • 用于显式禁止权限。
DENY SELECT ON Users TO UserRole

8. 高级关键字

8.1 WITH (NOLOCK)
  • 用于减少锁的开销,允许读取未提交的数据。
SELECT * FROM Users WITH (NOLOCK)
8.2 FOR XML PATH
  • 用于将结果集转换为 XML 格式。
SELECT Name FROM Users FOR XML PATH('User')
8.3 CROSS APPLYOUTER APPLY
  • 用于将表值函数应用到每一行数据。
SELECT * FROM Users u CROSS APPLY dbo.GetDetails(u.ID)

总结

SQL Server 的关键字涵盖了数据操作、查询优化、数据处理、事务管理等方方面面。在实际开发中,灵活运用这些关键字和函数,可以高效地完成各种复杂的数据操作。

建议

  • 多用关键字组合优化查询。
  • 注意 WITH (NOLOCK) 和事务的使用,避免不一致的数据问题。
  • 使用窗口函数简化复杂的分组计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2245731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VConsole——(H5调试工具)前端开发使用于手机端查看控制台和请求发送

因为开发钉钉H5微应用在手机上一直查看不到日志等&#xff0c;出现安卓和苹果上传图片一边是成功的&#xff0c;一边是失败的&#xff0c;所以找了这个&#xff0c;之前在开发微信小程序进行调试的时候能看到&#xff0c;之前没想到过&#xff0c;这次被人提点发现可以单独使用…

集合卡尔曼滤波(Ensemble Kalman Filter),用于二维滤波(模拟平面上的目标跟踪),MATLAB代码

集合卡尔曼滤波&#xff08;Ensemble Kalman Filter&#xff09; 文章目录 引言理论基础卡尔曼滤波集合卡尔曼滤波初始化预测步骤更新步骤卡尔曼增益更新集合 MATLAB 实现运行结果3. 应用领域结论 引言 集合卡尔曼滤波&#xff08;Ensemble Kalman Filter, EnKF&#xff09;是…

写给Vue2使用者的Vue3学习笔记

&#x1f64b;‍请注意&#xff0c;由于本人项目中引入了unplugin-auto-import的依赖&#xff0c;所以所有的代码示例中均未手动引入各种依赖库&#xff08;ref、reactive、useRouter等等&#xff09; 初始环境搭建 npm init vuelatest模板语法 插值 同 Vue2 <span>…

golang调用webview,webview2,go-webview2

go version go1.20 windows/amd64 先要了解一些第三方库 1、webview/webview 它是一个跨平台的轻量级的webview库&#xff0c;面向的是C/C&#xff0c;使用它可以构建跨平台的GUI。webview就是浏览器内核&#xff0c;在不同操作系统上是不同的库&#xff0c;比如在windows上…

【初阶数据结构篇】双向链表的实现(赋源码)

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…

结合第三方模块requests,文件IO、正则表达式,通过函数封装爬虫应用采集数据

#引用BeautifulSoup更方便提取html信息&#xff1b;requests模块&#xff0c;发生http请求&#xff1b;os模块&#xff0c;文件写入import requests from bs4 import BeautifulSoup import os#当使用requests库发送请求时&#xff0c;如果不设置User - Agent&#xff0c;默认的…

开源许可协议

何同学推动了开源协议的认识&#xff0c;功不可没&#xff0c;第一次对开源有了清晰的认识&#xff0c;最宽松的MIT开源协议 源自OSC开源社区&#xff1a;何同学使用开源软件“翻车”&#xff0c;都别吵了&#xff01;扯什么违反MIT

【达梦数据库】主备集群改造成读写分离

目录 背景步骤1、确认授权2、参数修改3、确认驱动版本和数据库版本匹配 背景 客户在双机主备集群手动切换的环境下&#xff0c;发现主库压力较大&#xff0c;需要改成读写分离的模式&#xff0c;将主库的压力分担到备库。 步骤 1、确认授权 select * from v$license;授权使…

docker安装zabbix +grafana

安装zabbix grafana 1、部署 mkdir -p /opt/zabbix/{data,backups}mkdir -p /opt/grafanasudo chown -R 472:472 /opt/grafanasudo chmod -R 755 /opt/grafanacat > docker-compose.yml <<-EOF version: 3.3services:mysql-server:image: mysql:8.1container_name: m…

RocketMQ学习记录

服务器操作系统版本&#xff1a;Ubuntu 24.04 Java版本&#xff1a;21 Spring Boot版本&#xff1a;3.3.5 如果打算用GUI&#xff0c;虚拟机安装Ubuntu 24.04&#xff0c;见虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客https://blog.csdn.net/weixin_4…

网络安全之接入控制

身份鉴别 ​ 定义:验证主题真实身份与其所声称的身份是否符合的过程&#xff0c;主体可以是用户、进程、主机。同时也可实现防重放&#xff0c;防假冒。 ​ 分类:单向鉴别、双向鉴别、三向鉴别。 ​ 主题身份标识信息:密钥、用户名和口令、证书和私钥 Internet接入控制过程 …

Spring 框架七大模块(Java EE 学习笔记03)

​ ​核心容器模块&#xff08;Core Container&#xff09; 核心容器模块在Spring的功能体系中起着支撑性作用&#xff0c;是其他模块的基石。核心容器层主要由Beans模块、Core模块、Contex模块和SpEL模块组成。 &#xff08;1&#xff09;Beans模块。它提供了BeanFactory类&…

IPv6基础知识

IPv6是由IEIF提出的互聯網協議第六版&#xff0c;用來替代IPv4的下一代協議&#xff0c;它的提出不僅解決了網絡地址資源匱乏問題&#xff0c;也解決了多種接入設備接入互聯網的障礙。IPv6的地址長度為128位&#xff0c;可支持340多萬億個地址。如下圖&#xff0c;3ffe:1900:fe…

旷世yolox自定义数据训练和验证和onnx导出推理

目录 1.前言 2.代码 3.环境 4.自定义数据形态 5.配置文件 6.训练 7.验证 8.评估混淆矩阵 9.导出onnx 10.onnx推理 -- 补充&#xff1a;docker环境 1.前言 旷世科技的yolox比较清爽&#xff0c;效果也不错&#xff0c;简单总结主要有三点创新比较高&#xff1a;deco…

Electron开发构建工具electron-vite(alex8088)添加VueDevTools(VitePlugin)

零、介绍 本文章的electron-vite指的是这个项目&#x1f449;electron-vite仓库&#xff0c;electron-vite网站 本文章的VueDevTools指的是VueDevTools的Vite插件版&#x1f449;https://devtools.vuejs.org/guide/vite-plugin 一、有一个用electron-vite创建的项目 略 二、…

软件测试—— Selenium 常用函数(一)

前一篇文章&#xff1a;软件测试 —— 自动化基础-CSDN博客 目录 前言 一、窗口 1.屏幕截图 2.切换窗口 3.窗口设置大小 4.关闭窗口 二、等待 1.等待意义 2.强制等待 3.隐式等待 4.显式等待 总结 前言 在前一篇文章中&#xff0c;我们介绍了自动化的一些基础知识&a…

UE5 腿部IK 解决方案 footplacement

UE5系列文章目录 文章目录 UE5系列文章目录前言一、FootPlacement 是什么&#xff1f;二、具体实现 前言 在Unreal Engine 5 (UE5) 中&#xff0c;腿部IK&#xff08;Inverse Kinematics&#xff0c;逆向运动学&#xff09;是一个重要的动画技术&#xff0c;用于实现角色脚部准…

私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?

在当今数字化、网络化的时代背景下&#xff0c;视频监控技术已广泛应用于各行各业&#xff0c;成为保障安全、提升效率的重要工具。然而&#xff0c;面对复杂多变的监控需求和跨区域、网络化的管理挑战&#xff0c;传统的视频监控解决方案往往显得力不从心。 EasyCVR视频融合云…

山东春季高考-C语言-综合应用题

&#xff08;2018年&#xff09;3.按要求编写以下C语言程序&#xff1a; &#xff08;1&#xff09;从键盘上输入三个整数a、b、c&#xff0c;判断能否以这三个数为边构成三角形&#xff0c;若可以则计算机三角形的面积且保留两位小数&#xff1b;若不可以则输出“不能构成三角…

Linux移植IMX6ULL记录 一:编译源码并支持能顺利进入linux

目录 前言 一、不修改文件进行编译 二、修改设备树文件进行编译 前言 我用的开发板是100_ask_imx6ull_pro&#xff0c;其自带的linux内核版本linux-4.9.88&#xff0c;然后从linux官网下载过来的linux-4.9.88版本的arch/arm/configs/defconfig和dts设备树文件并没有对imx6ull…