LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

一文吃透286个SQL关键字及相关扩展语法元素

admin
2025年8月30日 12:47 本文热度 57

SQL关键字是SQL语言中具有特殊含义和功能的词汇,是构成SQL语句的基础元素。SQL关键字用于定义数据查询、操作、定义、控制以及事务处理等操作。根据功能的不同,可分为以下几个类别:

一、数据查询(SELECT)

  • SELECT: 从数据库中查询数据。如:SELECT * FROM table_name
  • FROM: 指定查询的目标表或视图。如:SELECT * FROM table_name
  • WHERE: 对数据进行条件过滤。如:SELECT * FROM table_name WHERE condition
  • GROUP BY: 根据指定列对结果集分组。如:SELECT column1, COUNT(*) FROM table_name GROUP BY column1
  • HAVING: 对GROUP BY分组后的结果进行条件过滤。如:SELECT column1, COUNT(*) FROM table_name GROUP BY column1 HAVING COUNT(*) > 5
  • ORDER BY: 查询结果排序(升序ASC/降序DESC)。如:SELECT * FROM table_name ORDER BY column1 ASC
  • DISTINCT: 去除重复行。如:SELECT DISTINCT column1 FROM table_name
  • ALL: 返回所有结果(默认,与DISTINCT相对)。如:SELECT ALL column1 FROM table_name
  • AS: 为列或表指定别名。如:SELECT column1 AS new_name FROM table_name
  • INNER JOIN: 内连接,返回两表匹配的行。如:SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id
  • LEFT OUTER JOIN: 左外连接,返回左表所有行及右表匹配行。如:SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.id = table2.id
  • RIGHT OUTER JOIN: 右外连接,返回右表所有行及左表匹配行。如:SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.id = table2.id
  • FULL OUTER JOIN: 全外连接,返回两表所有行(匹配与不匹配)。如:SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.id = table2.id。MySQL 不支持 FULL OUTER JOIN(可通过LEFT JOIN + UNION + RIGHT JOIN模拟),而 PostgreSQL、SQL Server 等支持。
  • CROSS JOIN: 交叉连接,返回两表的笛卡尔积。如:SELECT * FROM table1 CROSS JOIN table2
  • ON: 指定连接条件。如:SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id
  • USING: 指定连接双方共享名称的列(简化ON)。如:SELECT * FROM table1 INNER JOIN table2 USING (id)
  • UNION: 合并多个查询结果并去重。如:SELECT column1 FROM table1 UNION SELECT column1 FROM table2。UNION 合并的多个查询结果必须列数相同、数据类型兼容。
  • UNION ALL: 合并多个查询结果且不去重。如:SELECT column1 FROM table1 UNION ALL SELECT column1 FROM table2。UNION 需额外排序去重,性能低于 UNION ALL,若确认无重复数据或无需去重,优先用UNION ALL。
  • INTERSECT: 返回多个查询结果的交集。如:SELECT column1 FROM table1 INTERSECT SELECT column1 FROM table2
  • EXCEPT/MINUS: 返回第一个查询特有的结果。如:SELECT column1 FROM table1 EXCEPT SELECT column1 FROM table2
  • WITH (CTE): 定义公共表表达式(临时结果集)。如:WITH temp_table AS (SELECT * FROM table1) SELECT * FROM temp_table
  • WITH RECURSIVE:数据查询中递归公共表表达式关键字,基于 WITH (CTE) 扩展,用于处理层级数据。由初始查询(非递归部分)和递归查询(引用自身)组成,通过 UNION ALL 连接。如:查询部门树:先取顶级部门,再递归关联子部门。
  • OVER(): 定义窗口函数计算范围。如:SELECT column1, ROW_NUMBER() OVER() FROM table_name
  • PARTITION BY: 在窗口中分区数据(类似分组但不折叠行)。如:SELECT column1, ROW_NUMBER() OVER(PARTITION BY column2) FROM table_name
  • ROWS/RANGE: 指定窗口帧滑动范围。如:SELECT column1, SUM(column2) OVER(ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) FROM table_name
  • FETCH FIRST/FETCH NEXT ... ROWS ONLY: 限制返回行数(标准SQL)。如:SELECT * FROM table_name FETCH FIRST 10 ROWS ONLY
  • LIMIT/OFFSET: 限制行数和偏移量(MySQL, PostgreSQL)。如:SELECT * FROM table_name LIMIT 10 OFFSET 5。实际分页中 OFFSET 的 “跳过前 N 行” 逻辑(如:LIMIT 10 OFFSET 20表示取第 21-30 行)是高频用法。OFFSET 在数据量较大时性能较差(需跳过大量数据),实际分页推荐用‘主键定位法’(如:WHERE id > 20 LIMIT 10),利用主键索引直接定位,替代OFFSET 20 LIMIT 10的全表扫描跳过逻辑。
  • TOP: 限制行数(SQL Server)。如:SELECT TOP 10 * FROM table_nameTOP ... PERCENT:TOP除了指定行数,还支持百分比(如:SELECT TOP 10 PERCENT * FROM t取前 10% 数据),属于TOP的扩展高频用法。
  • ROWNUM: 行号伪列(Oracle,可用于限制行数)。如:SELECT * FROM table_name WHERE ROWNUM <= 10。ROW_NUMBER()配合子查询实现分页(如:SELECT * FROM (SELECT t.*, ROW_NUMBER() OVER() rn FROM t) WHERE rn BETWEEN 11 AND 20)是替代 ROWNUM 的常用方式,依赖窗口函数,属于分页高频写法。
  • ANY/SOME: 判断值是否满足子查询任意结果。如:SELECT * FROM table1 WHERE column1 > ANY (SELECT column1 FROM table2)
  • EXISTS: 判断子查询是否返回结果。如:SELECT * FROM table1 WHERE EXISTS (SELECT 1 FROM table2 WHERE table1.id = table2.id)
  • FOR XML/FOR JSON: 格式化结果为 XML/JSON(SQL Server)。如:SELECT * FROM table_name FOR JSON PATH。这是 SQL Server 的扩展功能,非标准 SQL,且仅用于结果格式化,不影响查询逻辑,不要误认为是通用查询关键字。这类关键字属于数据库扩展功能,仅用于结果格式转换,不影响查询逻辑,且不同数据库实现方式不同(如:SQL Server 支持,MySQL 需用函数实现类似功能)。
  • PIVOT: 行转列操作。如:SELECT * FROM table_name PIVOT (SUM(column1) FOR column2 IN (value1, value2))
  • ILIKE: 不区分大小写的模式匹配(PostgreSQL等扩展)。如:SELECT * FROM table_name WHERE column1 ILIKE '%pattern%'
  • LATERAL: 允许子查询引用同一FROM中前面的表(关联子查询优化)。如:SELECT * FROM table1, LATERAL (SELECT * FROM table2 WHERE table2.id = table1.id) AS subquery
  • TABLESAMPLE: 从表中随机抽取样本数据(如 TABLESAMPLE SYSTEM (10) 抽10%样本)。如:SELECT * FROM table_name TABLESAMPLE SYSTEM (10)
  • NOLOCK: SQL Server扩展,查询时不加共享锁(可能读取未提交数据,牺牲一致性换性能,格式如:SELECT * FROM table WITH (NOLOCK))。
  • FORCE INDEX: MySQL扩展,强制查询使用指定索引(如:SELECT * FROM table FORCE INDEX (idx_name),用于优化查询计划)。
  • IGNORE INDEX: MySQL扩展,忽略指定索引。如:SELECT * FROM table IGNORE INDEX (idx_name),避免低效索引使用。
  • NATURAL JOIN: 自然连接,自动根据两表中名称和类型相同的列进行连接(隐含 USING 所有同名列)。如:SELECT * FROM table1 NATURAL JOIN table2。不建议在生产环境使用 NATURAL JOIN,因为若表中新增同名列(如:create_time),会意外加入连接条件,导致结果错误,还不易排查。
  • QUALIFY: 过滤窗口函数计算结果的条件(如:QUALIFY ROW_NUMBER() OVER() < 5,Hive、PostgreSQL 13+ 等支持)。如:SELECT * FROM table_name QUALIFY ROW_NUMBER() OVER() < 5
  • MATERIALIZED VIEW: 物化视图,存储查询结果的物理表(需刷新,Oracle、PostgreSQL 等支持,区别于普通视图)。如:CREATE MATERIALIZED VIEW mv_name AS SELECT * FROM table_name
  • ONLY: 查询基表时排除继承表(PostgreSQL 扩展)。如:SELECT * FROM ONLY table_name
  • VERBOSE: 显示详细查询信息(部分数据库扩展,如:PostgreSQL 的 EXPLAIN VERBOSE)。如:EXPLAIN VERBOSE SELECT * FROM table_name

二、数据操作(DML)

  • INSERT: 向表插入新行。如:INSERT INTO table_name VALUES (value1, value2)
  • INTO: 指定插入目标表。如:INSERT INTO table_name (column1, column2) VALUES (value1, value2)
  • VALUES: 指定插入值列表。如:INSERT INTO table_name VALUES (value1, value2)
  • INSERT ... VALUES: 多行插入。标准INSERT支持一次性插入多行(如:INSERT INTO t (id) VALUES (1), (2), (3)),虽基于 INSERT 和 VALUES,但 “多行逗号分隔” 是高频场景,VALUES 可接收多组值。
  • DEFAULT: 使用列默认值。如:INSERT INTO table_name (column1, column2) VALUES (DEFAULT, value2)
  • UPDATE: 修改表数据。如:UPDATE table_name SET column1 = value1 WHERE condition。UPDATE 多表关联更新(MySQL 高频):MySQL 中除了UPDATE ... SET ... WHEREUPDATE ... JOIN ... SET 是多表关联更新的常用语法(如:UPDATE t1 JOIN t2 ON t1.id = t2.id SET t1.name = t2.name),基于 UPDATE 和 JOIN,属于高频多表更新场景。
  • SET: 指定更新的列和新值。如:UPDATE table_name SET column1 = value1
  • DELETE: 删除行。如:DELETE FROM table_name WHERE condition
  • TRUNCATE: 快速清空表数据(保留表结构)。如:TRUNCATE TABLE table_name。TRUNCATE 在多数数据库中是 DDL 操作,会自动提交事务,且无法回滚(区别于 DELETE(DML,可回滚)),但 PostgreSQL 中 TRUNCATE 支持事务回滚,是个例外。这是关键特性差异,易错。
  • MERGE (UPSERT): 组合插入/更新/删除操作(根据条件执行)。如:MERGE INTO table_name USING source_table ON table_name.id = source_table.id WHEN MATCHED THEN UPDATE SET column1 = source_table.column1 WHEN NOT MATCHED THEN INSERT (id, column1) VALUES (source_table.id, source_table.column1)
  • RETURNING: 返回操作影响的行数据(PostgreSQL/Oracle)。如:INSERT INTO table_name (column1, column2) VALUES (value1, value2) RETURNING *
  • FROM: 在 DELETE/UPDATE 中指定额外关联表。如:DELETE FROM table1 USING table2 WHERE table1.id = table2.id
  • OUTPUT: 返回受影响行数据(SQL Server)。如:DELETE FROM table_name OUTPUT DELETED.* WHERE condition
  • INSERT ... ON DUPLICATE KEY UPDATE: 主键冲突时执行更新(MySQL 扩展)。如:INSERT INTO table_name (column1, column2) VALUES (value1, value2) ON DUPLICATE KEY UPDATE column2 = value2
  • REPLACE: 主键冲突时先删旧行再插新行(MySQL)。如:REPLACE INTO table_name (column1, column2) VALUES (value1, value2)
  • INSERT ... SELECT: 将查询结果插入表。如:INSERT INTO table1 SELECT * FROM table2
  • UPDATE ... FROM: 结合多表数据更新(PostgreSQL 等支持)。如:UPDATE table1 SET column1 = table2.column1 FROM table2 WHERE table1.id = table2.id
  • DELETE ... USING: 结合多表条件删除(PostgreSQL 语法)。如:DELETE FROM table1 USING table2 WHERE table1.id = table2.id
  • COPY: 高效批量导入/导出数据(PostgreSQL)。如:COPY table_name FROM 'file.csv'
  • BULK INSERT: 批量插入数据(SQL Server)。如:BULK INSERT table_name FROM 'file.csv'

三、数据定义(DDL)

  • CREATE: 创建数据库对象(表、视图等)。如:CREATE TABLE table_name (column1 datatype, column2 datatype)
  • ALTER: 修改对象定义(如新增列)。如:ALTER TABLE table_name ADD COLUMN column3 datatype
  • DROP: 删除对象。如:DROP TABLE table_name
  • IF EXISTS: 仅在对象存在时执行操作(避免报错)。如:DROP TABLE IF EXISTS table_name
  • IF NOT EXISTS: 仅在对象不存在时执行操作(避免报错)。如:CREATE TABLE IF NOT EXISTS table_name (column1 datatype, column2 datatype)
  • TABLE: 操作表对象(如:CREATE TABLE)。如:CREATE TABLE table_name (column1 datatype, column2 datatype)
  • VIEW: 创建视图。如:CREATE VIEW view_name AS SELECT * FROM table_name
  • INDEX: 创建索引(提升查询效率)。如:CREATE INDEX idx_name ON table_name (column1)。KEY:MySQL 索引相关,MySQL 中 KEY 是 INDEX 的简写(仅用于索引定义),在 CREATE TABLE 中常用在快速定义非主键索引(如:KEY idx_id (id)),主键索引需用 PRIMARY KEY 明确定义(如:CREATE TABLE t (id INT, KEY idx_id (id))等价于 CREATE INDEX),经常用在建表时快速定义索引。FULLTEXT:全文索引关键字(如:CREATE FULLTEXT INDEX idx_content ON t(content)),用在文本模糊搜索(配合 MATCH ... AGAINST),是 MySQL 文本检索常用功能。
  • SCHEMA: 操作数据库模式(逻辑命名空间)。如:CREATE SCHEMA schema_name
  • DATABASE: 操作数据库(如:CREATE DATABASE)。如:CREATE DATABASE db_name
  • COLUMN: 操作列(如:ALTER TABLE ... ADD COLUMN)。如:ALTER TABLE table_name ADD COLUMN column3 datatype
  • CONSTRAINT: 定义约束(如:命名 CHECK 约束)。如:CREATE TABLE table_name (column1 datatype, CONSTRAINT chk_name CHECK (column1 > 0))。ALTER TABLE 新增约束:除了ALTER TABLE ... ADD COLUMNALTER TABLE ... ADD CONSTRAINT 是新增表级约束的高频操作(如:ALTER TABLE t ADD CONSTRAINT uk_name UNIQUE (name)添加唯一约束),依赖 ALTER 和 CONSTRAINT,属于常用 DDL 场景。
  • PRIMARY KEY: 主键约束(唯一标识表中每行)。如:CREATE TABLE table_name (id INT PRIMARY KEY, column1 datatype)。CREATE TABLE 约束简写:实际建表时约束的简写形式(如:CREATE TABLE t (id INT PRIMARY KEY, name VARCHAR(20) NOT NULL))中,NOT NULL(非空约束)是高频基础约束,常用列级约束(NOT NULL 属于约束关键字)。
  • FOREIGN KEY: 外键约束(关联两表的列)。如:CREATE TABLE table1 (id INT PRIMARY KEY, column1 datatype), CREATE TABLE table2 (id INT PRIMARY KEY, table1_id INT, FOREIGN KEY (table1_id) REFERENCES table1(id))
  • UNIQUE: 唯一约束(列值不可重复)。如:CREATE TABLE table_name (column1 datatype UNIQUE, column2 datatype)
  • CHECK: 检查约束(限制列值范围)。如:CREATE TABLE table_name (column1 datatype, CONSTRAINT chk_name CHECK (column1 > 0))
  • DEFAULT: 默认值约束(列的默认值)。如:CREATE TABLE table_name (column1 datatype DEFAULT value)
  • SEQUENCE: 创建序列(生成自增数字,Oracle/PostgreSQL)。如:CREATE SEQUENCE seq_name
  • CASCADE: 级联操作(删除对象时自动删除依赖对象)。如:ALTER TABLE table1 DROP COLUMN column1 CASCADE
  • RESTRICT: 限制操作(存在依赖时阻止删除)。如:ALTER TABLE table1 DROP COLUMN column1 RESTRICT
  • COMMENT: 添加注释。如:COMMENT ON TABLE table_name IS 'This is a table'
  • COMMENT ON: 为数据库对象(表、列等)添加注释的标准语法(如:COMMENT ON COLUMN table.col IS '注释内容',PostgreSQL 等支持)。如:COMMENT ON COLUMN table_name.column1 IS 'This is a column'
  • TABLESPACE: 指定物理存储位置。如:CREATE TABLE table_name (column1 datatype) TABLESPACE ts_name
  • TEMPORARY/TEMP: 创建临时表(会话结束后自动删除)。如:CREATE TEMPORARY TABLE temp_table (column1 datatype)
  • UNLOGGED: 创建不写事务日志的表(PostgreSQL 高性能扩展)。如:CREATE UNLOGGED TABLE unlogged_table (column1 datatype)
  • DROP ... CASCADE: 删除对象时自动删除依赖它的对象(如:DROP TABLE table CASCADE)。如:DROP TABLE table_name CASCADE
  • ALTER COLUMN: 修改列的属性(如类型、约束等,标准语法)。如:ALTER TABLE table_name ALTER COLUMN column1 INT
  • DROP COLUMN: 删除表中的列(标准语法)。如:ALTER TABLE table_name DROP COLUMN column1
  • CLUSTERED: 指定聚簇索引(SQL Server 等,影响数据物理存储)。如:CREATE CLUSTERED INDEX idx_name ON table_name (column1)
  • NONCLUSTERED: 指定非聚簇索引(SQL Server 等,不影响数据物理存储)。如:CREATE NONCLUSTERED INDEX idx_name ON table_name (column1)
  • ALTER INDEX: 修改索引(如:重建、重命名, ALTER INDEX idx RENAME TO idx_new)。如:ALTER INDEX idx_name RENAME TO idx_new_name
  • RENAME: 重命名数据库对象(部分数据库支持独立 RENAME 语句)。如:ALTER TABLE table1 RENAME TO table2
  • FREEZE: 创建表时冻结元组(PostgreSQL 扩展, CREATE TABLE ... WITH (FREEZE),减少 VACUUM 开销)。如:CREATE TABLE table_name (column1 datatype) WITH (FREEZE)
  • STORAGE: 指定列存储参数(PostgreSQL 扩展)。如:ALTER TABLE table_name ALTER COLUMN column1 SET STORAGE PLAIN
  • INHERITS: 表继承(PostgreSQL 扩展)。如:CREATE TABLE table2 INHERITS (table1)

四、数据控制(DCL)

  • GRANT: 授予权限。如:GRANT SELECT ON table_name TO user1
  • REVOKE: 撤销权限。如:REVOKE SELECT ON table_name FROM user1
  • DENY: 明确拒绝权限(SQL Server)。如:DENY SELECT ON table_name TO user1
  • ROLE: 创建/操作角色(权限组)。如:CREATE ROLE role_name
  • TO: 指定权限授予对象(用户/角色)。如:GRANT SELECT ON table_name TO user1
  • FROM: 指定权限撤销对象(用户/角色)。如:REVOKE SELECT ON table_name FROM user1
  • PUBLIC: 指代所有用户(公共角色)。如:GRANT SELECT ON table_name TO PUBLIC
  • WITH GRANT OPTION: 允许被授权者转授权限。如:GRANT SELECT ON table_name TO user1 WITH GRANT OPTION
  • CREATE USER: 创建数据库用户。如:CREATE USER user1 WITH PASSWORD 'pwd'
  • ALTER USER: 修改用户属性。如:ALTER USER user1 SET DEFAULT_SCHEMA = schema1
  • DROP USER: 删除用户。如:DROP USER IF EXISTS user1
  • GRANT ... WITH ADMIN OPTION: 授予角色管理权限(可授予或撤销角色,区别于:WITH GRANT OPTION)。如:GRANT role_name TO user1 WITH ADMIN OPTION

五、事务控制与锁

  • 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 NULLIS 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]+$')。如:SELECT * FROM table_name WHERE column1 REGEXP '^[0-9]+$'
  • 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

七、函数与表达式

  • 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 DATABASESSHOW 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 用DESCRIBESHOW CREATE PROCEDURE,SQL Server 用sp_helptext,可帮助我们了解存储过程结构,便于维护和调试。

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


阅读原文:原文链接


该文章在 2025/9/1 11:01:28 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved