当前位置: 首页 > ops >正文

SQLSERVER关键字

在 SQL Server 的 T-SQL 语言中,关键字(Keywords) 是具有特殊含义的预定义词汇,用于执行特定操作(如查询、创建对象、控制事务等)。这些关键字不能直接作为标识符(如表名、列名、变量名等)使用,除非用方括号 []、双引号 " 或分隔符 "" 括起来(如 [SELECT] 作为列名)。

一、常用关键字分类及说明

以下是 SQL Server 中最常用的关键字,按功能分类整理:

1. 数据查询(DQL)核心关键字

用于从表中检索数据,最基础也最常用:

  • SELECT:指定要查询的列(如 SELECT id, name FROM table)。

  • FROM:指定查询的数据源(表、视图等,如 SELECT * FROM Students)。

  • WHERE:筛选行的条件(如 WHERE age > 18)。

  • ORDER BY:对结果集排序(如 ORDER BY age DESC)。

  • GROUP BY:按列分组并配合聚合函数(如 GROUP BY dept)。

  • HAVING:筛选分组后的结果(如 HAVING COUNT(*) > 10)。

  • JOIN:关联多表查询(如 INNER JOINLEFT JOIN)。

  • DISTINCT:去除重复行(如 SELECT DISTINCT dept FROM Employees)。

  • TOP:限制返回的行数(如 SELECT TOP 10 * FROM Orders)。

2. 数据操纵(DML)关键字

用于添加、修改、删除表中的数据:

  • INSERT:插入新行(如 INSERT INTO table (col1) VALUES (val1))。

  • UPDATE:修改现有行(如 UPDATE table SET col1 = val1 WHERE id=1)。

  • DELETE:删除行(如 DELETE FROM table WHERE id=1)。

  • MERGE:根据条件执行插入、更新或删除(合并两个表的数据)。

3. 数据定义(DDL)关键字

用于创建、修改、删除数据库对象(表、索引、视图等):

  • CREATE:创建对象(如 CREATE TABLECREATE INDEXCREATE VIEW)。

  • ALTER:修改现有对象(如 ALTER TABLE 新增列、ALTER INDEX 重建索引)。

  • DROP:删除对象(如 DROP TABLEDROP DATABASE)。

  • TRUNCATE:清空表数据(不可回滚,如 TRUNCATE TABLE Students)。

  • RENAME:重命名对象(如 sp_rename 'oldname', 'newname',需配合系统存储过程)。

4. 事务控制关键字

用于管理事务,保证数据一致性:

  • BEGIN TRANSACTION:开始事务(可简写为 BEGIN TRAN)。

  • COMMIT:提交事务(使修改永久生效)。

  • ROLLBACK:回滚事务(撤销未提交的修改)。

  • SAVE TRANSACTION:设置事务保存点(可回滚到指定点,而非全量回滚)。

5. 流程控制关键字

用于编写批处理、存储过程中的逻辑控制:

  • IF...ELSE:条件判断(如 IF EXISTS (...) BEGIN ... END ELSE ...)。

  • WHILE:循环执行(如 WHILE @i < 10 BEGIN ... @i +=1 END)。

  • BEGIN...END:组合语句块(将多句代码视为一个整体)。

  • CASE:分支条件(如 CASE WHEN age>18 THEN '成年' ELSE '未成年' END)。

  • GOTO:跳转到指定标签(不推荐频繁使用,影响可读性)。

  • RETURN:退出存储过程或函数。

6. 其他重要关键字
  • AS:为列或表指定别名(如 SELECT name AS 姓名 FROM Students)。

  • IN:判断值是否在列表中(如 WHERE dept IN ('IT', 'HR'))。

  • BETWEEN:判断值是否在范围中(如 WHERE age BETWEEN 18 AND 30)。

  • LIKE:模糊匹配(如 WHERE name LIKE '%张%')。

  • IS NULL/IS NOT NULL:判断空值(如 WHERE email IS NULL)。

  • AND/OR/NOT:逻辑运算符(组合多个条件)。

  • EXISTS:判断子查询是否返回结果(如 WHERE EXISTS (SELECT * FROM Orders WHERE user_id=1))。

  • USE:指定当前数据库(如 USE SchoolDB)。

二、使用注意事项

  1. 避免作为标识符:关键字不能直接用作表名、列名等,例如 CREATE TABLE SELECT (...) 会报错。若必须使用,需用分隔符括起:

    CREATE TABLE [SELECT] (id INT);  -- 用方括号括起关键字作为表名
  2. 区分保留与非保留关键字

    • 保留关键字:在任何语境下都有特殊含义(如 SELECTINSERT),严格禁止直接作为标识符。

    • 非保留关键字:仅在特定语境下有意义(如 PIVOTUNPIVOT),但仍建议避免用作标识符。

  3. 版本差异:部分关键字在 SQL Server 新版本中新增(如 OFFSETFETCH 是 2012+ 新增),使用时需注意兼容性。

三、查询所有关键字

若需查看 SQL Server 完整关键字列表,可通过系统视图查询:

-- 查询 SQL Server 所有保留关键字
SELECT * FROM sys.keywords WHERE is_reserved = 1;

掌握关键字是编写正确 T-SQL 的基础,实际开发中需注意其特殊含义,避免语法错误。

四、SQL Server 中常用关键字的小写形式

以下是 SQL Server 中常用关键字的小写形式,按功能分类整理,方便参考:

1. 数据查询(dql)关键字

  • select:指定要查询的列

  • from:指定查询的数据源(表、视图等)

  • where:筛选行的条件

  • order by:对结果集排序

  • group by:按列分组,配合聚合函数使用

  • having:筛选分组后的结果

  • join:关联多表查询(如 inner joinleft joinright join

  • distinct:去除查询结果中的重复行

  • top:限制返回的行数

  • as:为列或表指定别名

2. 数据操纵(dml)关键字

  • insert:向表中插入新行

  • update:修改表中现有行的数据

  • delete:删除表中的行

  • merge:根据条件对表执行插入、更新或删除操作(合并数据)

3. 数据定义(ddl)关键字

  • create:创建数据库对象(如 create tablecreate indexcreate view

  • alter:修改现有数据库对象(如 alter tablealter index

  • drop:删除数据库对象(如 drop tabledrop database

  • truncate:清空表中所有数据(不可回滚)

  • rename:重命名数据库对象(需配合系统存储过程 sp_rename

4. 事务控制关键字

  • begin transaction:开始事务(可简写为 begin tran

  • commit:提交事务,使修改永久生效

  • rollback:回滚事务,撤销未提交的修改

  • save transaction:设置事务保存点,可回滚到指定点

5. 流程控制关键字

  • if...else:条件判断语句

  • while:循环执行代码块

  • begin...end:将多条语句组合为一个代码块

  • case:分支条件判断(如 case when ... then ... else ... end

  • goto:跳转到指定标签(不推荐频繁使用)

  • return:退出存储过程或函数

6. 其他常用关键字

  • in:判断值是否在指定列表中

  • between:判断值是否在指定范围内

  • like:模糊匹配(配合通配符 %_ 使用)

  • is null/is not null:判断值是否为 null

  • and/or/not:逻辑运算符(组合多个条件)

  • exists:判断子查询是否返回结果

  • use:指定当前操作的数据库

  • on:在 join 中指定关联条件(如 left join ... on ...

这些小写关键字与大写形式功能完全一致,T-SQL 对关键字的大小写不敏感(如 selectSELECT 效果相同),小写形式更符合部分开发者的编码习惯。

http://www.xdnf.cn/news/19443.html

相关文章:

  • npm 打包上传命令,撤销错误版本
  • 智能核心:机器人芯片的科技革新与未来挑战
  • 开源npm引导guide组件
  • GIT(了解)
  • 音视频开发入门:FFmpeg vs GStreamer,新手该如何选择?
  • 前端数据可视化:基于Vue3封装 ECharts 的最佳实践
  • Prometheus Alertmanager 告警组件学习
  • GD32F303在移植FreeRTOS时,系统卡死在Systick_Handler B.的处理方法
  • 164.在 Vue3 中使用 OpenLayers 加载 Esri 地图(多种形式)
  • 后端Web实战-多表操作员工列表查询
  • Spring Bean生命周期的完全指南
  • 面试常考css:三列布局实现方式
  • Interceptor拦截器入门知识及其工作原理
  • 虚拟化技术是什么?电脑Bios中的虚拟化技术怎么开启
  • S32K3平台FEE 应用笔记
  • C++ 多线程实战 01|为什么需要线程:并发 vs 并行,进程 vs 线程
  • 6 种可行的方法:小米手机备份到电脑并恢复
  • js语言编写科技风格博客网站-详细源码
  • AI-调查研究-66-机器人 机械臂 软件算法体系:轨迹规划·视觉定位·力控策略
  • 网络层和数据链路层
  • 智能对话系统优化方案:解决响应偏差与个性化缺失问题
  • OpenStack网络类型解析
  • 超越Transformer:语言模型未来的认知革命与架构重构
  • 手写MyBatis第47弹:Interceptor接口设计与Invocation上下文传递机制--MyBatis动态代理生成与方法拦截的精妙实现
  • uniApp 混合开发全指南:原生与跨端的协同方案
  • shell编程基础入门-3
  • Ansible之playbook剧本
  • 【Spark Core】(三)RDD的持久化
  • nrf52840 解锁
  • Linux部署OSM本地服务测试环境