導讀
軟件測試人員在工作使用SQL語言中的查詢是使用得最多的,而查詢也是SQL語言中最復雜的,很多測試人員只使用到其中最簡單的查詢
1.數據庫的使用
現在在任何項目中都有數據庫存在,那么在測試過程中查看數據庫中的數據是必不可少的步驟,那什么情況下測試人員會查看數據庫呢?
比如有一個測試場景是注冊新用戶,用戶在前端頁面上添加了一個新用戶,點擊提交后,彈出提示用戶注冊成功。
這時預期結果中就應該包含查詢數據庫:查詢user表中新增一條數據,數據字段的信息與注冊信息一致;查詢password表中新增一條數據,字段信息顯示正確,其中密碼字段為加密后的字符串。
再比如有一個測試場景是一個用戶向另一個用戶轉賬100元,用戶在前端頁面發起轉賬,界面顯示轉賬成功。
預期結果中查詢數據庫的信息應為:交易流水表中新增一條數據,數據字段的信息顯示正確,其中轉賬金額為100元,手續費為0元;查詢用戶賬戶表,發起用戶的賬戶余額為XXX元,接收用戶的賬戶余額為XXX元。
這些語句包含在測試用例中的預期結果中,而在執行測試時就需要根據用例所描述的信息去查詢數據庫。
軟件測試人員在執行測試時使用最多的語句就是查詢(SELECT)語句,而SELECT語句也是SQL語言中相當復雜的語句,它包含單表查詢,連接查詢,嵌套查詢,集合查詢等各種復雜不同的數據庫查詢。
2.單表查詢
單表查詢是SELECT語句中最簡單的查詢語句。
select語句格式:
SELECT [ALL|DISTINCT] {*|table1.*|{table1.field1} [as alias1]|{table2.field2} [as alias2],....}
FROM table1 AS [別名],table2 AS [別名]
講解:
*---表示表中所有字段
table.*---表示某個表的所有字段
table.field---表示某個表的某個字段
AS alias---給字段取別名,as可以省略
select語句執行順序:
SELECT 子句-----再執行SELECT 2
FROM 子句-----先執行FROM 1
SELECT 語句的意義是根據不同的條件查詢出數據,最終顯示查詢出來的結果集;select子句控制結果集的顯示。
現在有三張表,表結構如下:
班級(class)表(學號(xuehao),姓名(name),班級(class),年齡(age))
課程(course)表(課程名(c_name),課程號(cno))
分數(score)表(學號(xuehao),課程號scno,分數(score))
1.查詢語句
1.查詢class表中所有的數據
mysql> SELECT * FROM class;
2.查詢class表中name字段的數據
mysql> SELECT name FROM class;
3.查詢class表上name和age字段,並取別名
mysql> SELECT name as 姓名,age 年齡-> FROM class;
4.在第三題的基礎上,給class表取別名
mysql>SELECT c.name as 姓名,c.age 年齡-> FROM class c;
5.查詢class表中city字段,並去重
mysql> SELECT DISTINCT city-> FROM class;
6.查詢class表中前面三條數據(LIMIT ---返回指定的數據)
mysql> SELECT * FROM class LIMIT 3;
7.查詢class表中第五條數據后面的三條數據
mysql> SELECT * FROM class LIMIT 5,3;
2.加上條件語句
格式:SELECT [ALL|DISTINCT] {*|table1.*|{table1.field1} [as alias1]|{table2.field2} [as alias2],....}
FROM table1 [別名],table2別名,....
[WHERE (條件s)]
1.查詢class表中姓名為張季柯的數據
mysql> SELECT *-> FROM class-> WHERE name = 'tester';
語句執行順序:
SELECT * ---------------------------------3 ---最終顯示的結果集
FROM class ------------------------------1
WHERE name = 'tester'; ----------------2
2.查詢class表中姓名為張三豐的年齡的數據
mysql> SELECT age 年齡-> FROM class-> WHERE name = '張三豐';
3.查詢class表中city為成都的學員的姓名和班級的數據
mysql> SELECT name,class-> FROM class-> WHERE city = "成都”;
4.在3的基礎給name和class分別取別名
mysql> SELECT name 姓名,class 班級-> FROM class-> WHERE city = '成都’;
在條件語句中加上運算符和IN,BETWEEN,LIKE等關鍵字,可查詢某個范圍的數據
運算符:>,<,=,<>,<=,>=
IN、BETWEEN….AND、LIKE
5.查詢class表中age大於等於23的學員
mysql> SELECT *-> FROM class-> WHERE age >= 23;
6.查詢class有中age小於等於23的學員的姓名和班級
mysql> SELECT name 姓名,class 班級 from class where age <= 23;
7.查詢class表中班級不為C1704的所有學員信息
mysql> SELECT *-> FROM class-> WHERE class <> 'C1704';
注意:<>在某SQL版本中可以與 != 互換
8.查詢class表中年齡為23,25,27的學員姓名和班級----IN 包含
格式:IN (值1,值2,值3,....)
mysql> SELECT name 姓名,class as 班級-> FROM class-> WHERE age IN (23,25,27);
9.查詢score表中成績為(80,90,78)的學員姓名和學號
mysql> SELECT name 姓名,xuehao 學號-> FROM score-> WHERE score IN (80,90,78);
10.查詢score表中成績為70-90之間的學員信息
mysql> SELECT * FROM score-> WHERE score <= 90 AND score >= 70;=== SELECT * FROM scoreWHERE score BETWEEN 70 AND 90; ----推薦
注意:BETWEEN ....AND....在某某之間的數據,可以是數值,也可以是文本,也可以是日期
11.查詢class表中class為A1354到C1805之間的學員
mysql> SELECT * FROM class-> WHERE class BETWEEN 'A1354' AND 'C1805';
注意:以字母順序取值 取A--C之間的數據
12.查詢出class表姓名以王開頭的學員信息---like
mysql> SELECT * FROM class-> WHERE name LIKE '王%';
注意:LIKE----好像
一般與通配符搭配使用:
%---一個或多個字符串
_---一個字符
13.查詢出class表中姓名為王開頭,且姓名只有二個字的學員信息
mysql> SELECT * FROM class-> WHERE name LIKE '王_';
14.查詢class表中姓名以王和張開頭的數據
mysql> SELECT * FROM class-> WHERE name like '王%' OR name like '張%';
注意:OR---或,一般跟WHERE語句里,表示二個條件只要滿足一個就行,並集
15.查詢class表中姓名以王開頭,且年齡為23的學生信息
mysql> SELECT * FROM class-> WHERE name LIKE '王%' AND age = 23;
注意:and---和,表示二個條件同時滿足,取條件的交集
16.查詢class表中年齡不為null
mysql> SELECT * FROM class-> WHERE age not is null;
注意:NOT---不滿足后面的條件
3.針對結果集進行升降順序排序
ORDER BY 對指定的結果集進行排序
格式:
SELECT [ALL|DISTINCT] {*|table1.*|{table1.field1} [as alias1]|{table2.field2} [as alias2],....}
FROM table1 [別名],table2,....
[WHERE 某列名稱 = 某值]
[ORDER BY ...]
1.查詢score表中的分數,並以遞增的順序進行排序(升序)
mysql> SELECT score FROM score ORDER BY score;
2.查詢score表中的分數,並以遞減的順序進行排序(降序)
mysql> SELECT score FROM score ORDER BY score desc;
注意:ASC ----升序排列, 一般默認就是升序,可以省略
DESC----降序排列,只有加上DESC,才是降序
3.查詢class表中學員的姓名,以年齡降序排列,名字升序排列
mysql> SELECT name-> FROM class-> ORDER BY age desc,name asc;
ORDER BY 是根據后面加上列名稱來進行升序或降序排列
4.查詢class表中學生年齡在20到30之間的學號和員姓名,同時對學號降序排列
mysql> SELECT xuehao,name-> FROM class-> WHERE age between 20 and 30-> ORDER BY age desc;
下節再介紹SELECT語句的多表查詢,連接查詢,嵌套查詢等復雜的查詢語句。
歡迎關注王豆豆的微信公眾號:資深Tester,了解更多好文,和王豆豆一起成長。。。。