MySQL必知必会读书笔记-2(去重,limit,结果的排序,通配符,正则表达式)

Posted vplus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL必知必会读书笔记-2(去重,limit,结果的排序,通配符,正则表达式)相关的知识,希望对你有一定的参考价值。

1——DISTINCT(去除重复行)

使用DISTINCT关键字,注意,这个关键字是针对所有列的

#查找所有不同的vend_id
SELECT
DISTINCT vend_id FROM products
#查找所有不同的vend_id, prod_price
SELECT DISTINCT vend_id, prod_price FROM products

 2——LIMIT(限制输出行数)

结果行数的限制

使用LIMIT

SELECT prod_name
FROM products
LIMIT 3, 4;
#输出第三行之后的四行(即4567行)

mysql5也支持这样写,效果与前面一样

LIMIT 4 OFFSET 3

3——对结果排序

使用ORDER BY,默认升序

SELECT prod_name
FROM products
ORDER BY prod_name

(本文截图不一定是完整的结果)

 

按多个列排序

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;
#指定降序

 

多个列指定不同的排序规则

SELECT prod_id, prod_price, prod_name
FROM products
ORDER BY prod_price DESC, prod_name;
#先按降序排列价格,价格相同的按产品名升序排列

注意:DESC关键字只作用于其之前的那一列,与DESC对应的是升序ASC,是默认的,所以不用写

 

练习:找到最贵的物品

SELECT prod_price, prod_name
FROM products
ORDER BY prod_price DESC
LIMIT 1

 

4——where子句过滤数据

SELECT prod_price, prod_name
FROM products
where prod_name =\'fuses\'

结果不分大小写

 

between关键字

SELECT prod_price, prod_name
FROM products
where prod_price BETWEEN 5 AND 10

范围包含边界值

 

空值检查

SELECT cust_id, cust_email
FROM customers
WHERE cust_email IS NULL;

 

AND操作符

SELECT prod_id, prod_price, prod_name
FROM products
WHERE vend_id = 1003 AND prod_price <=10

 

OR操作符

SELECT prod_id, prod_price, prod_name, vend_id
FROM products
WHERE vend_id = 1003 OR vend_id = 1002

 

IN操作符

SELECT prod_id, prod_price, prod_name, vend_id
FROM products
WHERE vend_id IN(1002, 1003)

 

NOT IN 操作符

与IN操作符刚好相反

 

5——使用通配符过滤

 使用通配符时必须使用like关键字

% 通配符

找出所有name以jet开头的物品(字母分不分大小写由MySQL配置方式决定)

SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE \'jet%\';

 

SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE \'%anvil%\';

 

SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE \'s%e\';

注意:NULL值是不会被%匹配出来的

 

 _ 通配符

与%匹配多个字符不同,_ 只匹配一个字符

SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE \'% ton anvil\';

SELECT prod_id, prod_name
FROM products
WHERE prod_name LIKE \'_ ton anvil\';

忠告:不要过度使用通配符

 

6——使用正则表达式搜索

 正则表达式是用来匹配文本的特殊的串

 

搜索商品名中含有\'1000\'的字符串

SELECT prod_id, prod_name
FROM products
WHERE prod_name REGEXP \'1000\'

 

. 表示匹配一个字符

SELECT prod_id, prod_name
FROM products
WHERE prod_name REGEXP \'.000\'

 

匹配不区分大小写,为区分大小写可使用BINARY关键字

SELECT prod_id, prod_name
FROM products
WHERE prod_name REGEXP BINARY \'JetPack .000\'

 

OR匹配

SELECT prod_id, prod_name
FROM products
WHERE prod_name REGEXP \'1000|2000\'

 

匹配几个字符之一

使用[]括住你想要匹配的字符

SELECT prod_id, prod_name
FROM products
WHERE prod_name REGEXP \'[123] ton\'

[123] ton等价于[1|2|3] ton或者1 ton|2 ton|3 ton

 

[^123]表示匹配除了这些字符之外

SELECT prod_id, prod_name
FROM products
WHERE prod_name REGEXP \'[^123] ton\'

 

匹配范围

SELECT prod_id, prod_name
FROM products
WHERE prod_name REGEXP \'[1-5] ton\'

 

匹配特殊字符

由于[] , | , . ,等特殊字符在正则表达式中被赋予了特定含义,所以匹配这些字符的时候需要以\\\\为前导

SELECT prod_id, prod_name
FROM products
WHERE prod_name REGEXP \'\\\\.\'

 

字符集

 

匹配多个实例

匹配连在一起的四个数字

SELECT prod_id, prod_name
FROM products
WHERE prod_name REGEXP \'[[:digit:]]{4}\'

也可以这样写

SELECT prod_id, prod_name
FROM products
WHERE prod_name REGEXP \'[0-9][0-9][0-9][0-9]\'

 

定位符

找出以一个数(包含小数点开始的数)开始的所有产品

SELECT prod_id, prod_name
FROM products
WHERE prod_name REGEXP \'^[0-9\\\\.]\'

 

测试正则表达式

 

以上是关于MySQL必知必会读书笔记-2(去重,limit,结果的排序,通配符,正则表达式)的主要内容,如果未能解决你的问题,请参考以下文章

mysql必知必会读书笔记

MySql必知必会读书笔记 -- 基础

《mysql必知必会》读书笔记--存储过程的使用

MySQL必知必会读书笔记-4(数据分组和子查询)

《SQL必知必会》读书笔记

《mysql必知必会》读书笔记--触发器及管理事务处理