未经王豆豆同意,不予转载,如要转载,请注明出处。
查询语句(SELECT)是软件测试人员使用得最多,也是最需要被掌握的语句,查询语句可以分为单表查询,连接查询,嵌套查询(子查询)等。
3.嵌套查询
练习数据:
软件测试人员在做自动化测试或查询数据时,经常会用到子查询,将一个查询语句的结果集作为另一个查询语句的条件或者表,从而查询出新的结果集。
嵌套查询即是子查询
一个查询语句包含其他的查询语句,则叫子查询
子查询有几种结果:
子查询返回一列语句:也就是一列一个数据,这是使用情况最多的
返回一行语句:查询结果返回一行数据,有可能是一行完整的数据
返回多行语句:查询结果返回一组数据
格式:
SELECT [ALL|DISTINCT] {*|table1.*|{table1.field1} [as alias1]|{table2.field2} [as alias2],....}
FROM table1 [别名],table2,{
SELECT [ALL|DISTINCT] {*|table1.*|{table1.field1} [as alias1]|{table2.field2} [as alias2],....}
FROM table1 [别名],table2,....
[WHERE 某列名称 = 某值]
[ORDER BY ...]
}别名,....
[WHERE (条件s){
SELECT [ALL|DISTINCT] {*|table1.*|{table1.field1} [as alias1]|{table2.field2} [as alias2],....}
FROM table1 [别名],table2,....
[WHERE 某列名称 = 某值]
[ORDER BY ...]
}]
[ORDER BY ...]
现在有三张表,表结构如下:班级(class)表(学号(id),姓名(name),班级(class),年龄(age))
课程(course)表(课程名(cname),课程号(cno))
分数(score)表(学号(xuehao),姓名(name),课程号(scno),分数(score))
(1)查询出学生数据库分数大于王豆豆测试基础的分数的学员姓名和分数
解题步骤:
1.查询王豆豆测试基础的分数SELECT score
FROM score s,course c
WHERE s.scno = c.cno AND c.cname ='测试基础' AND s.name = '王豆豆';
2.查询出学生数据库的分数SELECT score
FROM score s,course c
WHERE s.scno = c.cno AND c.cname = "数据库";
3.合并,查询出分数大于1题查询结果的学员姓名和分数SELECT s.name,s.score
FROM score s, course c
WHERE s.scno = c.cno AND c.cname = "数据库" AND score > (SELECT score
FROM score s,course c
WHERE s.scno = c.cno AND c.cname ='测试基础' AND s.name = '王豆豆');
(2)查询出分数小于测试基础最低分数的学员姓名和课程,分数
解题步骤:
1.查询出测试基础的分数(查询结果为一组数据)SELECT score
FROM score s,course c
WHERE s.scno = c.cno AND c.cname ='测试基础';
2.查询出分数小于最低分数的学员姓名和课程,分数SELECT s.name,c.cname,s.score
FROM score s,course c
WHERE s.scno = c.cno AND score
FROM score s,course c
WHERE s.scno = c.cno AND c.cname ='测试基础');
(3)查询出分数大于测试基础最低分数的学员姓名和课程,分数SELECT s.name,c.cname,s.score
FROM score s,course c
WHERE s.scno = c.cno AND score >ANY(SELECT score
FROM score s,course c
WHERE s.scno = c.cno AND c.cname ='测试基础');
注意:
1.ANY
>ANY() : 比里面最小值的大
=ANY() == IN 包含
2.ALL
>ALL() : 大于里面最大值
(5).以课程号 '11632'为例,查询成绩高于'3'号同学的所有同学的记录。SELECT c.*
FROM class c,score s
WHERE c.id=s.xuehao AND s.scno = '11632'
AND s.score > ALL(SELECT score FROM score WHERE xuehao = '3' );
(6)查询与学号为'2'的同学同岁的所有学生的学号、姓名和年龄。SELECT id,name,age
FROM class
WHERE age = (SELECT age FROM class WHERE id= '2');
(7)查询出分数小于课程号为11634的学员分数最大值的学员姓名和分数SELECT c.name,s.score
FROM class c,score s
WHERE c.id = s.xuehao AND
s.score
王豆豆
王豆豆是在mysql上进行的练习,各位小伙伴们可以自己搭建一个mysql数据库进行练习。
未经王豆豆同意,不予转载,如要转载,请注明出处。