这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战。
SELECT column 找什么?
FROM table 从哪找?
WHERE column 条件 条件是啥?
条件:数字(where)
当查找条件column是数字
select * from table where column = 1;
| Operator | Condition | SQL Example | 解释 |
|---|
| =, !=, < ,<=, >, >= | 标准数值运算符 | column != 4 | 等于 大于 小于 |
| BETWEEN … AND … | 数字在两个值范围内(包括) | column BETWEEN 1.5 AND 10.5 | 在 X 和 X之间 |
| NOT BETWEEN … AND … | 不在两个值范围内(包括两个值) | co NOT BETWEEN 1 AND10 | 不在 X 和 X之间 |
| IN (…) | 数字存在于列表中 | column IN (2, 4, 6) | 在 X 集合 |
| NOT IN (…) | 数字不存在于列表中 | column NOT IN (1, 3, 5) | 不在 X 集合 |
条件:文本(where)
当查找条件column是文本
select * from table where column like '%jue';
| Operator | Condition | SQL Example | 解释 |
|---|
| = | 区分大小写的精确字符串比较(注意单个equals) | column = "abc" | 等于 |
| != or <> | 区分大小写的精确字符串不等比较 | column != "abcd" | 不等于 |
| LIKE | 不区分大小写的精确字符串比较 | column LIKE "ABC" | 等于 |
| NOT LIKE | 不区分大小写的精确字符串不等比较 | column NOT LIKE "ABCD" | 不等于 |
| % | 用于字符串中的任意位置,以匹配由0或多个字符组成的序列(仅与LIKE或NOT LIKE匹配) | column LIKE "%AT%" (matches "AT", "ATTIC", "CAT" or even "BATS") | 模糊匹配 |
| _ | 用于字符串中的任意位置,以匹配单个字符(仅与LIKE或NOT LIKE匹配) | column LIKE "AN_" (matches "AND", but not "AN") | 模糊匹配单字符 |
| IN (…) | 字符串存在于列表中 | column IN ("A", "B", "C") | 在集合 |
| NOT IN (…) | 字符串不存在于列表中 | co NOT IN ("D", "E", "F") | 不在集合 |
排序(rows)
需要对结果rows排序和筛选部分rows
select * from table where column > 1 order by column asc limit 2 offset 2
| Operator | SQL Example | 解释 |
|---|
| ORDER BY | ORDER BY column ASC/DESC | 按column排序 |
| ASC | ORDER BY column ASC/DESC | 升序 |
| DESC | ORDER BY column ASC/DESC | 降序 |
| LIMIT OFFSET | LIMIT num_limit OFFSET num_offset | 从offset取limit |
| ORDER BY | ORDER BY column1 ASC,column2 DESC | 多列排序 |
join:连表(table)
当查找的数据在多张关联table里
select * from table1 left join table2 on table1.id = table2.id where column > 1
| Operator | 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 | column IS/IS NOT NULL | column是不是为null |
算式(select / where)
当需要对select的column 或 where条件的column 经过一定计算后才能使用
select *,column*2 from table where column/2 > 1
| Operator | SQL Example | 解释 |
|---|
| + - * / % | column1 + column2 | column加减乘除 |
| substr | substr(column,0,4) | 字符串截取 |
| AS | column * 2 AS column_new | column取别名 |
| ... | | 还有很多 |
统计(select)
对查找的rows需要按column分组统计的情况
select count(*),avg(column),column from table where column > 1 group by column
| Operator | Condition | SQL Example | 解释 |
|---|
| COUNT(*), COUNT(columnumn) | 如果没有指定列名,则用于计算组中的行数的通用函数。 否则,计算组中指定列中具有非null值的行数。 | count(column) | 计数 |
| MIN(columnumn) | 为组中的所有行查找指定列中的最小数值。 | min(column) | 最小 |
| MAX(columnumn) | 为组中的所有行查找指定列中的最大数值。 | max(column) | 最大 |
| AVG(columnumn) | 为组中的所有行查找指定列中的平均值。 | avg(column) | 平均 |
| SUM(columnumn) | 为组中的行查找指定列中所有数值的和。 | sum(column) | 求和 |
| GROUP BY | . | group by column,column2 | 分组 |
| HAVING | . | HAVING column>100 | 分组后条件 |
子表 (table)
一次select的结果rows作为下一次select的临时table才能得到最终结果
select * from (select * from table where column > 1) as tmp where column < 1
| Operator | SQL Example | 解释 |
|---|
| (select -)as tmp | (select -)as tmp | select结果做子表 |
| in(select -) | in(select -) | select结果做条件 |
| avg(select -) | avg(select -) | select结果做条件 |