mysql列任意组合小于10_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 nameLIKE'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

WHERENOTEXISTS

(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}';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用 limit 关键字来限制 MySQL查询结果数量。例如: ``` SELECT * FROM table_name LIMIT 10; ``` 这将会返回前 10 结果。 如果你想使用这 10 个结果来进行循环查询,你可以使用一个循环语句。例如,在 PHP 中,你可以使用一个 for 循环: ``` $result = mysqli_query($conn, "SELECT * FROM table_name LIMIT 10"); for ($i = 0; $i < 10; $i++) { $row = mysqli_fetch_assoc($result); // 使用 $row 作为件进行循环查询 } ``` 如果你使用的是其他语言,也可以使用类似的方法来实现循环。 ### 回答2: 首先,我了解到你需要使用MySQL查询10个结果,并且将这10个结果作为件进行循环查询。在MySQL中,你可以使用子查询来实现这个目标。 首先,你可以编写一个查询来获取这10个结果。假设你要查询一个名为"table"的表中的前10记录,你可以使用如下查询语句: ``` SELECT * FROM table LIMIT 10; ``` 接下来,你可以将这个查询作为子查询,并将其作为件进行循环查询。在MySQL中,你可以使用"IN"运算符来判断一个值是否在一个结果集中。下面是一个示例查询,假设你要查询一个名为"table2"的表,其中有一个"column",你想要将主查询的结果作为件进行循环查询: ``` SELECT * FROM table2 WHERE column IN (SELECT * FROM table LIMIT 10); ``` 在这个示例中,子查询`SELECT * FROM table LIMIT 10`将返回10个结果,并将它们作为件传递给主查询。主查询`SELECT * FROM table2 WHERE column IN (...)`将返回在子查询中找到的所有匹配结果。 这样,你就可以使用MySQL查询10个结果,并将这10个结果作为件进行循环查询了。请根据你的具体需求修改查询语句中的表名、名和件。 ### 回答3: 要实现这个功能,可以使用MySQL的嵌套查询。以下是一个300字的示例回答: 要将查询出的10个结果作为件进行循环查询,可以使用MySQL的嵌套查询功能来实现。首先,我们可以使用一SELECT查询语句来获取这10个结果。例如,假设我们要查询名为"users"的表中的前10记录,可以使用以下查询语句: SELECT * FROM users LIMIT 10; 这将返回名为"users"的表中的前10记录作为结果。 然后,我们可以将这个查询作为子查询,嵌套在外部查询中来进行循环查询。为了实现循环查询,我们可以使用MySQL的循环控制结构,如WHILE或FOR循环。以下是一个示例使用WHILE循环的查询语句: SET @counter = 0; SET @max = 10; WHILE @counter < @max DO SET @counter = @counter + 1; -- 在这里执行对子查询结果的操作,可以通过使用子查询结果中的字段来进行进一步的查询或其他操作 END WHILE; 在上述示例中,我们首先设置一个计数器变量@counter和一个最大值变量@max,分别初始化为0和10。然后,我们使用WHILE循环来检查计数器是否小于最大值。在循环中,我们将计数器递增,并在循环体内执行对子查询结果的操作。 在操作子查询结果时,你可以根据具体需求来编写查询语句,如进一步的查询、更新、插入等操作。在每次循环迭代时,你都可以使用子查询结果中的字段值来作为件或参数。 综上所述,使用MySQL的嵌套查询结合循环控制结构可以实现将查询出的10个结果作为件进行循环查询的功能。根据具体需求,你可以在循环体内执行任意的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值