高级软件测试人员一定要掌握的SQL语言之嵌套查询(MYSQL)

查询语句(SELECT)是软件测试人员使用得最多,也是最需要被掌握的语句,查询语句可以分为单表查询,连接查询,嵌套查询(子查询)等。

1.软件测试人员不可不知的SQL语言之简单查询(SELECT)

2.SQL:INNER JOIN,LEFT JOIN,RIGHT JOIN,哪一个连接查询更合你意

3.嵌套查询

练习数据:

SQL语言练习数据:class表 AND course表 AND score表结构和数据

软件测试人员在做自动化测试或查询数据时,经常会用到子查询,将一个查询语句的结果集作为另一个查询语句的条件或者表,从而查询出新的结果集。

嵌套查询即是子查询

一个查询语句包含其他的查询语句,则叫子查询

子查询有几种结果:

子查询返回一列语句:也就是一列一个数据,这是使用情况最多的

返回一行语句:查询结果返回一行数据,有可能是一行完整的数据

返回多行语句:查询结果返回一组数据

格式:

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))

(如果想自己练习,可以去:SQL语言练习数据:class表 AND course表 AND score表结构和数据 取表结构和数据,然后直接导入到mysql中就行了)

(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 <ALL(SELECT 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() : 比里面最大值的小

=ANY() == IN 包含

2.ALL

>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 <ANY(SELECT score FROM score WHERE scno = “11634”);

王豆豆

王豆豆是在mysql上进行的练习,各位小伙伴们可以自己搭建一个mysql数据库进行练习。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年11月2日
下一篇 2017年11月3日

相关推荐