IN关键字(实现的效果和 OR 相同)
SELECT prod_name,prod_price
FROM products
WHERE vend_id in (1002,1003)
ORDER BY prod_name;
相当于:
SELECT prod_name,prod_price
FROM products
WHERE vend_id = 1002 OR vend_id = 1003
ORDER BY prod_name;
为什么使用IN ?
IN操作符的语法更清楚且直观。
使用IN,计算的次序更加容易管理。
IN操作符一般比OR操作符执行更快。
IN最大的优点是可以包含其他SELECT语句,是的能够动态的建立WHERE字句。
-------------------------------------------------------------------------
NOT关键字 用来否认后面的条件可以对 IN ,BETWEEN ,EXISTS字句取反。
SELECT prod_name,prod_price
FROM products
WHERE vend_id NOT IN (1002,1003)
ORDER BY prod_name;
---------------------------------------------------------------------------
五:通配符
LIke 用来只是Mysql说明后面的检索条件是使用通配符
通配符有两种:
% 匹配任意个数的字符
_ 匹配单个字符
select prod_id,prod_name
from products
where prod_name like '%jes%';
使用通配符的技巧:除非非常需要,否则不使用。
尽量不要在搜索模式的开始处使用,把通配符至于搜索的开始处,搜索起来是最慢的。
-------------------------------------------------------------------------------
六:正则表达式
检索出列prod_mame包含文本1000的所有的行:
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;
跟LIKE的语句很像
SELECT prod_name
FROM products
WHERE prod_name LIKE '%1000%'
ORDER BY prod_name;
---------------------------------------------
SELECT prod_name --匹配多个字符之一(进行OR匹配)
FROM products
WHERE prod_name REGEXP '1000|2000|3000'
ORDER BY prod_name;
------------------------------------------------
SELECT prod_name --[] 匹配[]中单个字符
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY prod_name;
-------------------------------------------------------
SELECT prod_name --[|||] 匹配[]中单个字符,效果如上面
FROM products
WHERE prod_name REGEXP '[1|2|3] Ton' --1 Ton ,2 Ton,3 Ton
ORDER BY prod_name;
---------------------------------------------------------------
SELECT prod_name --注意
FROM products
WHERE prod_name REGEXP '1|2|3 Ton' --这里匹配的是1 ,2,3 Ton
ORDER BY prod_name;
-----------------------------------------------------------------
匹配范围:[3-6]匹配3-6 [a-z]匹配a-z
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-5] Ton' --匹配 1 Ton ,2 Ton, 3 Ton, 4 Ton ,5 Ton
ORDER BY prod_name;
---------------------------------------------------------------------------------
匹配特殊字符 . | [] - (注意Mysql使用\\)
SELECT prod_name
FROM prodects
WHERE prod_name REGEXP '\\.' --匹配含有.的行
ORDER BY prod_name;
------------------------------------------------------------
空白元字符
元字符 说明
\\f 换页
\\n 换行
\\r 回车
\\t 制表
\\v 纵向制表
-------------------------------------------------------------
匹配字符类
字符类
类 说明
[:alnum:] 任意字母和数字(同[a-zA-Z0-9])
[:alpha:] 任意字母(同[a-zA-Z])
[:blank:] 空格和制表(同[\\t])
[:cotrl:] ASCII码控制字符(ASCII0-31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与print相同,但不包含空格
[:lower:] 任意小写字母(同[a-z])
[:upper:] 任意大写字母
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]也不在[:cotrl:]中的字符
[:space:] 包括空格在内的任意空白字符(同[\\t\\f\\r\\n\\v])
[:xdigit:] 任意十六进制数字(同[a-fA-F0-9])
-------------------------------------------------------------
匹配多个实例
重复元字符
元字符 说明
* 0个或多个匹配
+ 一个或多个匹配(相当于{1,})
? 0个或者1个匹配(相当于{0,1})
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 指定数目的范围(m不超过255)
下面例子匹配:\\( 匹配),[0-9]匹配任意数字,stick?匹配stick和stick(后面有任意字符),\\)匹配 )
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\\([0-9] stick?\\)'
ORDER BY prod_name;
下面例子:匹配连在一起的四个字符
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[[:digit:]{4}]'
ORDER BY prod_name;
--------------------------------------------------------------
定位符
定位元字符
元字符 说明
^ 文本的开始
$ 文本的结束
[[:<:>
[[:<:>
匹配产品名称以数字或者.开头产品
SELECT prod_name
FROM prodducts
WHERE prod_name REGEXP '^[0-9\\.]'
ORDER BY prod_name;
---------------------------------------------------------------
LIKE 和 REGEXP的区别?
LIKE和REGEXP起类似的作用,但LIKE匹配的是整个串,而REGEXP匹配的是字串
REGEXP加入^ 和 $ 家可以实现与LIKE一样的作用
-----------------------------------------------------------------