mysql之select

 

 

测试案例数据:

1.employee表

CREATE TABLE employee(

num INT NOT NULL PRIMARY KEY AUTO_INCREMENT,

d_id INT NOT NULL,

name VARCHAR(20),

age INT,

sex VARCHAR(4),

homeaddr VARCHAR(50)

);

 

INSERT INTO employee VALUES(NULL,1001,‘张三‘,26,‘男‘,‘北京市海淀区‘);

INSERT INTO employee VALUES(NULL,1001,‘李四‘,24,‘女‘,‘北京市昌平区‘);

INSERT INTO employee VALUES(NULL,1002,‘王五‘,25,‘男‘,‘湖南长沙市‘);

INSERT INTO employee VALUES(NULL,1004,‘Aric‘,15,‘男‘,‘England‘);

2.work表

CREATE TABLE work(

id INT,

name VARCHAR(20),

sex VARCHAR(4),

info VARCHAR(50)

);

 

INSERT INTO work VALUES(1001,‘hjh‘,NULL,NULL);

INSERT INTO work VALUES(1002,‘cch‘,NULL,NULL);

INSERT INTO work VALUES(1003,‘zk‘,NULL,‘student‘);

3.grade表

CREATE TABLE grade(

num INT(10) NOT NULL,

course VARCHAR(10) NOT NULL,

score FLOAT

);

 

INSERT INTO grade VALUES(1001,‘数学‘,80);

INSERT INTO grade VALUES(1001,‘语文‘,90);

INSERT INTO grade VALUES(1001,‘英语‘,85);

INSERT INTO grade VALUES(1001,‘计算机‘,95);

 

INSERT INTO grade VALUES(1002,‘数学‘,88);

INSERT INTO grade VALUES(1002,‘语文‘,90);

INSERT INTO grade VALUES(1002,‘英语‘,89);

INSERT INTO grade VALUES(1002,‘计算机‘,90);

 

INSERT INTO grade VALUES(1003,‘数学‘,80);

INSERT INTO grade VALUES(1003,‘语文‘,98);

INSERT INTO grade VALUES(1003,‘英语‘,85);

INSERT INTO grade VALUES(1003,‘计算机‘,95);

4.department表

CREATE TABLE department(

d_id INT NOT NULL PRIMARY KEY ,

d_name VARCHAR(20),

function VARCHAR(20),

address VARCHAR(50)

);

 

INSERT INTO department VALUES(1001, ‘科研部‘, ‘研发产品‘, ‘3号楼5层‘) ;

INSERT INTO department VALUES(1002, ‘生产部‘, ‘生产产品‘, ‘5号楼1层‘) ;

INSERT INTO department VALUES(1003, ‘销售部‘, ‘策划销售‘, ‘1号楼销售大厅‘) ;

5.computer_stu表

CREATE TABLE computer_stu(

id INT PRIMARY KEY,

name VARCHAR(20),

score FLOAT

);

 

INSERT INTO computer_stu VALUES(1001, ‘Lily‘,85);

INSERT INTO computer_stu VALUES(1002, ‘Tom‘,91);

INSERT INTO computer_stu VALUES(1003, ‘Jim‘,87);

INSERT INTO computer_stu VALUES(1004, ‘Aric‘,77);

INSERT INTO computer_stu VALUES(1005, ‘Lucy‘,65);

INSERT INTO computer_stu VALUES(1006, ‘Andy‘,99);

INSERT INTO computer_stu VALUES(1007, ‘Ada‘,85);

INSERT INTO computer_stu VALUES(1008, ‘Jeck‘,70);

6.scholarship表

CREATE TABLE scholarship(

level INT PRIMARY KEY,

score INT

);

 

INSERT INTO scholarship VALUES(1,90);

INSERT INTO scholarship VALUES(2,80);

INSERT INTO scholarship VALUES(3,70);

7.info表

CREATE TABLE info(

id INT,

name VARCHAR(20)

);

 

INSERT INTO info VALUES(1, ‘Aric‘);

INSERT INTO info VALUES(2, ‘Eric‘);

INSERT INTO info VALUES(4, ‘Jack‘);

INSERT INTO info VALUES(5, ‘Lucy‘);

INSERT INTO info VALUES(6, ‘Lily‘);

INSERT INTO info VALUES(7, ‘Tom‘);

INSERT INTO info VALUES(8, ‘aaa‘);

INSERT INTO info VALUES(9, ‘dadaaa‘);

INSERT INTO info VALUES(10, ‘aaabd‘);

INSERT INTO info VALUES(11, ‘abc12‘);

INSERT INTO info VALUES(12, ‘ad321‘);

INSERT INTO info VALUES(17, ‘ababab‘);

 

1.查询语句的基本语法

SELECT 属性列表

FROM 表名和视图列表

[ WHERE 条件表达式1 ]

[ GROUP BY 属性名1 [ HAVING 条件表达式2 ] ]

[ ORDER BY 属性名2 [ ASC|DESC ] ]

其中,“属性列表”参数表示需要查询的字段名;“表名和视图列表”参数表示从此处指定的表或视图中查询数据,表和视图可以有多个;“条件表达式1”参数指定查询条件;“属性名1”参数指按该字段中的数据进行分组;“条件表达式2”参数表示满足该表达式的数据才能输出;“属性名2”参数指该字段中的数据进行排序,排序方式由“ASC”和“DESC”两个参数指出;“ASC”参数表示按升序的顺序进行排序,这是默认参数;“DESC”参数表示按降序的顺序进行排序。

 

1.1简单SELECT语句来查询employee表

SELECT num,name,age,sex,homeaddr FROM employee;

 

1.2 包含WHERE子句和ORDER BY子句的SELECT语句

SELECT  num,d_id,name,age,sex,homeaddr

FROM employee

WHERE age<26

ORDER BY d_id DESC;

 

1.3 查询employee表的所有字段的数据

SELECT * FROM employee;

 

表1.1 查询条件

查询条件

符号或关键字

比较

= 、<  <= 、>  >= 、!= 、<> 、!> 、!<

指定范围

BETWEEN AND、NOT BETWEEN AND

指定集合

IN、NOT IN

匹配字符

LIKE、NOT LIKE

是否为空值

IS NULL、IS NOT NULL

多个查询条件

AND、OR

 

2.单表查询

单表查询时指从一张表中查询所需要的数据。查询数据时,可以从一张表中查询数据,也可以从多张表中同时查询数据。两者的查询方式上有一定的区别。因为单表查询只在一张表上进行操作,所以查询比较简单。

2.1 查询指定字段为name,age的数据

SELECT name,age FROM employee;

 

2.2 查询指定记录,按条件进行查询,查询d_id为1001的数据

SELECT * FROM employee WHERE d_id=‘1001‘;

 

2.3 带IN关键字的查询

语法:

[ NOT ] IN (元素1,元素2,…….元素n)

下面使用IN关键字进行查询,集合的元素为整数型数据

SELECT * FROM employee WHERE d_id IN (1001,1002);

集合的元素为字符型数据

SELECT * FROM employee WHERE name NOT IN (‘张三‘,‘李四‘);

 

2.4 带BETWEEN AND的范围查询

语法:

[ NOT ] BETWEEN 取值1 AND 取值2

查询age字段取值从15到25.

SELECT * FROM employee WHERE age BETWEEN 15 AND 25;

查询age字段取值不在15到25之间的

SELECT * FROM employee WHERE age NOT BETWEEN 15 AND 25;

 

2.5 带LIKE的字符匹配查询

语法:

[ NOT ] LIKE 字符串

使用LIKE关键字来匹配一个完整的字符串“Aric”

SELECT * FROM employee WHERE name LIKE ‘aric‘;

使用LIKE关键字来匹配带有通配符“%”的字符串“北京%”

SELECT * FROM employee WHERE homeaddr LIKE ‘北京%‘;

使用NOT LIKE 关键字来查询不是姓李的所有人的记录

SELECT * FROM employee WHERE name NOT LIKE ‘李%‘;

 

2.6 查询空值

IS NULL 关键字可以用来判断字段的值是否为空值(NULL)。如果字段的值是空值,则满足查询条件,该记录将被查询出来。如果字段的值不是空值,则不满足查询条件。

语法:

IS [ NOT ] NULL

使用IS NULL 关键字来查询work表中info字段为空值的记录

SELECT * FROM work WHERE info IS NULL;

使用IS NOT NULL 关键字来查询work 表中info字段不为空值的记录

SELECT * FROM work WHERE info IS NOT NULL;

 

2.7 带AND的多条件查询

语法:

条件表达式1  AND  条件表达式2  [ .AND 条件表达式n ]

使用AND关键字来查询employee中d_id为1001,而且sex为男的记录

SELECT * FROM employee WHERE d_id=1001 AND sex LIKE ‘男‘;

在employee表中查询d_id小于1004,age小于26,而且sex为“男”的记录

SELECT * FROM employee WHERE d_id<1004 AND age<26 AND sex LIKE ‘ 男‘;

查询num取值在(1,2,3)这个集合中,age从15到25这个范围,而且homeaddr的取值中包含“北京市”。

SELECT * FROM employee WHERE num IN (1,2,3) AND age BETWEEN 15 AND 25 AND homeaddr LIKE ‘%北京市%‘;

 

2.8 带OR的多条件查询

语法:

条件表达式1  OR  条件表达式2 [ OR 条件表达式n ]

使用OR关键字来查询employee表中d_id为1001或者sex为“男”的记录

SELECT * FROM employee WHERE d_id=1001 AND sex LIKE ‘男‘;

使用OR关键字来查询employee表,查询num取值在(1,2,3)这个集合中,或者age从15到25这个范围,或者homeaddr的取值中包含“北京市”。

SELECT * FROM employee WHERE num IN (1,2,3) OR age BETWEEN 15 AND 25 OR homeaddr LIKE ‘%北京市%‘;  

使用OR和AND关键字来查询employee表,查询num在(1,3,4)这个集合中,age字段为25,或性别为女

SELECT * FROM employee WHERE num IN (1,3,4) AND age=25 OR sex=‘女‘;

 

2.9 使用DISTINCT查询结果不重复

如果表中的某些字段上没有唯一性约束,这些字段可能存在着重复的值。例如一下:

mysql> SELECT d_id FROM employee;

+------+

| d_id |

+------+

| 1001 |

| 1001 |

| 1002 |

| 1004 |

+------+

 

使用DISTINCT关键字来消除d_id字段中的重复记录。

SELECT DISTINCT d_id FROM employee;

 

2.10 对查询结果排序

语法:

ORDER  BY 属性名 [ ASC|DESC ] 默认是升序ASC

查询employee表中的所有记录,按照age字段进行排序

SELECT * FROM employee ORDER BY age;

按照age字段进行降序排列

SELECT * FROM employee ORDER BY age DESC;

按照d_id字段升序方式和age字段的降序方式进行排序

SELECT * FROM employee ORDER BY d_id ASC,age DESC;

 

2.11 分组查询

语法:

GROUP BY 属性名 [ HAVING 条件表达式 ] [ WITH ROLLUP ]

下面按employee表的sex字段进行分组查询,查询结果与分组前结果进行对比,先执行不带GROUP BY关键字的SELECT语句

SELECT * FROM employee GROUP BY sex;

以sex字段进行分组查询,使用GROUP_CONCAT()函数将每个分组的name字段显示出来

SELECT sex,GROUP_CONCAT(name) FROM employee GROUP BY sex;

+------+--------------------+

| sex  | GROUP_CONCAT(name) |

+------+--------------------+

| 女   | 李四               |

| 男   | 张三,王五,Aric     |

+------+--------------------+

以sex字段进行分组查询,sex字段取值相同的为一组,然后对每一组使用集合函数COUNT()进行计算,求出每一组的记录数

SELECT sex,COUNT(sex) FROM employee GROUP BY sex;

+------+------------+

| sex  | COUNT(sex) |

+------+------------+

| 女   |          1 |

| 男   |          3 |

+------+------------+

以sex字段进行分组,然后显示计量数大于等于3的分组

SELECT sex,COUNT(sex) FROM employee GROUP BY sex HAVING COUNT(sex)>=3;

+------+------------+

| sex  | COUNT(sex) |

+------+------------+

| 男   |          3 |

+------+------------+

以d_id字段和sex字段进行分组

SELECT * FROM employee GROUP BY d_id,sex;

以sex字段进行分组查询,使用COUNT()函数来计算每组的记录数,并且加上WITH  ROLLUP记录求和

SELECT sex,COUNT(sex) FROM employee GROUP BY sex WITH ROLLUP;

+------+------------+

| sex  | COUNT(sex) |

+------+------------+

| 女   |          1 |

| 男   |          3 |

| NULL |          4 |

+------+------------+

 

2.12 用LIMIT限制查询结果的数量

查询employee表的所有记录,但只显示前2条

SELECT * FROM employee LIMIT 2;

SELECT * FROM employee LIMIT 0,2 ;

+-----+------+--------+------+------+--------------------+

| num | d_id | name   | age  | sex  | homeaddr           |

+-----+------+--------+------+------+--------------------+

|   1 | 1001 | 张三   |   26 | 男   | 北京市海淀区       |

|   2 | 1001 | 李四   |   24 | 女   | 北京市昌平区       |

+-----+------+--------+------+------+--------------------+

从第二条记录开始显示,并显示两条记录

SELECT * FROM employee LIMIT 1,2 ;

+-----+------+--------+------+------+--------------------+

| num | d_id | name   | age  | sex  | homeaddr           |

+-----+------+--------+------+------+--------------------+

|   2 | 1001 | 李四   |   24 | 女   | 北京市昌平区       |

|   3 | 1002 | 王五   |   25 | 男   | 湖南长沙市         |

+-----+------+--------+------+------+--------------------+

 

 

3.使用集合函数查询

3.1 COUNT()统计记录的条数函数

使用COUNT()函数统计employee表的记录数

SELECT COUNT(*) FROM employee;

统计不同d_id值得记录数,COUNT()函数和GROUP BY关键字一起使用

SELECT d_id,COUNT(*) FROM employee GROUP BY d_id;

 

3.2 SUM()求和函数

使用SUM()函数统计grade表中学号为1001的同学的成绩

SELECT num,SUM(score) FROM grade WHERE num=‘1001‘;

将grade表按照num字段进行分组,然后使用SUM()函数统计各分组的总成绩

SELECT num,SUM(score) FROM grade  GROUP BY num;

 

3.3 AVG()求平均函数

使用AVG()函数计算employee表中的平均年龄(age)

SELECT AVG(age) FROM employee;

使用AVG()函数计算grade表中不同科目的平均成绩

SELECT course,AVG(score) FROM grade GROUP BY course;

 

3.4 MAX()求最大值函数

使用MAX()函数查询employee表中的最大年龄(age)

SELECT MAX(age) FROM employee;

使用MAX()函数查询grade表中不同科目的最高成绩

SELECT course,MAX(score) FROM grade GROUP BY course;  

使用MAX()函数查询work表中name字段的最大值

SELECT MAX(name) FROM work;

 

3.5 MIN()求最小值函数

使用MIN()函数查询employee表中的最小年龄

SELECT MIN(age) FROM employee;

使用MIN()函数查询grade表中不同科目的最低成绩

SELECT course,MIN(score) FROM grade GROUP BY course;

 

4.连接查询

连接查询是将两个或两个以上的表按某个条件连接起来,从中选取需要的数据。

4.1 内连接查询

使用内连接查询的方式查询employee表和department表。在执行内连接查询之前,先分别查查employee表和department表中的记录,以便比较

SELECT num,name,employee.d_id,age,sex,d_name,function

FROM employee,department

WHERE employee.d_id=department.d_id;

+-----+--------+------+------+------+-----------+--------------+

| num | name   | d_id | age  | sex  | d_name    | function     |

+-----+--------+------+------+------+-----------+--------------+

|   1 | 张三   | 1001 |   26 | 男   | 科研部    | 研发产品     |

|   2 | 李四   | 1001 |   24 | 女   | 科研部    | 研发产品     |

|   3 | 王五   | 1002 |   25 | 男   | 生产部    | 生产产品     |

+-----+--------+------+------+------+-----------+--------------+

 

4.2 外连接查询

语法:

SELECT 属性名列表

FROM 表名1  LEFT|RIGHT JOIN 表名2

ON 表名1.属性名1=表名2.属性名2;

左连接查询:

使用左连接查询的方式查询employee表和department,两表通过d_id字段进行连接

SELECT num,name,employee.d_id,age,sex,d_name,function

FROM employee LEFT JOIN department

ON employee.d_id=department.d_id;

+-----+--------+------+------+------+-----------+--------------+

| num | name   | d_id | age  | sex  | d_name    | function     |

+-----+--------+------+------+------+-----------+--------------+

|   1 | 张三   | 1001 |   26 | 男   | 科研部    | 研发产品     |

|   2 | 李四   | 1001 |   24 | 女   | 科研部    | 研发产品     |

|   3 | 王五   | 1002 |   25 | 男   | 生产部    | 生产产品     |

|   4 | Aric   | 1004 |   15 | 男   | NULL      | NULL         |

+-----+--------+------+------+------+-----------+--------------+

右连接查询:

使用右连接查询的方式查询employee表和department,两表通过d_id字段进行连接

SELECT num,name,employee.d_id,age,sex,d_name,function

FROM employee RIGHT JOIN department

ON employee.d_id=department.d_id;

+------+--------+------+------+------+-----------+--------------+

| num  | name   | d_id | age  | sex  | d_name    | function     |

+------+--------+------+------+------+-----------+--------------+

|    1 | 张三   | 1001 |   26 | 男   | 科研部    | 研发产品     |

|    2 | 李四   | 1001 |   24 | 女   | 科研部    | 研发产品     |

|    3 | 王五   | 1002 |   25 | 男   | 生产部    | 生产产品     |

| NULL | NULL   | NULL | NULL | NULL | 销售部    | 策划销售     |

+------+--------+------+------+------+-----------+--------------+

 

4.3 复合条件连接查询

在连接查询时,也可以增加其他的限制条件。通过多个条件的复合查询,可以使查询的结果更加准确

 

使用内连接查询的方式查询employee表和department表,并且employee表中的age字段的值必须大于24

SELECT num,name,employee.d_id,age,sex,d_name,function

FROM employee,department

WHERE employee.d_id=department.d_id AND age>24;

使用内连接查询的方式查询employee表和department表,并且以employee表中的age字段的升序方式显示结果

SELECT num,name,employee.d_id,age,sex,d_name,function

FROM employee,department

WHERE employee.d_id=department.d_id ORDER BY age ASC;

 

 

5.子查询

子查询是将一个查询语句嵌套在另一个查询语句中。内层查询语句的查询结果,可以为外层查询语句提供查询条件。

 

5.1 带IN关键字的子查询

查询employee表中的记录,这些记录的d_id字段的值必须在department表中出现过

SELECT * FROM employee

WHERE d_id IN

(SELECT d_id FROM department);

 

#not in

SELECT * FROM employee

WHERE d_id NOT IN

(SELECT d_id FROM department);

 

5.2 带比较运算符的子查询

从computer_stu表中查询获得一等奖学金的学生的学号、姓名、分数。各个等级的奖学金的最低分存储在scholarship表中

SELECT id,name,score FROM computer_stu

WHERE score>=

(SELECT score FROM scholarship 

WHERE level=1);

在department表中查询那些部门没有年龄24岁的员工,员工的年龄存储在employee表中,先查询一下employee表和department表,以便进行对比

SELECT d_id,d_name FROM department

WHERE d_id !=

(SELECT d_id FROM employee

WHERE age=24);

 

5.3 带EXISTS关键字的子查询

EXISTS关键字表示存在。使用EXISTS关键字时,内层查询语句不返回查询的记录。而是返回一个真假值。

 

如果department表中存在d_id取值为1003的记录,则查询employee表的记录

SELECT * FROM employee

WHERE EXISTS

(SELECT d_name FROM department

WHERE d_id=1003);

 

SELECT * FROM employee

WHERE NOT EXISTS

(SELECT d_name FROM department

WHERE d_id=1003);

 

SELECT * FROM employee

WHERE EXISTS

(SELECT d_name FROM department

WHERE d_id=1004);

如果department表中存在d_id取值为1003的记录,则查询employee表中age大于24的记录

SELECT * FROM employee

WHERE age>24 AND EXISTS

(SELECT d_name FROM department

WHERE d_id=1003);

 

5.4 带ANY关键字的子查询

ANY关键字表示满足其中任一条件。使用ANY关键字时,只要满足内层查询语句返回的结果中的任何一个,就可以通过该条件来执行外层查询语句。

 

从computer_stu表中查询出哪些同学可以获得奖学金,奖学金的的信息存储在scholarship表中

SELECT * FROM computer_stu

WHERE score>=ANY

(SELECT score FROM scholarship);

 

5.5 带ALL关键字的子查询

ALL关键字表示满足所有条件,使用ALL关键字时,只有满足内层查询语句返回所有的结果,才可以执行外层查询语句。

 

从computer_stu表中查询出哪些同学可以获得一等奖学金,奖学金的信息存储在scholarship表中,先需要从scholarship表中查询出各种奖学金的最低分。然后,从computer_stu表中查询哪些人的分数高于所有奖学金的最低分

SELECT * FROM computer_stu

WHERE score>=ALL

(SELECT score FROM scholarship);

 

6.合并查询结果

合并查询结果是将多个SELECT语句的查询结果合并到一起,因为某种情况下,需要将几个SELECT语句查询出来的结果合并起来。

语法:

SELECT 语句1

UNION|UNION ALL

SELECT 语句2

UNION|UNION ALL..

SELECT 语句n:

 

从department表和employee表中查询d_id字段的取值。然后通过UNION关键字将结果合并到一起

SELECT d_id FROM department

UNION

SELECT d_id FROM employee;

+------+

| d_id |

+------+

| 1001 |

| 1002 |

| 1003 |

| 1004 |

+------+

从department表和employee表中查询d_id字段的取值,然后通过UNION ALL关键字将结果合并到一起

SELECT d_id FROM department

UNION ALL

SELECT d_id FROM employee;

+------+

| d_id |

+------+

| 1001 |

| 1002 |

| 1003 |

| 1001 |

| 1001 |

| 1002 |

| 1004 |

+------+

 

 

7.为表和字段取别名

在查询时,可以为表和字段取一个别名。这个别名可以代替其指定的表和字段。

7.1 为表取别名

表名 表的别名

为department表取个别名d,然后查询表中d_id字段取值为1001的记录

SELECT * FROM department d where d.d_id=1001;


7.2 为字段取别名

属性名 [ AS ] 别名

为department表中d_id字段取名为department_id, d_name字段取名为department_name,在改名前先查看两个字段的数据

SELECT d_id AS department_id, d_name AS department_name FROM department;

 

为department表中d_id字段取名为department_id,d_name字段取名为department_name,而且department表取名为d,然后查询表中d_id字段取值为1001的记录

SELECT d.d_id AS department_id,d.d_name AS department_name,d.function,d.address

FROM department d

WHERE d.d_id=1001;

 

8.使用正则表达式查询

正则表达式是用某种模式去匹配一类字符串的一个方式。

语法:

属性名  REGEXP ‘匹配方式’

 

正则表达式的模式字符表格

正则表达式的模式字符

含义

^

匹配字符串开始的部分

$

匹配字符串结束的部分

.

代表字符串中的任意一个字符,包括回车和换行

[字符集合]

匹配“字符集合”中的任何一个字符

[^字符集合]

匹配“字符集合”以外的任何一个字符

S1|S2|S3

匹配S1,S2,S3中的任意一个字符串

*

代表多个该符号之前的字符,包括0个和1个

+

代表多个该符号之前的字符,包括1个

字符串[N]

字符串出现N次

字符串[M,N]

字符串出现至少M次,最多N次

 

8.1 查询以特定字符或字符串开头的记录

从info表name字段中查询以字符“L”开头的记录

SELECT * FROM info WHERE name REGEXP ‘^L‘;

从info表name字段中查询以字符串“aaa”开头的记录

SELECT * FROM info WHERE name REGEXP ‘^aaa‘;

 

8.2 查询以特定字符或字符串结尾的记录

从info表name字段中查询以“c”结尾的记录

SELECT * FROM info WHERE name REGEXP ‘c$‘;

从info表name字段中查询以“aaa”结尾的记录

SELECT * FROM info WHERE name REGEXP ‘aaa$‘;

 

8.3 用符号“.”来代替字符串中的任意一个字符

从info表name字段中查询以字符“L”开头,以字符“y”结尾,中间有两个任意字符的记录

SELECT * FROM info WHERE name REGEXP ‘^L..y$‘;

 

8.4 匹配指定字符中的任意一个

从info表name字段中查询包含“c”、“e”、“o”这三个字符中任意一个的记录

SELECT * FROM info WHERE name REGEXP ‘[ceo]‘;

从info表name字段中查询包含数字的记录

SELECT * FROM info WHERE name REGEXP ‘[0-9]‘;

从info表name字段中查询包含数字或者字母a、b、c的记录

SELECT * FROM info WHERE name REGEXP ‘[0-9a-c]‘;

 

8.5 匹配指定字符以外的字符

从info表name字段中查询包含a到w字母和数字以外的字符的记录

SELECT * FROM info WHERE name REGEXP ‘[^0-9a-w]‘;

 

8.6 匹配指定字符串

从info表name字段中查询包含“ic”、“uc”、“ab”这三个字符串中任意一个的记录

SELECT * FROM info WHERE name REGEXP ‘ic|uc|ab‘;

 

8.7 使用“*”和“+”来匹配多个字符

从info表name字段中查询字符“c”之前出现过“a”的记录

SELECT * FROM info WHERE name REGEXP ‘a*c‘;

+------+-------+

| id   | name  |

+------+-------+

|    1 | Aric  |

|    2 | Eric  |

|    4 | Jack  |

|    5 | Lucy  |

|   11 | abc12 |

+------+-------+

SELECT * FROM info WHERE name REGEXP ‘a+c‘;

+------+------+

| id   | name |

+------+------+

|    4 | Jack |

+------+------+

 

8.8 使用{M}或者{M,N}来指定字符串连续出现的次数

从info表name字段中查询出现过“a”三次的记录

SELECT * FROM info WHERE name REGEXP ‘a{3}‘;

从info表name字段中查询出现过“ab”最少一次,最多三次的记录

SELECT * FROM info WHERE name REGEXP ‘ab{1,3}‘;

本文出自 “Chocolee” 博客,请务必保留此出处http://chocolee.blog.51cto.com/8158455/1546676

mysql之select

上一篇:DM环境配置脚本和静默安装脚本使用(适用于x86cpu普通操作系统)


下一篇:MySQL Replication on CentOS 6.5