刚新建了一个表命名为:like-test,在实例查询时发现对于类似的表名,查询要使用``括起来,即键盘左上角Esc键下面那个键的英文输入符号,中文打出来的是两个点

一、SQL模式

SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。
在 MySQL中,SQL的模式缺省是忽略大小写的。

select 字段 from 表 where 某字段 like 条件

1、%:表示任意个或多个字符。可匹配任意类型和长度的字符。

  比如select * from [user] where u_name like ‘%三%',将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。

  另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件

  select * from [user] where u_name like ‘%三%' AND u_name like ‘%猫%'

  若使用select * from [user] where u_name like ‘%三%猫%'虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

2、_:表示任意单个字符。匹配单个任意字符,常用作占位符

  比如select * from [user] where u_name like ‘_三_',只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;

  再比如select * from [user] where u_name like ‘三__';只找出“三脚猫”这样name为三个字且第一个字是“三”的;

二、正则模式

模式

什么模式匹配

^

字符串的开始

$

字符串的结尾

.

任何单个字符

[...]

在方括号内的任何字符列表

[^...]

非列在方括号内的任何字符

p1|p2|p3

交替匹配任何模式P1,P2或P3

*

零个或多个前面的元素

+

前面的元素的一个或多个实例

{n}

前面的元素的n个实例

{m,n}

m到n个实例前面的元素

  1. 建表如下:
create table tb1(
  id int not null primary key auto_increment,
  pname char not null,
  number int not null,
  age int(3) not null,
  major char not null
            );

  插入数据

INSERT INTO `tb1` (`pname`,`number`,`age`,`major`) VALUES ('jack',123456,18,'math');
  INSERT INTO `tb1` (`pname`,`number`,`age`,`major`) VALUES ('tom',456789,19,'computer');
'economic');
'computer');
  1. 模式字符  ^  
    其含义为匹配以特定字符或者字符串开头的记录。
    例如:使用“^”表达式查询tb1中major字段以m开头的记录,则语句如下:
    Select major from tb1 where major regexp ‘^m’;  #输出major
  2.  模式字符   $  
    其含义为匹配以特定字符或者字符串结尾的记录。
    例如:使用“$”表达式查询tb1中major字段以c结尾的记录,则语句如下:
    Select major from tb1 where major regexp ‘c$’;        #输出 ecomonic
  3. 模式字符   .  
    其含义为匹配字符串中任意一个字符,包括回车或者换行等。
    例如:使用“.”表达式查询tb1中number字段包含4的记录,则语句如下:
    Select number from tb1 where number regexp ‘4.’;  #输出带4的记录
  4. 模式字符   [字符集合]  
    其含义为匹配字符集合中任意一个字符
    例如:使用“[ ]”表达式查询tb1中number字段包含456的记录,则语句如下:([]表示只要查询条件只要满足任意一个就作输出)
    Select number from tb1 where number regexp ‘[456]’;   #
  5. 模式字符     S1|S2|S3   
    其含义为匹配 S1、S2、S3中的任意一个字符串
    例如:查询tb1中major字段包含a、p或者mic字符中任意一个字符的记录,则语句如下:
    Select * from tb1 where major regexp ‘a|p|mic’;   #等同于select * from tb1 where major regexp '[a,p,mic]';
  6. 模式字符   *  
    其含义为匹配多个该字符之前的字符,包括0和1个。
    例如:使用“*”表达式查询tb1中major字段中m字符前出现c字符的记录,则语句如下:
    Select major from tb1 where major regexp ‘c*m’;
  7. 模式字符   +  
    其含义为匹配多个该字符之前的字符,包括 1个。
    例如:使用“+”表达式查询tb1中major字段中m字符前至少出现一个c字符的记录,则语句如下:
    Select major from tb1 where major regexp ‘c+m’;
  8.  模式字符   字符串{N}  
    其含义为匹配字符出现N次。
    例如:使用“{N}”表达式查询tb1中major字段中连续出现2次m的记录,则语句如下:
    Select major from tb1 where major regexp ‘m{2}’;
  9. 模式字符   字符串{M,N}  其含义为匹配字符至少出现M次,做多N次。例如:使用“{M,N}”表达式查询tb1中major字段中连续出现2次m的记录,最多出现3次m字符的记录,则语句如下:
 Select major from tb1 where major regexp ‘a{2,3}’;

10.模式匹配 字符串[^...]

    其含义为匹配不包含[]中的内容

select major from tb1 where major regexp '[^math]';

        举例时验证时发现用这种匹配时,条件必须为完整字段值,或者匹配不出来