技术栈:吃透286个SQL关键字及相关扩展语法元素(二)

技术栈:吃透286个SQL关键字及相关扩展语法元素(二)接上回 技术栈 吃透 286 个 SQL 关键字及相关扩展语法元素 一 五 事务控制与锁 BEGIN TRANSACTION START TRANSACTION 启动事务 如 BEGIN TRANSACTION COMMIT 提交事务 永久保

欢迎大家来到IT世界,在知识的湖畔探索吧!

技术栈:吃透286个SQL关键字及相关扩展语法元素(二)



欢迎大家来到IT世界,在知识的湖畔探索吧!

接上回:技术栈:吃透286个SQL关键字及相关扩展语法元素(一)

五、事务控制与锁

  • BEGIN TRANSACTION (START TRANSACTION): 启动事务。如:BEGIN TRANSACTION。
  • COMMIT: 提交事务(永久保存修改)。如:COMMIT。
  • ROLLBACK: 回滚事务(撤销未提交修改)。如:ROLLBACK。
  • SAVEPOINT: 设置事务保存点。如:SAVEPOINT savepoint_name。
  • ROLLBACK TO SAVEPOINT: 回滚到保存点。如:ROLLBACK TO SAVEPOINT savepoint_name。
  • RELEASE SAVEPOINT: 删除保存点。如:RELEASE SAVEPOINT savepoint_name。
  • SET TRANSACTION: 设置事务属性(如隔离级别)。如:SET TRANSACTION ISOLATION LEVEL READ COMMITTED。
  • SET AUTOCOMMIT: 设置自动提交模式(开/关)。如:SET AUTOCOMMIT ON。
  • WAIT/NOWAIT: 处理锁等待行为。如:SELECT * FROM table_name FOR UPDATE NOWAIT。
  • FOR UPDATE: 查询时对行加排他锁(防其他事务修改)。如:SELECT * FROM table_name FOR UPDATE。
  • FOR SHARE: 查询时对行加共享锁(允许读禁止写)。如:SELECT * FROM table_name FOR SHARE。
  • LOCK TABLE: 显式锁定整个表。如:LOCK TABLE table_name IN EXCLUSIVE MODE。
  • SET TRANSACTION ISOLATION LEVEL: 明确设置事务隔离级别。如:SET TRANSACTION ISOLATION LEVEL READ COMMITTED。
  • READ COMMITTED: 事务隔离级别之一(读取已提交数据)。如:SET TRANSACTION ISOLATION LEVEL READ COMMITTED。
  • REPEATABLE READ: 事务隔离级别之一(可重复读)。如:SET TRANSACTION ISOLATION LEVEL REPEATABLE READ。
  • SERIALIZABLE: 事务隔离级别之一(串行化,最高隔离级别)。如:SET TRANSACTION ISOLATION LEVEL SERIALIZABLE。
  • FOR UPDATE OF: 指定锁定的列(Oracle 等)。如:SELECT column1 FROM table_name FOR UPDATE OF column1,精细化锁控制。
  • SET TRANSACTION READ WRITE/READ ONLY: 设置事务读写模式(只读事务可优化性能)。如:SET TRANSACTION READ ONLY。
  • LOCK … IN SHARE MODE: 加共享锁(MySQL,允许读但阻止写)。如:SELECT * FROM table_name LOCK IN SHARE MODE。
  • NOWAIT: 锁等待时立即返回错误(Oracle、PostgreSQL)。如:SELECT * FROM table_name FOR UPDATE NOWAIT。
  • SKIP LOCKED: 跳过已锁定行(Oracle 12c+、PostgreSQL 9.5+)。如:SELECT * FROM table_name FOR UPDATE SKIP LOCKED。

六、条件与逻辑

  • AND: 逻辑与(两条件同时满足)。如:SELECT * FROM table_name WHERE column1 > 0 AND column2 < 10。
  • OR: 逻辑或(两条件满足其一)。如:SELECT * FROM table_name WHERE column1 > 0 OR column2 < 10。
  • NOT: 逻辑非(取反条件)。如:SELECT * FROM table_name WHERE NOT column1 > 0。
  • IN: 判断值是否在指定列表。如:SELECT * FROM table_name WHERE column1 IN (1, 2, 3)。NOT IN:判断值不在指定列表或子查询结果中,是 IN 高频反义用法。如:SELECT * FROM t WHERE id NOT IN (1,2,3)。
  • BETWEEN: 判断值是否在范围内(包含端点)。如:SELECT * FROM table_name WHERE column1 BETWEEN 1 AND 10。
  • LIKE: 模式匹配(配合%, _通配符)。如:SELECT * FROM table_name WHERE column1 LIKE ‘a%’。实际使用中 %(任意字符)、_(单个字符) 作为LIKE的核心通配符,是高频使用的 “隐性关键字”,常与LIKE配合使用(如:WHERE name LIKE ‘张%’匹配 “张” 开头的名字)。
  • ESCAPE: 转义LIKE中的通配符。如:SELECT * FROM table_name WHERE column1 LIKE ‘a\%’ ESCAPE ‘\’。
  • IS NULL: 判断值为 NULL。如:SELECT * FROM table_name WHERE column1 IS NULL。
  • IS NOT NULL: 判断值不为 NULL。如:SELECT * FROM table_name WHERE column1 IS NOT NULL。IS NOT NULL 与 != NULL 的区别:虽IS NOT NULL已列出,但需强调:NULL不能用=或!=判断(如:col != NULL永远返回 NULL,需用col IS NOT NULL),这是=易错点,属于IS NULL的配套注意事项。
  • CASE: 条件表达式(类似if-else)。如:SELECT column1, CASE WHEN column1 > 0 THEN ‘positive’ ELSE ‘negative’ END FROM table_name。CASE 表达式完整形式:CASE 除了CASE WHEN … THEN … ELSE,还有 “简单 case” 形式(如:CASE col WHEN 1 THEN ‘a’ WHEN 2 THEN ‘b’ ELSE ‘c’ END),虽基于 CASE,但两种形式均为高频用法,需明确区别。CASE 的所有 THEN 分支返回值必须兼容同一数据类型(如:不能同时返回 INT 和 VARCHAR),否则会报错(如:SQL Server 会强制转换,可能导致非预期结果),如:CASE WHEN col > 0 THEN 1 ELSE ‘no’ END会报错(INT 与 VARCHAR 不兼容),需统一为:CASE WHEN col > 0 THEN ‘1’ ELSE ‘no’ END。
  • COALESCE(): 返回第一个非NULL值。如:SELECT COALESCE(column1, 0) FROM table_name。
  • NULLIF(): 两值相等返回 NULL,否则返回第一个值。如:SELECT NULLIF(column1, 0) FROM table_name。典型用途:用于避免除法除零错误(如:SELECT 1 / NULLIF(column1, 0),当 column1=0 时返回 NULL,而非报错),在 MySQL、PostgreSQL 等数据库中,1/0会直接报错,而1/NULLIF(0,0)返回 NULL,从而避免报错。
  • XOR: 逻辑异或(MySQL,两条件一真一假则为真)。如:SELECT * FROM table_name WHERE column1 > 0 XOR column2 < 10。
  • NULLS FIRST: 在 ORDER BY 中指定 NULL 值排在前面。如:SELECT * FROM table_name ORDER BY column1 NULLS FIRST。
  • NULLS LAST: 在 ORDER BY 中指定 NULL 值排在后面。如:SELECT * FROM table_name ORDER BY column1 NULLS LAST。
  • REGEXP: 正则表达式匹配(MySQL扩展,如:col REGEXP ‘^[0-9]+#39;)。如:SELECT * FROM table_name WHERE column1 REGEXP ‘^[0-9]+#39;。
  • ALL: 与比较运算符结合,判断值满足子查询所有结果(如:col > ALL (SELECT col FROM t2))。如:SELECT * FROM table1 WHERE column1 > ALL (SELECT column1 FROM table2)。
  • SIMILAR TO: 正则风格模式匹配(PostgreSQL 扩展,支持 % 、 _ 及正则元字符)。如:SELECT * FROM table_name WHERE column1 SIMILAR TO ‘a%’。
  • COLLATE: 在表达式中临时指定排序规则。如:SELECT column1 COLLATE “en_US” FROM table_name。
技术栈:吃透286个SQL关键字及相关扩展语法元素(二)

七、函数与表达式

  • CAST(): 数据类型转换(CAST(expr AS type))。如:SELECT CAST(‘123’ AS INT) FROM table_name。
  • CONVERT(): 数据类型转换(SQL Server)。如:SELECT CONVERT(INT, ‘123’) FROM table_name。
  • COLLATE: 指定字符排序规则。如:SELECT column1 COLLATE “en_US” FROM table_name。
  • 聚合函数: SUM()(求和)、AVG()(平均值)、COUNT()(计数)、MIN()(最小值)、MAX()(最大值)等。如:SELECT SUM(column1) FROM table_name。
  • 字符串函数: CONCAT()(拼接)、SUBSTRING()(截取子串)、LENGTH()(长度)等。如:SELECT CONCAT(column1, column2) FROM table_name。
  • 数值函数: ROUND()(四舍五入)、CEIL()(向上取整)、FLOOR()(向下取整)、ABS()(绝对值)等。如:SELECT ROUND(column1, 2) FROM table_name。
  • 日期函数: CURRENT_DATE(当前日期)、CURRENT_TIMESTAMP(当前时间戳)、DATEADD()(日期加减)等。如:SELECT CURRENT_DATE FROM table_name。
  • 窗口函数: ROW_NUMBER()(行号)、RANK()(排名)、LEAD()(后n行值)、LAG()(前n行值)等。如:SELECT column1, ROW_NUMBER() OVER() FROM table_name。
  • GREATEST: 返回参数列表的最大值(如:GREATEST(1,3,5)=5)。如:SELECT GREATEST(column1, column2) FROM table_name。
  • LEAST: 返回参数列表的最小值。如:SELECT LEAST(column1, column2) FROM table_name。
  • NVL(): 替换NULL值(Oracle, NVL(col, 0) 类似 COALESCE)。如:SELECT NVL(column1, 0) FROM table_name。
  • NVL2(): 扩展NULL替换(Oracle, NVL2(col, val1, val2),非空返回 val1 否则 val2)。如:SELECT NVL2(column1, ‘a’, ‘b’) FROM table_name。
  • DECODE(): 多条件匹配(Oracle,如:DECODE(col, 1, ‘a’, 2, ‘b’, ‘c’))。如:SELECT DECODE(column1, 1, ‘a’, 2, ‘b’, ‘c’) FROM table_name。
  • TO_CHAR(): 转换为字符串(Oracle、PostgreSQL,如:TO_CHAR(date, ‘YYYY-MM-DD’))。如:SELECT TO_CHAR(date_column, ‘YYYY-MM-DD’) FROM table_name。
  • TO_DATE(): 字符串转日期(Oracle、PostgreSQL,如:TO_DATE(‘2023-01-01’, ‘YYYY-MM-DD’))。如:SELECT TO_DATE(‘2023-01-01’, ‘YYYY-MM-DD’) FROM table_name。

八、特殊用途与扩展

  • VALUES: 表值构造器。如:SELECT * FROM (VALUES (1), (2)) AS tmp。VALUES 作为表值构造器时的用法,区别于 INSERT 中的 VALUES。
  • DUAL: 虚拟表(Oracle、MySQL,用于无表查询)。如:SELECT 1 FROM DUAL。
  • USE/SET DATABASE: 切换数据库。如:USE db_name。
  • DECLARE: 声明变量。如:DECLARE @var INT。
  • SET @variable: 设置变量值。如:SET @var = 1。
  • AUTO_INCREMENT: 自增列属性(MySQL)。如:CREATE TABLE table_name (id INT AUTO_INCREMENT PRIMARY KEY)。
  • IDENTITY: 自增列属性(SQL Server)。如:CREATE TABLE table_name (id INT IDENTITY(1,1) PRIMARY KEY)。
  • SERIAL: 自增列属性(PostgreSQL)。如:CREATE TABLE table_name (id SERIAL PRIMARY KEY)。
  • GENERATED ALWAYS AS: 定义计算列(值由表达式生成)。如:CREATE TABLE table_name (column1 INT, column2 INT GENERATED ALWAYS AS (column1 * 2) STORED)。
  • CREATE PROCEDURE: 创建存储过程。如:CREATE PROCEDURE proc_name AS SELECT * FROM table_name。
  • CREATE FUNCTION: 创建函数。如:CREATE FUNCTION func_name() RETURNS INT AS $ SELECT 1 $ LANGUAGE SQL。
  • CREATE TRIGGER: 创建触发器。如:CREATE TRIGGER trig_name BEFORE INSERT ON table_name FOR EACH ROW EXECUTE PROCEDURE func_name()。
  • EXEC/EXECUTE: 执行存储过程(SQL Server)。如:EXEC proc_name。
  • CALL: 调用存储过程(标准 SQL)。如:CALL proc_name。
  • EXPLAIN: 生成查询执行计划(分析查询如何执行,如索引使用、表扫描方式),用于优化查询性能。所有数据库通用。如:EXPLAIN SELECT * FROM table_name WHERE column1 = ‘value’。
  • EXPLAIN ANALYZE: 执行查询并返回实际执行计划+性能统计(PostgreSQL 扩展)。如:EXPLAIN ANALYZE SELECT * FROM table_name。
  • SHOW: 查看元信息(SHOW DATABASES, SHOW TABLES等)。如:SHOW TABLES。
  • DESCRIBE/DESC: 查看表/索引结构。如:DESCRIBE INDEX idx_name ON table。
  • PREPARE: 预编译 SQL 语句,提升重复执行效率。如:PREPARE stmt FROM ‘SELECT * FROM table_name WHERE id = ?’。
  • EXECUTE: 执行预编译的 SQL 语句(配合 PREPARE)。如:EXECUTE stmt USING @id。
  • DEALLOCATE: 释放预编译的 SQL 语句。如:DEALLOCATE stmt。
  • SHOW COLUMNS: 查看表的列信息(MySQL 等,类似 DESCRIBE)。如:SHOW COLUMNS FROM table_name。
  • EXPLAIN PLAN: 生成查询执行计划(Oracle等,仅分析不执行查询)。如:EXPLAIN PLAN FOR SELECT * FROM table_name。
  • PRAGMA: 编译指示(Oracle 等)。如:PRAGMA AUTONOMOUS_TRANSACTION 定义自治事务。
  • EXTERNAL TABLE: 外部表,映射外部文件的数据结构(Oracle、Hive 等,如:CREATE EXTERNAL TABLE t1 … LOCATION ‘path’)。如:CREATE EXTERNAL TABLE table_name (column1 datatype) LOCATION ‘path’。
  • TEMPORARY TABLESPACE: 临时表空间(Oracle,指定临时数据存储位置)。如:CREATE TEMPORARY TABLESPACE temp_ts。
  • DATABASE LINK: 数据库链接,访问远程数据库(Oracle)。如:CREATE DATABASE LINK link_name CONNECT TO user IDENTIFIED BY pwd USING ‘db’。CONNECT BY:层级查询关键字(如:SELECT * FROM t START WITH id = 1 CONNECT BY PRIOR id = parent_id),用于查询树形结构数据(如:部门层级),是 Oracle 处理层级数据的核心关键字。
  • SYNONYM: 创建同义词(别名),简化对象引用(Oracle、SQL Server)。如:CREATE SYNONYM syn_name FOR schema1.table1。
  • FLASHBACK: 闪回查询,访问过去某时间点的数据(Oracle)。如:SELECT * FROM table_name AS OF TIMESTAMP TO_TIMESTAMP(‘2023-01-01’, ‘YYYY-MM-DD’)。
  • SHOW WARNINGS: 显示最近 SQL 语句的警告信息(MySQL 扩展)。如:SHOW WARNINGS。
  • SHOW CREATE TABLE:查看表的完整建表语句(如:SHOW CREATE TABLE t),用于获取表结构、索引、约束等详细信息,是调试和迁移的常用工具。
  • SHOW INDEX FROM:查看表的索引信息(如:SHOW INDEX FROM t),用于分析索引是否生效,属于性能优化常用操作。
  • DESCRIBE PROCEDURE: 在 SQL 中,DESCRIBE PROCEDURE用于查看存储过程的定义信息,包括参数、数据类型、返回值等。不同数据库语法略有差异,如 MySQL 用DESCRIBE或SHOW CREATE PROCEDURE,SQL Server 用sp_helptext,可帮助我们了解存储过程结构,便于维护和调试。

有了关键字这个工具,接下来我们来简单理一下解决问题的思路。如:想 “找出每个部门工资最高的人”,我们先想到的是 “按部门分组”(GROUP BY),再对每组 “取最高工资”(MAX()),最后用SELECT把结果提出来。这时候,GROUP BY、MAX()和SELECT自然就成了我们要用的关键字。刚开始用的时候,我们可以先从简单查询练起,熟悉SELECT+FROM+WHERE的组合;遇到复杂需求,再逐步加入JOIN(多表关联)、ORDER BY(排序)等等工具。这就像我们学开车,先会踩油门刹车,再练倒车入库,慢慢就熟练了。

技术栈:吃透286个SQL关键字及相关扩展语法元素(二)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/137271.html

(0)
上一篇 48分钟前
下一篇 38分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信