MySQL高级SQL语句(一)
SELECT

显示表格中一个或数个栏位的所有资料
SELECT "栏位", "栏位" FROM "表名";

DISTINCT
不显示重复的内容
SELECT DISTINCT "栏位" FROM "表名";

WHERE
条件查询
SELECT "栏位" FROM "表名" WHERE "条件";

AND OR
代表且、或、和的意思
SELECT "栏位" FROM "表名" WHERE "条件1" {[AND|OR] "条件2"};

IN
显示已知的值的内容
语法:SELECT "栏位" FROM "表名" WHERE "栏位" IN ('值1', '值2', ...);

BETWEEN
显示两个值范围内的资料
SELECT "栏位" FROM "表名" WHERE "栏位" BETWEEN '值1' AND '值2';

通配符
通常通配符都是跟 LIKE 一起使用的
| 通配符 | 代表的意思 |
|---|---|
| % | 百分号表示零个、一个或多个字符(相当于linux中的“*”号) |
| _ | 下划线表示单个字符(相当于linux中的“?”号) |
| ‘A_Z’ | 所有以 ‘A’ 起头,另一个任何值的字符,且以 ‘Z’ 为结尾的字符串。例如,‘ABZ’ 和 ‘A2Z’ 都符合这一个模式,而 ‘AKKZ’ 并不符合 (因为在 A 和 Z 之间有两个字符,而不是一个字符)。 |
| ‘ABC%’ | 所有以 ‘ABC’ 起头的字符串。例如,‘ABCD’ 和 ‘ABCABC’ 都符合这个模式 |
| ‘%XYZ’ | 所有以 ‘XYZ’ 结尾的字符串。例如,‘WXYZ’ 和 ‘ZZXYZ’ 都符合这个模式 |
| ‘%AN%’ | 所有含有 'AN’这个模式的字符串。例如,‘LOS ANGELES’ 和 ‘SAN FRANCISCO’ 都符合这个模式 |
| ‘_AN%’ | 所有第二个字母为 ‘A’ 和第三个字母为 ‘N’ 的字符串。例如,‘SAN FRANCISCO’ 符合这个模式,而 ‘LOS ANGELES’ 则不符合这个模式 |
LIKE
匹配一个模式来找出我们要的资料
SELECT "栏位" FROM "表名" WHERE "栏位" LIKE {模式};

ORDER BY
按关键字排序
语法:SELECT "栏位" FROM "表名" [WHERE "条件"] ORDER BY "栏位" [ASC, DESC];
#ASC 是按照升序进行排序的,是默认的排序方式。
#DESC 是按降序方式进行排序。

函数
数学函数:
| 数学函数 | 返回的结果 |
|---|---|
| abs(x) | 返回 x 的绝对值 |
| rand() | 返回 0 到 1 的随机数 |
| mod(x,y) | 返回 x 除以 y 以后的余数 |
| power(x,y) | 返回 x 的 y 次方 |
| round(x) | 返回离 x 最近的整数 |
| round(x,y) | 保留 x 的 y 位小数四舍五入后的值 |
| sqrt(x) | 返回 x 的平方根 |
| truncate(x,y) | 返回数字 x 截断为 y 位小数的值 |
| ceil(x) | 返回大于或等于 x 的最小整数 |
| floor(x) | 返回小于或等于 x 的最大整数 |
| greatest(x1,x2…) | 返回集合中最大的值 |
| least(x1,x2…) | 返回集合中最小的值 |


聚合函数
| 数学函数 | 返回的结果 |
|---|---|
| avg() | 返回指定列的平均值 |
| count() | 返回指定列中非 NULL 值的个数 |
| min() | 返回指定列的最小值 |
| max() | 返回指定列的最大值 |
| sum(x) | 返回指定列的所有值之和 |


count(*) 表示包括所有列的行数,不会忽略null值
count(列名) 表示只包括这一列,统计时会忽略null值的行,不会忽略空值

字符串函数:
| 数学函数 | 返回的结果 |
|---|---|
| trim() | 返回去除指定格式的值 |
| concat(x,y) | 将提供的参数 x 和 y 拼接成一个字符串 |
| substr(x,y) | 获取从字符串 x 中的第 y 个位置开始的字符串,跟substring()函数作用相同 |
| substr(x,y,z) | 获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串 |
| length(x) | 返回字符串 x 的长度 |
| replace(x,y,z) | 将字符串 z 替代字符串 x 中的字符串 y |
| upper(x) | 将字符串 x 的所有字母变成大写字母 |
| lower(x) | 将字符串 x 的所有字母变成小写字母 |
| left(x,y) | 返回字符串 x 的前 y 个字符 |
| right(x,y) | 返回字符串 x 的后 y 个字符 |
| repeat(x,y) | 将字符串 x 重复 y 次 |
| space(x) | 返回 x 个空格 |
| strcmp(x,y) | 比较 x 和 y,返回的值可以为-1,0,1 |
| reverse(x) | 将字符串 x 反转 |
trim()
#[位置]:的值可以为LEADING(起头),TRAILING(结尾),BOTH(起头及结尾)
#[要移除的字符串]:从字串的起头、结尾、或起头及结尾移除的字符串,缺省时为空格

concat(x,y)

#如sql_mode开启 了PIPES_AS_CONCAT, "||" 视为字符串的连接操作符而非或运算符,和字符串的拼接函数Concat相类似,这和Oracle数据库使用方法一样的

substr(x,y)与substr(x,y,z) ----截取字符串

length(x) -----返回字符串 x 的长度

replace(x,y,z) ----- 将字符串 z 替代字符串 x 中的字符串 y

GROUP BY
对GROUP BY 后面的查询结果进行汇总分组,通常是结合聚合函数一起使用
GROUP BY有个原则,select 后面的所有列中,没有用聚合函数的列,必须出现在GROUP BY后面
SELECT "栏位1", SUM("栏位2") FROM "表名" GROUP BY "栏位1";

HAVING
用来过滤由GROUP BY语句返回的记录集,通常与GROUP BY语句联合使用
HAVING的存在弥补了WHERE关键字不能和聚合函数联合使用的不足,如果被select的只有函数栏,那就不需要GROUP BY子句
SELECT "栏位1", SUM("栏位2") FROM "表格名" GROUP BY "栏位1" HAVING (函数条件);

别名
语法:SELECT "表格別名"."栏位1" [AS] "栏位別名" FROM "表格名" [AS] "表格別名";



浙公网安备 33010602011771号