SQL关键字总结

SQL的基本类型

在这里插入图片描述

特殊关键字

类型含义
primary key主键
foreign key() references外键,括号中为外键,references后为外键的表
not null不为空,前面为属性的定义

创建/插入/删除/修改

类型含义
create table创建一个表
insert into…values向表中插入一条信息
delete from从表中删除一条信息
update…set…where在where的位置,更新内容为set的值
drop table删除表
alter table…add向表中添加某个属性
alter table…drop删除某个属性
truncate清空内容

单表查询

类型含义
select表示要查找表所含有的属性
from表示要操作的表
where判断条件,根据该判断条件选择信息
distinct表示将结果去重
all表示不去重复
and在where后使用and表示将判断条件连接起来
or在where中使用or表示判断条件多选一
not在where中使用not表示判断条件相反

多表查询

类型含义
A,B在from后面通过逗号连接多张表,表示将这些表进行笛卡尔积运算
natural join将natural join关键字前后的两张表进行自然连接运算
left outer join左外连接,以左边为基准进行连接,右边没有的用NULL代替
right outer join右外连接,以右边为基准进行连接,左边没有的用NULL代替
full join全然外连接,将两表完全合并,没有的用NULL代替
join/inner join内连接,只连接两表皆有,其他删除
corss join交叉连接,结果为两表的笛卡尔积
A join B using( c )将A和B通过c属性自然连接

运算关键字

类型含义
as将as前的关系起一个别名,在此语句中可以用别名来代指这个表
*在select中表示找出这个表所有的属性
order by让查询结果中的信息按照给定的属性排序(默认升序)
desc降序
asc升序
between在where中使用between表示一个数在两个数值之间取值
not betweenbetween的反义词,在两个数之外取值
union/union all将连个SQL语句做并运算,并且自动去重
intersect/intersect all将两个SQL语句做交运算,并自动去重
except/except all将两个SQL语句做差运算,并且自动去重
is null在where中使用is null表示这个值是空值
is not null在where中使用is not null表示这个值不是空值
limit a offset b从第b行开始返回a行

聚集函数

类型含义
avg平均值
min最小值
max最大值
sum求和
count计数
distinct表示将后面的属性去重复
having对group by产生的分组进行筛选,可以使用聚集函数
group by将在group by上取值相同的信息分在一个组
<think>好的,我现在需要帮助用户找到SQL关键字过滤字典的下载资源,以及SQL保留关键字列表。首先,用户的需求很明确,他们想要一个列表,可能用于在开发中避免使用保留字作为标识符,或者在处理用户输入时进行过滤,防止SQL注入攻击。 首先,我应该回顾已有的引用内容。根据引用[2],提到MySQL有一个KEYWORDS表,列出了所有关键字及其是否保留的状态。这可能意味着用户可以直接查询这个表来获取最新的列表。此外,引用[1]提到DCL(数据控制语言)如SELECT用于过滤结果,这可能与用户提到的“过滤”相关,但这里用户更关注的是关键字列表本身。 接下来,用户可能需要不同数据库系统的关键字列表,比如MySQL、PostgreSQLSQL Server等,因为每个数据库的关键字可能不同。例如,MySQL的保留字在引用[2]中提到,而其他数据库可能有不同的保留字。 用户提到的“过滤字典”可能指一个包含所有保留关键字的列表,用于检查用户输入是否符合这些关键字,避免冲突或注入攻击。因此,我应该建议官方文档作为主要来源,因为这是最权威和最新的。 另外,引用[3]和[4]提到上下文关键字和内存区域,可能与当前问题关联不大,但需要确认是否有其他引用被遗漏。不过根据现有信息,引用[2]是最相关的。 用户可能需要知道如何动态获取关键字列表,比如通过查询数据库的元数据表,如MySQLKEYWORDS表。此外,提供示例查询会很有帮助,比如SELECT WORD FROM INFORMATION_SCHEMA.KEYWORDS WHERE RESERVED = 1; 另外,防止SQL注入不仅仅是过滤关键字,还需要使用参数化查询,这一点也应该提及,以提供更全面的建议。 最后,用户可能需要下载现成的列表,因此需要提供官方文档链接,并提醒他们不同版本的关键字可能不同,建议定期更新列表。同时,警告他们不要仅依赖黑名单过滤,而是结合其他安全措施。 总结步骤: 1. 指出官方文档是主要资源,并提供各数据库的链接。 2. 提供MySQL中直接查询保留字的方法。 3. 提到防止SQL注入的其他措施,如参数化查询。 4. 强调定期更新和版本差异的重要性。 5. 生成相关问题,帮助用户深入理解。</think>根据你的需求,SQL 关键字过滤字典主要用于防止 SQL 注入或避免标识符命名冲突。以下是分步说明和相关资源: --- ### **1. 官方数据库文档获取关键字列表** 不同数据库的关键字列表略有差异,建议直接通过数据库官方文档获取: - **MySQL**:保留关键字列表见 [官方文档第11.3节](https://dev.mysql.com/doc/refman/8.0/en/keywords.html),支持版本动态查询: ```sql SELECT WORD FROM INFORMATION_SCHEMA.KEYWORDS WHERE RESERVED = 1; -- 查询所有保留关键字[^2] ``` - **PostgreSQL**:关键字列表见 [官方文档](https://www.postgresql.org/docs/current/sql-keywords-appendix.html) - **SQL Server**:保留关键字见 [Microsoft Docs](https://learn.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql) --- ### **2. 动态生成关键字过滤字典** 在代码中可通过以下方式动态获取: ```python # 以 MySQL 为例(需连接数据库) import mysql.connector conn = mysql.connector.connect(user='root', database='information_schema') cursor = conn.cursor() cursor.execute("SELECT WORD FROM KEYWORDS WHERE RESERVED = 1") reserved_keywords = [row[0] for row in cursor.fetchall()] ``` --- ### **3. 防止 SQL 注入的额外建议** - **参数化查询**:优先使用预编译语句(如 Python 的 `cursor.execute("SELECT * FROM table WHERE id = %s", (user_input,))`),而非字符串拼接。 - **输入验证**:结合正则表达式限制用户输入的格式。 - **权限隔离**:使用低权限数据库账户,避免直接使用 `root` 或 `sa` 账户[^1]。 --- ### **4. 现成关键字列表下载** - **GitHub 开源项目**:搜索关键词 `sql-reserved-keywords-list`,例如 [jasoet/sql-keywords](https://github.com/jasoet/sql-keywords) 提供多数据库关键字列表。 - **CSV/JSON 格式文件**:部分技术博客会整理跨数据库的通用关键字列表(注意核对版本)。 --- ### **关键注意事项** - **版本差异**:例如 MySQL 8.0 新增 `CUME_DIST` 等关键字,旧版本不包含。 - **大小写敏感**:SQL 关键字通常不区分大小写,但标识符可能因数据库配置而异。 - **上下文关键字**:如 `WITHIN GROUP`(PostgreSQL)仅在特定语法中生效,需结合场景判断[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值