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

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

DISTINCT(去重)和LIMIT

检索不重复的数据

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

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

 

结果行数的限制

使用LIMIT

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

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

LIMIT 4 OFFSET 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

技术分享

***************************************************************************************************************************************************************************** 

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操作符刚好相反

*****************************************************************************************************************************************************************************

 

使用通配符过滤

 使用通配符时必须使用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;

技术分享

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

 *****************************************************************************************************************************************************************************

使用正则表达式进行搜索

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

 

搜索商品名中含有‘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,结果的排序,通配符,正则表达式)