测试常用 SQL 命令

对“全方位”测试人员的需求正在增长。“全方位”是什么意思?这意味着测试人员除了具备传统的“点点点”测试方法来测试系统功能的能力,并能够利用技术专长来验证系统的各个方面。该技术专长包括操作系统,界面和数据库验证技能。之前我有介绍过测试为什么要学习 Linux,今天就来重点介绍 为什么要学习SQL。

 

什么是SQL?

SQL 由 IBM Donald D. Chamberlin Raymond F. Boyce 于1970年代开发,SQL 是指结构化查询语言。 最初,它被称为SEQUEL,该名称仍被用作 SQL 的替代发音,但后来被重命名为 SQL。

 

SQL 是用于关系数据库管理数据操作的标准计算机语言。SQL 用于查询,插入,更新和修改数据。你可以将SQL 视为用户和数据库管理系统(DBMS)之间的通信媒介。

 

简而言之,SQL 是一种编程语言,我们可以用来与数据库进行交互和访问。

 

测试人员需要具备 SQL 技能吗?

测试人员可能需要或可能不需要 SQL 技能;它取决于项目需求以及测试团队的需求。

 

如果项目是数据仓库项目,你需要将主要精力放在数据上。那么,在这种情况下,测试人员需要 SQL 技能。

但是,想象一下,如果团队中有另一位具有 SQL 技能的测试人员,这时候,作为测试的你可能不需要 SQL 技能。同一个项目,你也可以看到 测试人员扮演的角色取决于需求

 

更需要 SQL 技能的项目包括:

  • 数据转换或迁移
  • 数据库升级
  • 数据仓库或商业智能(BI)项目

 

平时工作中,我使用 SQL 的场景最多的就是前端页面填写完表单数据,验证数据是否已存储在后端(数据库)中以及是否存储正确 ;如果前端显示的数据值从后端更改了,更改是否显示在前端?在测试时应该对这些操作进行验证。

 

我认为测试人员应该具有以下数据库和 基本 SQL知识::

  • 了解数据库中使用的数据类型
  • 编写简单的查询语句
  • 了解数据库表,键和索引之间的连接

 

常用SQL语句:

SQL 技能与其他技能一样,可能会帮助你找到工作,可能对项目有帮助。我们不需要精通它,学习一些基本的SQL 语句,对关系数据库的工作方式有一定的了解。

 

1、SELECT

首先,最常用的是查询语句。要从SQL数据库检索数据,我们需要编写 SELECT 语句。

 

选查询特定列

SELECT column, another_column, … FROM mytable;

 

选择查询所有列

SELECT * FROM mytable;

该查询特别有用,因为它是通过一次转储所有数据来检查表的简单方法。

 

注:SELECT是一个关键字;SQL 不需要将所有关键字都写成大写字母,但是作为一种约定,它可以帮助人们从列名和表名中区分出 SQL关键字,并使查询更易于阅读。

同时,分号是结束语句的意思。

 

举个例子,大家可能更加直观。

Table: movies

id title director year length_minutes
1

玩具总动员

John Lasseter 1995 81

2

玩具总动员2

John Lasseter 1999 93
3

怪兽电力公司

Pete Docter 2001 92
4

海底总动员

Andrew Stanton 2003 107
5

超人总动员

Brad Bird 2004 116

比如,需要查询所有电影名,我们可以

SELECT title FROM movies;

 

title

玩具总动员

玩具总动员2

怪兽电力公司

海底总动员

超人总动员

 

2、WHERE

现在,我们知道了如何从表中选择特定的数据列,但是如果您的表具有一亿行数据,那么读取所有行将是低效率的,甚至是不可能的。为了过滤返回的某些结果,我们需要在查询中使用子句 WHERE 。

 

选择约束查询

SELECT column, another_column, …FROM mytable

WHERE condition

AND/OR another_condition

AND/OR …;

 

比如,需要查询出海底总动员的信息 ,我们可以

SELECT * FROM movies

WHERE title = "海底总动员";
id title director year length_minutes
5

超人总动员

Brad Bird 2004 116

 

3、DISTINCT

即使数据库中的数据可能是唯一的,但任何特定查询的结果都可能不是。以我们的电影表为例,同一导演可以发行许多不同的电影。在这种情况下,SQL提供了一种便捷的方法,可以通过使用DISTINCT 关键字来丢弃具有重复列值的行。

选择具有唯一结果的查询 

SELECT DISTINCT column, another_column, …FROM mytableWHERE condition(s);

比如,想知道表中所有电影导演都有谁,可以:

SELECT DISTINCT director FROM movies;
director
John Lasseter
Pete Docter
Andrew Stanton
Brad Bird

 

4、操作符:LIKE

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

 

选取 director 以字母 "J" 开始的所有数据

SELECT * FROM movies

WHERE director LIKE 'J%';
id title director year length_minutes
1

玩具总动员

John Lasseter 1995 81

2

玩具总动员2

John Lasseter 1999 93

 

选取 director 以字母 "r" 结尾的所有数据

SELECT * FROM movies

WHERE director LIKE '%r';
id title director year length_minutes
1

玩具总动员

John Lasseter 1995 81

2

玩具总动员2

John Lasseter 1999 93
3

怪兽电力公司

Pete Docter 2001 92

 

通过使用 NOT 关键字,您可以选取不匹配模式的记录。

选取 director 不包含 "ss" 的所有数据

SELECT * FROM movies

WHERE director NOT LIKE '%ss%';
id title director year length_minutes
3

怪兽电力公司

Pete Docter 2001 92
4

海底总动员

Andrew Stanton 2003 107
5

超人总动员

Brad Bird 2004 116

 

5、ORDER BY

与上面的表整齐排序不同,真实数据库中的大多数数据没有特定的列顺序添加。当表的大小增加到数千甚至几百万行时,可能难以阅读和理解查询的结果。

为了解决这个问题,SQL 提供了一种使用 ORDER BY 子句对结果按升序或降序进行排序的方法。ASC 是升序,DESC 是降序,默认是升序。

选择查询结果排序

SELECT column, another_column, …FROM mytable

WHERE condition(s)

ORDER BY column ASC/DESC;

 

比如,想知道按年份降序的电影年份情况,可以:

SELECT year FROM movies ORDER BY year DESC;
year

2004

2003

2001

1999

1995

 

 

6、LIMIT & OFFSET

和 ORDER BY 子句一起使用的有 LIMIT 和 OFFSET 子句,用于检索查询返回的行的一部分

选择行数有限的查询

SELECT column, another_column, …FROM mytableWHERE condition(s)ORDER BY column ASC/DESC LIMIT num_limit OFFSET num_offset;

 

如果要只返回前3行数据,可以使用LIMIT子句:

SELECT year FROM movies LIMIT 3;
year
1995
1999
2001

 

OFFSET 则可以指定从哪里开始计数的行数,比如按年份降序,列出第 2 行到第4行的数据

SELECT * FROM movies ORDER BY year DESC LIMIT 3 OFFSET 1;
id title director year length_minutes
4

海底总动员

Andrew Stanton 2003 107
3

怪兽电力公司

Pete Docter 2001 92

2

玩具总动员2

John Lasseter 1999 93

注意:OFFSET 从 0 开始计数。

 

7、INNER JOIN…

到目前为止,我们一直在处理单个表,但是现实世界中的实体数据通常被分解为多个部分,并使用称为标准化的过程存储在多个正交表中。我们需要通过多表查询,得到想要的数据。

INNER JOIN是一个过程,它匹配来自第一个表和第二个表的具有相同键(由ON约束定义)的行,以使用两个表中的合并列创建结果行。

 

在多个表上使用INNER JOIN选择查询:

SELECT column, another_table_column, …FROM mytable

INNER JOIN another_table

ON mytable.id = another_table.id

WHERE condition(s)

ORDER BY column, … ASC/DESC

LIMIT num_limit OFFSET num_offset;

注:INNER JOIN简写为JOIN。这两个是等效的。

 

在 pixar 数据库中,我添加了一个新表,尝试练习一些联接。表 boxoffice,存储了电影的收视率以及国内国外的票房。字段 movie_id 与 movies 表的列编号 id 是一一对应的。

Table: boxoffice (Read-Only)

movie_id rating domestic_sales international_sales
5 8.2 380843261 555900000
14 7.4 268492764 475066843
8 8 206445654 417277164
12 6.4 191452396 368400000
3 7.9 245852179 239163000
6 8 261441092 370001000
9 8.5 223808164 297503696

比如,要查找每部电影的国内和国际销售:

SELECT title, domestic_sales, international_sales

FROM movies

JOIN boxoffice

ON movies.id = boxoffice.movie_id;

 

显示每部在国际上胜于国内的电影的销量数字:

SELECT title, domestic_sales, international_sales

FROM movies

JOIN boxoffice

ON movies.id = boxoffice.movie_id

WHERE international_sales > domestic_sales;

 

按等级降序列出所有电影:

SELECT title, rating

FROM movies

JOIN boxoffice

ON movies.id = boxoffice.movie_id

ORDER BY rating DESC;

 

是不是没有想象的那么复杂?还是我常说的,需要大家可以跟着我一起尝试!

在工作中,上面介绍的这些语句基本够用了。要记住,对于测试人员而言,这基本上不是核心知识。我们下次见!

 

你可能感兴趣的:(软件基础理论,sql,软件测试)