SQL 词条(119 条)
查询子句
SELECT像点菜时勾选想吃的那几道菜:菜单(表)上有很多菜,但你只让后厨端出选中的那几样。
FROM告诉数据库去哪个抽屉(表)里翻数据;SELECT 后面列的是抽屉里的东西,FROM 后面才是抽屉名字。
WHERE像用筛子筛豆子:把不符合条件的行漏下去丢掉,只留满足条件的。
GROUP BY把值相同的行归成一组,像把混在一起的袜子按颜色分堆,方便数每堆有几只。
HAVING分组之后再筛一遍,像把菜分盘装好后,再挑出没熟的盘子扔掉;WHERE 是分组前挑菜。
ORDER BYORDER BY 是 SELECT 中用来对结果行按指定列排序的子句;就像排队时按身高从高到低站好。
LIMIT只取结果最前面的几行,像从一盒巧克力里只拿最上面的几颗。
OFFSETOFFSET 子句用于跳过结果集开头的若干行,常与 ORDER BY + LIMIT 配合做分页查询。
DISTINCT去掉重复值,只保留不一样的结果,像从一把糖里把同口味的只留一颗。
AS给列或表起个小名,让结果更易读,像快递柜给长手机号贴个取件昵称。
UNIONUNION 把两个 SELECT 的结果上下拼接,并去掉完全重复的行。
ALLALL 与 UNION 搭配时保留所有行,包括重复行。
INTERSECTINTERSECT 返回同时出现在两个 SELECT 结果中的行。
EXCEPTEXCEPT 返回在第一个 SELECT 结果中但不在第二个 SELECT 结果中的行。
ASCASC 表示按升序排列(从小到大),是 ORDER BY 的默认排序方式。
DESCDESC 表示按降序排列(从大到小)。
WITHWITH 用于定义一个或多个临时结果集(公用表表达式 CTE),让复杂查询可以分步书写和复用。
OVEROVER 子句把普通聚合函数或窗口函数标记为按指定窗口分区计算,而不是对整个结果集折叠成一行。
PARTITIONPARTITION BY 用于在窗口函数中把结果集按指定列分成若干组,每组独立计算。
SHOWSHOW 用于查看数据库对象或状态信息(MySQL 语法),SQLite 不支持。
USEUSE 用于切换当前会话的默认数据库(MySQL 语法),SQLite 不支持。
DESCRIBEDESCRIBE 用于查看表的结构信息(MySQL 语法),SQLite 不支持。
EXPLAINEXPLAIN 用于显示查询的执行计划,帮助分析 SQL 是怎么运行的、索引是否被使用。
数据操作
INSERT往表格里添新行,像往花名册上登记一个新生。
UPDATE修改表里已有数据,像把成绩单上的旧分数用修正液涂掉改成新分数。
DELETE从表里把符合条件的行搬走,像从相册里抽出不喜欢的照片扔掉。
关键字
INTOINSERT 的小跟班,专门指明新数据要塞进哪张表,像把信投进哪个邮筒。
VALUES把要插入的具体数值列成清单,像快递单上填写的物品明细。
SETUPDATE 的右手,负责写明哪一列改成什么值,像调电视频道时按下确认键。
GROUPGROUP 是 GROUP BY 的前半部分,用于把值相同的行归成一组,常配合聚合函数做统计。
BYBY 是 GROUP BY 和 ORDER BY 的关键字,跟在 GROUP 或 ORDER 后面指明按什么分组或排序。
ORDERORDER BY 的前半部分,像排队口令里的'按身高';后面必须接 BY 和列名才能真正排序。
表结构
CREATE搭一个新的空表格(或数据库、视图等),像先用木板钉出一个空书架。
DROP把整张表或整个数据库彻底拆掉,像把房子连同家具一起推平,数据会一起消失。
ALTERALTER TABLE 语句用来修改已存在表的结构,比如添加、删除或重命名列。
TABLE数据库里的一张二维表格,像 Excel 里的一张工作表,行是记录,列是字段。
DATABASEDATABASE 是独立的数据容器,里面可以存放多张表、视图、索引等对象;SQLite 用 ATTACH DATABASE 附加另一个数据库文件。
VIEWVIEW 是存储在数据库里的一条命名查询,本身不存数据,查它时就像查一张虚拟表。
INDEXINDEX 是给表的一列或多列建立的查找目录,能加快查询但会减慢写入并占用空间。
TRUNCATETRUNCATE TABLE 用于快速删除表中所有行;在 MySQL/PostgreSQL 中速度通常比 DELETE 快且不记录单行删除。
连接
JOIN把两张表按某个条件拼成一张大表,像把拼图的两块按图案对接起来。
INNERINNER JOIN 只返回左右两表在连接条件上都能匹配的行,匹配不上的两边都丢弃。
LEFTLEFT JOIN(左外连接)保留左表所有行,右表没匹配上的列用 NULL 补齐。
RIGHTRIGHT JOIN(右外连接)保留右表所有行,左表没匹配上的列用 NULL 补齐。
FULLFULL OUTER JOIN 保留左右两表所有行,没匹配上的列用 NULL 补齐。
OUTEROUTER 是外连接的关键字,和 LEFT/RIGHT/FULL 搭配表示保留未匹配行并补 NULL。
CROSSCROSS JOIN 表示两表做笛卡尔积,产生所有可能的行组合。
ONJOIN 的配对规则,告诉数据库两张表按哪一列对上号,像月老给两个人牵的红线。
USINGUSING 用于连接两表中同名的列,代替 ON 条件,结果中该列只出现一次。
条件逻辑
AND多个条件必须同时成立,像进考场要同时带身份证和准考证,缺一不可。
OR多个条件满足一个就行,像买票时可以用学生证或老年证,有其一即可。
NOT把条件反过来,像守门员:原来能进的球,现在被挡出去。
ISIS 用于与 NULL 或 TRUE/FALSE 进行特殊比较,尤其是 IS NULL 和 IS NOT NULL。
IN判断一个值是否在指定清单里,像检查名单上有没有这个人。
BETWEEN判断一个值是否在两道门之间(含边界),像身高在 120 cm 到 150 cm 之间可以免票。
LIKE按模糊模式找人,% 像一张万能牌可以代替任意多个字符,_ 像一张单字符牌。
EXISTSEXISTS 用于判断子查询是否返回至少一行,常用于相关子查询。
ANYANY/SOME 是 SQL 量词,用于把某值与子查询结果逐一比较,满足任意一个即可。
CASECASE 是一个条件表达式,根据不同条件返回不同结果,常用于 SELECT 列表中做分类。
WHENWHEN 是 CASE 表达式里的分支条件,用来列出逐一判断的规则。
THENTHEN 跟在 WHEN 后面,指明当条件成立时 CASE 表达式返回的值。
ELSEELSE 是 CASE 表达式里的兜底分支,当所有 WHEN 都不满足时返回它的值。
ENDEND 是 CASE 表达式的结束标记,必须写在最后。
特殊值
NULL表示'这里没填',不是空字符串也不是0,像试卷上的空白题,不是写了0分。
常用函数
CASTCAST 用于把值显式转换成指定的数据类型 affinity。
COALESCECOALESCE 从左到右返回第一个非 NULL 的值,常用于给可能为空的字段提供默认值。
NULLIFNULLIF 比较两个值,相等时返回 NULL,否则返回第一个值。
ROUNDROUND 用于把数字四舍五入到指定的小数位数。
LENGTHLENGTH 函数返回字符串中的字符数(Unicode code point 数量)。
LOWERLOWER 函数把字符串中的所有字母转换为小写。
UPPERUPPER 函数把字符串中的所有字母转换为大写。
SUBSTRINGSUBSTRING(或 substr)用于从字符串中截取一段子串。
TRIMTRIM 函数去掉字符串开头和结尾的空白字符(默认是空格)。
CONCATCONCAT 用于把多个字符串首尾相接拼成一个。
NOWNOW() 返回当前日期和时间(MySQL/PostgreSQL 常用)。
CURRENT_DATECURRENT_DATE 是一个日期字面量,返回当前日期,不带时间部分。
CURRENT_TIMESTAMPCURRENT_TIMESTAMP 是一个时间戳字面量,返回当前日期和时间。
EXTRACTEXTRACT 用于从日期/时间值中提取指定的部分,如年、月、日(MySQL/PostgreSQL 语法)。
IFNULLIFNULL 是 SQLite 中的函数,当第一个参数为 NULL 时返回第二个参数,功能与 COALESCE 类似。
聚合函数
COUNT数一共有多少行,像食堂阿姨数饭盒个数,不管里面装什么菜。
SUM把一列数字加起来,像把一摞账单上的金额逐张累加。
AVG算一列数字的平均值,像把全班身高加一起再除以人数。
MINMIN 是聚合函数,返回一组值中的最小值。
MAXMAX 是聚合函数,返回一组值中的最大值。
约束
PRIMARY KEYPRIMARY KEY 约束用于唯一标识表中的每一行,值不能重复也不能为 NULL。
FOREIGNFOREIGN KEY 约束用于建立两张表之间的引用关系,保证子表引用的值在父表中存在。
REFERENCESREFERENCES 用于在外键约束中指定被引用的父表和列。
UNIQUEUNIQUE 约束保证列(或列组合)中的值在整个表中各不相同。
CHECKCHECK 约束用于限制列中的值必须满足指定的布尔条件。
DEFAULTDEFAULT 约束用于指定当插入行时该列未提供值的情况下自动使用的默认值。
AUTO_INCREMENTAUTO_INCREMENT 用于让整数主键列在插入时自动生成递增的值(MySQL 语法)。
PRIMARYPRIMARY 是 PRIMARY KEY 的前半部分,用于声明唯一标识每一行的主键约束。
KEYKEY 用于 PRIMARY KEY 和 FOREIGN KEY 约束中,前者唯一标识一行,后者建立表间关联。
事务
BEGINBEGIN 用于显式开启一个事务,事务内的操作要么一起提交,要么一起回滚。
COMMITCOMMIT 用于把事务中所有修改永久保存到数据库。
ROLLBACKROLLBACK 用于撤销事务中尚未提交的修改,把数据库恢复到事务开始前的状态。
SAVEPOINTSAVEPOINT 在事务内建立一个命名保存点,之后可以只回滚到这个点而不影响整个事务。
数据类型
INTINT 是整数类型的声明,SQLite 会把它识别为 INTEGER affinity。
INTEGERINTEGER 是 SQLite 中真正的整数存储类型,可存储 8 字节有符号整数。
BIGINTBIGINT 用于声明大整数列(MySQL/PostgreSQL 语法),SQLite 中它与 INT 等价,都映射到 INTEGER affinity。
DECIMALDECIMAL 用于声明定点精确小数(MySQL/PostgreSQL 语法),SQLite 中它映射到 NUMERIC affinity。
CHARCHAR 用于声明固定长度字符串(MySQL/PostgreSQL 语法),SQLite 中它映射到 TEXT affinity。
VARCHARVARCHAR 用于声明可变长度字符串(MySQL/PostgreSQL 语法),SQLite 中它映射到 TEXT affinity。
TEXTTEXT 是 SQLite 中用于存储文本字符串的存储类型。
DATEDATE 用于声明只含年月日的日期列(MySQL/PostgreSQL 语法),SQLite 中没有独立 DATE 类型。
TIMETIME 用于声明只含时分秒的时间列(MySQL/PostgreSQL 语法),SQLite 中没有独立 TIME 类型。
DATETIMEDATETIME 用于声明包含年月日时分秒的列(MySQL/PostgreSQL 语法),SQLite 中没有独立 DATETIME 类型。
TIMESTAMPTIMESTAMP 用于声明时间戳列(MySQL/PostgreSQL 语法),自动记录时间通常靠 DEFAULT CURRENT_TIMESTAMP。
BOOLEANBOOLEAN 用于声明布尔列(MySQL/PostgreSQL 语法),SQLite 中没有独立 BOOLEAN 类型。
JSONJSON 类型用于存储 JSON 格式的数据(MySQL/PostgreSQL 语法),SQLite 中没有独立的 JSON 类型。
通用兜底
字符串单引号字符串字面量,用来表示文本值。
数字数字字面量,包括整数和浮点数。
注释单行注释,从 -- 到行尾的内容不会执行。
块注释块注释,/* 和 */ 之间的内容不会执行。
变量标识符,如表名、列名等。
函数调用函数调用,函数名加括号传入参数。
属性点号访问,用 表名.列名 指明所属表。
缩进缩进,用空格或 Tab 让 SQL 层次更清晰。
运算符运算符,如 =、>、< 等用于比较或计算。
打开代码点读机,粘贴代码点词即查 →