首页 > 代码库 > 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,结果的排序,通配符,正则表达式)