SQL 语法小册

173 阅读2分钟

这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

SELECT column 找什么?

FROM table 从哪找?

WHERE column 条件 条件是啥?

条件:数字(where)

当查找条件column是数字

select * from table where column = 1;

OperatorConditionSQL 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';

OperatorConditionSQL 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
OperatorSQL Example解释
ORDER BYORDER BY column ASC/DESC按column排序
ASCORDER BY column ASC/DESC升序
DESCORDER BY column ASC/DESC降序
LIMIT OFFSETLIMIT num_limit OFFSET num_offset从offset取limit
ORDER BYORDER BY column1 ASC,column2 DESC多列排序

join:连表(table)

当查找的数据在多张关联tableselect * from table1 left join table2 on table1.id = table2.id where column > 1
OperatorSQL Example解释
JOIN .. ON ..t1 JOIN t2 ON t1.id = t2.id按ID连成1个表
INNER JOINt1 INNER JOIN t2 ON t1.id = t2.id只保留id相等的row
LEFT JOINt1 LEFT JOIN t2 ON t1.id = t2.id保留t1的所有row
RIGHT JOINt1 RIGHT JOIN t2 ON t1.id = t2.id保留t2的所有row
IS/IS NOT NULLcolumn IS/IS NOT NULLcolumn是不是为null

算式(select / where)

当需要对selectcolumnwhere条件的column 经过一定计算后才能使用
select *,column*2 from table where column/2 > 1
OperatorSQL Example解释
+ - * / %column1 + column2column加减乘除
substrsubstr(column,0,4)字符串截取
AScolumn * 2 AS column_newcolumn取别名
...还有很多

统计(select)

对查找的rows需要按column分组统计的情况
select count(*),avg(column),column from table where column > 1 group by column
OperatorConditionSQL 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
OperatorSQL Example解释
(select -)as tmp(select -)as tmpselect结果做子表
in(select -)in(select -)select结果做条件
avg(select -)avg(select -)select结果做条件