共计 2328 个字符,预计需要花费 6 分钟才能阅读完成。
提醒:本文最后更新于 2024-07-08 13:29,文中所关联的信息可能已发生改变,请知悉!
SELECT col,col,col 找什么?
FROM table 从哪找?
WHERE col 条件 条件是啥?
条件:数字 (where)
当查找条件 col 是数字
select * from table where col = 1;
Operator | Condition | SQL Example | 解释 |
=, !=, < ,<=, >, >= | 标准数值运算符 | col != 4 | 等于 大于 小于 |
BETWEEN … AND … | 数字在两个值的范围内(包括两个值) | col BETWEEN 1.5 AND 10.5 | 在 X 和 X 之间 |
NOT BETWEEN … AND … | 数字不在两个值(包括两个值)的范围内 | co NOT BETWEEN 1 AND10 | 不在 X 和 X 之间 |
IN (…) | 列表中存在编号 | col IN (2, 4, 6) | 在 X 集合 |
NOT IN (…) | 列表中不存在数字 | col NOT IN (1, 3, 5) | 不在 X 集合 |
条件:文本 (where)
当查找条件 col 是文本
select * from table where col like ‘%jin’;
Operator | Condition | SQL Example | 解释 |
= | 区分大小写的精确字符串比较(注意单个等于) | col = “abc” | 等于 |
!= or <> | 区分大小写的精确字符串比较(请注意 si 区分大小写精确字符串不等式 comparisongle equals) | col != “abcd” | 不等于 |
LIKE | 不区分大小写的精确字符串比较 | col LIKE “ABC” | 等于 |
NOT LIKE | 不区分大小写的精确字符串不等式比较 | col NOT LIKE “ABCD” | 不等于 |
% | 在字符串中的任何位置使用,以匹配零个或多个字符的序列(仅与 LIKE 或 NOT LIKE 一起使用) | col LIKE “%AT%” (matches “AT”, “ATTIC”, “CAT” or even “BATS”) | 模糊匹配 |
_ | 用于字符串中的任何位置以匹配单个字符(仅与 LIKE 或 NOT LIKE 一起使用) | col LIKE “AN_” (matches “AND”, but not “AN”) | 模糊匹配单字符 |
IN (…) | 列表中存在字符串 | col IN (“A”, “B”, “C”) | 在集合 |
NOT IN (…) | 列表中不存在字符串 | co NOT IN (“D”, “E”, “F”) | 不在集合 |
排序 (rows)
需要对结果 rows 排序和筛选部分 rows
select * from table where col > 1 order by col asc limit 2 offset 2
Operator | Condition | SQL Example | 解释 |
ORDER BY | . | ORDER BY col ASC/DESC | 按 col 排序 |
ASC | . | ORDER BY col ASC/DESC | 升序 |
DESC | . | ORDER BY col ASC/DESC | 降序 |
LIMIT OFFSET | . | LIMIT num_limit OFFSET num_offset | 从 offset 取 limit |
ORDER BY | . | ORDER BY col1 ASC,col2 DESC | 多列排序 |
join: 连表 (table)
当查找的数据在多张关联 table 里
select * from table1 left join table2 on table1.id = table2.id where col > 1
Operator | Condition | SQL Example | 解释 |
JOIN .. ON .. | . | t1 JOIN t2 ON t1.id = t2.id | 按 ID 连成 1 个表 |
INNER JOIN | . | t1 INNER JOIN t2 ON t1.id = t2.id | 只保留 id 相等的 row |
LEFT JOIN | . | t1 LEFT JOIN t2 ON t1.id = t2.id | 保留 t1 的所有 row |
RIGHT JOIN | . | t1 RIGHT JOIN t2 ON t1.id = t2.id | 保留 t2 的所有 row |
IS/IS NOT NULL | . | col IS/IS NOT NULL | col 是不是为 null |
算式 (select / where)
当需要对 select 的 col 或 where 条件的 col 经过一定计算后才能使用
select *,col*2 from table where col/2 > 1
Operator | Condition | SQL Example | 解释 |
+ – * / % | . | col1 + col2 | col 加减乘除 |
substr | . | substr(col,0,4) | 字符串截取 |
AS | . | col * 2 AS col_new | col 取别名 |
… | 还有很多 |
统计(select)
对查找的 rows 需要按 col 分组统计的情况
select count(*),avg(col),col from table where col > 1 group by col
Operator | Condition | SQL Example | 解释 |
COUNT(*), COUNT(column) | 如果未指定列名,则用于对组中的行数进行计数的通用函数。否则,计算指定列中具有非 NULL 值的组中的行数。 | count(col) | 计数 |
MIN(column) | 在指定列中查找组中所有行的最小数值。 | min(col) | 最小 |
MAX(column) | 在指定列中查找组中所有行的最大数值。 | max(col) | 最大 |
AVG(column) | 在指定列中查找组中所有行的平均数值。 | avg(col) | 平均 |
SUM(column) | 查找组中各行的指定列中所有数值的总和。 | sum(col) | 求和 |
GROUP BY | . | group by col,col2 | 分组 |
HAVING | . | HAVING col>100 | 分组后条件 |
子表 (table)
一次 select 的结果 rows 作为下一次 select 的临时 table 才能得到最终结果
select * from (select * from table where col > 1) as tmp where col < 1
Operator | Condition | SQL Example | 解释 |
(select -)as tmp | (select -)as tmp | select 结果做子表 | |
in(select -) | in(select -) | select 结果做条件 | |
avg(select -) | avg(select -) | select 结果做条件 |