【MySQL】必知必会知识点
文章目录
- LIMIT含义
- 排序数据
- 按多个列排序
- 降序
- 通配符
- 百分号 % 通配符
- 下划线 _ 通配符
- 正则表达式
- OR匹配
- 查询几个字符之一
- 匹配范围查询
- 匹配特殊字符
- 匹配字符类
- 匹配多个实例
- 定位符
LIMIT含义
SELECT category FROM "books" LIMIT 4 ;
上面代码意为:返回不多于4行
SELECT category FROM "books" LIMIT 4 , 3;
或者
SELECT category FROM "books" LIMIT 4 OFFSET 3;
意为从行3开始取4行(数值都是从0开始)
排序数据
按多个列排序
SELECT prod_id, prod_price,prod_name
FROM products
ORDER BY prod_price, prod_name;
首先按价格排序,然后按名字排序,仅在价格相同的情况下,才再按名字排序,如果价格中的值都是唯一的,则不会按名字排序。
降序
SELECT prod_id,prod_price, prod_name
FROM products
ORDER BY prod_price DESC, prod_name ;
DESC关键字只应用到直接位于其前面的列名。
上面代码只对 prod_price 降序排列,prod_name仍按升序排列。
通配符
百分号 % 通配符
- % 可在搜索模式中任意位置使用,可以使用多个通配符
- 可以放在开头、结尾、开头和结尾、中间。
- % 代表搜索模式中给定位置的0个、 1个或多个字符
- 不能匹配用值NULL作为产品名的行
下划线 _ 通配符
- 只匹配单个字符而不是多个字符
- 总是匹配一个字符,不能多也不能少
正则表达式
OR匹配
| 功能上相当于 OR
查询字段 prod_name 的值中包含 1000或2000:
SELECT * FROM `products` WHERE prod_name REGEXP '1000|2000';
查询几个字符之一
SELECT
*
FROM
`products`
WHERE
prod_name REGEXP '[124]000';
这里使用了 [124]000 相当于上面的 1000|2000|4000
匹配范围查询
SELECT
*
FROM
`products`
WHERE
prod_name REGEXP '[1-4]000';
[1-4]000 意为 1000|2000|3000|4000
注意:此外,范围不一定只是数值的, 也可以[a-z]匹配任意字母字符
匹配特殊字符
特殊字符比如:. [] | 和 - 等。
查询的时候需要加上转义 \ 作为前导
SELECT
*
FROM
`products`
WHERE
prod_name REGEXP '\\.';
匹配字符类
查询数字、所有字母字符或所有数字字母字符等的匹配,如下表:
类 | 说 明 |
---|---|
[:alnum:] | 任意字母和数字(同[a-zA-Z0-9]) |
[:alpha:] | 任意字符(同[a-zA-Z]) |
[:blank:] | 空格和制表(同[\t]) |
[:cntrl:] | ASCII控制字符( ASCII 0到31和127) |
[:digit:] | 任意数字(同[0-9]) |
[:graph:] | 与[:print:]相同,但不包括空格 |
[:lower:] | 任意小写字母(同[a-z]) |
[:print:] | 任意可打印字符 |
[:punct:] | 既不在[:alnum:]又不在[:cntrl:]中的任意字符 |
[:space:] | 包括空格在内的任意空白字符(同[\f\n\r\t\v]) |
[:upper:] | 任意大写字母(同[A-Z]) |
[:xdigit:] | 任意十六进制数字(同[a-fA-F0-9]) |
匹配多个实例
重复元字符 | |
---|---|
元 字 符 | 说 明 |
* | 0个或多个匹配 |
+ | 1个或多个匹配(等于{1,}) |
? | 0个或1个匹配(等于{0,1}) |
{n} | 指定数目的匹配 |
{n,} | 不少于指定数目的匹配 |
{n,m} | 匹配数目的范围( m不超过255) |
举例:查找一个单词并且还能够适应一个尾随的s(如果存在),
SELECT
*
FROM
`products`
WHERE
prod_name REGEXP '\\([0-9] toms?\\)';
结果:
语句中的 [0-9] 表示范围有数字0-9的,后面的toms?表示匹配和它前面的字符次数为0或1(即s可选可不选)
定位符
定位元字符 | |
---|---|
元 字 符 | 说 明 |
^ | 文本的开始 |
$ | 文本的结尾 |
[[:<:]] | 词的开始 |
[[:>:]] | 词的结尾 |
上面查询的是一个字符串中的任意位置,如果想定位到某个位置,就需要定位符:
SELECT
*
FROM
`products`
WHERE
prod_name REGEXP '^\\([0-9] toms?\\)';