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仍按升序排列。
| 功能上相当于 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?\\)';