MySql基本查询、连接查询、子查询、正则表达查询讲解(四)

2015-07-21 16:27:20 · 作者: · 浏览: 8
这个别名来代替表的名称。
MySQL中为表取别名的基本形式如下:
表名 表的别名

select S.STU_ID,S.STU_NAME,S.STU_AGE,S.STU_SEX,G.STU_SCORE from STUDENT S,GRADE G WHERE S.STU_ID=G.STU_ID AND G.STU_SCORE >=90;

?

\

?

九、使用正则表达式查询

正则表达式是用某种模式去匹配一类字符串的一个方式。例如,使用正则表达式可以查询出包含A、B、C其中任一字母的字符串。正则表达式的查询能力比通配字符的查询能力更强大,而且更加的灵活。正则表达式可以应用于非常复杂查询。
MySQL中,使用REGEXP关键字来匹配查询正则表达式。其基本形式如下:
属性名 REGEXP '匹配方式'

\

在使用前先插入一些数据:

?

insert  into STUDENT values(2022,'12wef',13,'男');
insert  into STUDENT values(2023,'faf_23',13,'男');
insert  into STUDENT values(2024,'fafa',13,'女');
insert  into STUDENT values(2025,'ooop',14,'男');
insert  into STUDENT values(2026,'23oop',14,'男');
insert  into STUDENT values(2027,'woop89',14,'男');
insert  into STUDENT values(2028,'abcdd',11,'男');

?

(1)使用字符“^”可以匹配以特定字符或字符串开头的记录。

查询所有以阿头的

?

select * from STUDENT where STU_NAME REGEXP  '^阿';

?

\
以数字开头

?

select * from STUDENT where STU_NAME REGEXP '^[0-9]';

?

\

(2)使用字符“$”可以匹配以特定字符或字符串结尾的记录

以数字结尾

?

select * from STUDENT where STU_NAME REGEXP '[0-9]$';

?

\

(3)用正则表达式来查询时,可以用“.”来替代字符串中的任意一个字符。

select * from STUDENT where STU_NAME REGEXP '^w....[0-9]$';
以w开头,以数字结束,中间有4个

?

\

(4)使用方括号([])可以将需要查询字符组成一个字符集。只要记录中包含方括号中的任意字符,该记录将会被查询出来。
例如,通过“[abc]”可以查询包含a、b、c这三个字母中任何一个的记录。

使用方括号可以指定集合的区间。
“[a-z]”表示从a-z的所有字母;
“[0-9]”表示从0-9的所有数字;
“[a-z0-9]”表示包含所有的小写字母和数字。
“[a-zA-Z]”表示匹配所有字母。

select * from STUDENT where STU_NAME REGEXP '[0-9a-z]';
查询所有包含有数字和小写字母的

?

\

使用“[^字符集合]”可以匹配指定字符以外的字符

(5){}表示出现的次数

正则表达式中,“字符串{M}”表示字符串连续出现M次;“字符串{M,N}”表示字符串联连续出现至少M次,最多N次。例如,“ab{2}”表示字符串“ab”连续出现两次。“ab{2,4}”表示字符串“ab”连续出现至少两次,最多四次。

o出现2次

?

select * from STUDENT where STU_NAME REGEXP 'o{2}';

?

\

(6)+表示到少出现一次

fa至少出现一次

?

select * from STUDENT where STU_NAME REGEXP '(fa)+';

?

\

?

注意:

正则表达式可以匹配字符串。当表中的记录包含这个字符串时,就可以将该记录查询出来。如果指定多个字符串时,需要用符号“|”隔开。只要匹配这些字符串中的任意一个即可。每个字符串与”|”之间不能有空格。因为,查询过程中,数据库系统会将空格也当作一个字符。这样就查询不出想要的结果。
正则表达式中,“*”和“+”都可以匹配多个该符号之前的字符。但是,“+”至少表示一个字符,而“*”可以表示零个字符。