Sử dụng câu lệnh SQL trong kiểm thử phần mềm
Bài đăng này đã không được cập nhật trong 6 năm
1. SQL và mục đích sử dụng SQL trong testing
SQL là viết tắt của Structured Query Language, là ngôn ngữ cơ sở dữ liệu được sử dụng để tạo, thêm, sửa xóa dữ liệu trong cơ sở dữ liệu, … Tất cả các hệ quản trị cơ sở dữ liệu như MySQL, Oracle, MS Access, Sybase, Informix, Postgres và SQL Server sử dụng SQL như là ngôn ngữ cơ sở dữ liệu chuẩn.
**Vậy việc sử dụng SQL trong testing có mục đích gì? **
SQL được sử dụng để truy vấn các dữ liệu trong database phục vụ cho các mục đích test khác nhau liên quan đến dữ liệu của hệ thống. Ví dụ SQL được sử dụng trong Actual Data Testing( Kiểm thử dữ liệu thực) để kiểm tra nội dung của data có chính xác hay không...)
Đối với 1 tester, Có 2 nhóm lệnh SQL chính mà chúng ta cần quan tâm:
- Nhóm truy vấn dữ liệu: gồm các lệnh truy vấn lựa chọn(Select) để lấy thông tin nhưng không làm thay đổi dữliệu trong các bảng
- Nhóm thao tác dữ liệu: Gồm các lệnh làm thay đổi dữ liệu (Insert, Delete, Update,…) lưu trong các bảng
Trong bài viết này, tôi sẽ giới thiệu các câu lệnh SQL cơ bản thường được sử dụng nhất để truy xuất dữ liệu khi thực hiện kiểm thử. Chúng ta hay cùng tìm hiểu về các câu lệnh và cách sử dụng chúng như thế nào nhé.
2. Sử dụng SQL trong testing như thế nào?
2.1 Tìm hiểu về cấu trúc cơ sở dữ liệu
Trước khi thực hiện truy vấn dữ liệu bằng các câu lệnh SQL, trước hết, chúng ta cần tìm hiểu về cấu trúc cơ sở dữ liệu(CSDL) trước khi viết các câu lệnh truy vấn
- Chúng ta cần hiểu và nắm được các bảng CSDL cần dùng để truy vấn, quan hệ giữa các bảng ra sao,
- Nắm được định nghĩa các giá trị của các trạng thái trong 1 bảng
VD: Đối với CSDL quản lý nhân viên: trong bảng nhân viên, ta cần nắm được 1 nhân viên có những trạng thái gì( đang đi làm, đã nghỉ việc, đang trong thời kì thai sản..) và tương ứng với những giá trị nào trong DB)
2.2 Các câu lệnh SQL cơ bản
Câu lệnh SELECT
-
Truy vấn lựa chọn một số trường của bảng:
SELECT column1, column2, ... FROM TableName;
-
Truy vấn lựa chọn tất cả các trường của bảng (lưu ý: truy vấn này ít dùng với database lớn)
SELECT * FROM TableName
Lưu ý : Để trả về bản ghi không trùng lặp nhau ta có dùng câu lệnh DISTINCT như sau:
SELECT DISTINCT column1, column2, ...
FROM TableName;
VD: Ta có 1 hệ thống quản lý nhân viên gồm có bảng Department lưu thông tin về các phòng ban trong công ty. Để lấy ra danh sách phòng ban và tên các phòng ban có trên hệ thống ta dùng câu lệnh sau:
SELECT * from Department
Hoặc:
SELECT DISTINCT Name from Department
Mệnh đề WHERE - AND, OR, BETWEEEN và LIKE
Mệnh đề WHERE được sử dụng để lọc các bản ghi theo điều kiện trong câu lệnh SELECT, còn được sử dụng trong câu lệnh UPDATE, DELETE...
Cú pháp :
SELECT column1, column2, ...
FROM table_name
WHERE condition;
Có 6 mối quan hệ điều kiện sau:
- Để thỏa mãn đồng thời nhiều điều kiện chúng ta dùng câu lệnh AND , và để thỏa mãn một trong số những điều kiện chúng ta dùng câu lệnh OR Ví dụ ta có bảng sau:
Giờ ta thực hiện lấy ra những nhân viên đang làm việc tại công ty và có năm sinh 1990:
SELECT * from Employee
WHERE Employee.Status = 1 AND Employee.Birthday = 1990;
Lấy ra các nhân viên có năm sinh 1990 hoặc 1993 sử dụng OR
SELECT * from Employee
WHERE Employee.Birthday = 1990 OR Employee.Birthday = 1993;
-
Và 1 ví dụ về việc sử dụng toán tử BETWEEN
Ví dụ tìm nhân viên trong công ty có năm sinh từ năm 1990 đến 1993 :SELECT * from Employee WHERE Employee.Birthday between 1990 and 1993;
-
Câu lệnh sử dụng từ khóa LIKE thường được dùng khi bạn muốn so sánh 1 xâu/chuỗi. VD vẫn với bảng phía trên: Hãy tìm nhân viên mà tên có chữ Mai
Select * from Employee where Fullname like '%Mai%'
*) 1 số các toán tử khác hay được sử dụng trong biểu thức điều kiện:
- Toán tử so sánh: =, < , >, <>, !=, >=, <=, BETWEEN… AND, LIKE, IN
*- So sánh xâu dùng LIKE: , %...
- Toán tử logic: AND, OR và NOT
Các loại kết nối bảng
Khi cần truy vấn dữ liệu trên nhiều bảng, ta phải sử dụng các câu lệnh kết nối các bảng dữ liệu với nhau, có các kiểu kết nối như sau: - Inner Join (Equi-join, Natural Join ) - Outer Join (Left outer Join, Right outer join, Full outer join) - Cross Join - Self Join Nhưng chúng ta sẽ chỉ tập trung tìm hiểu 2 loại join đó là Inner Join( kết nối trong) và Outer Join( kết nối ngoài)
Kết nối trong INNER JOIN
Có 2 cách sử dụng kết nối trong như sau:
- Sử dụng điều kiện WHERE
Cú pháp:
SELECT column_name(s)
FROM table1, table2
WHERE table1.column_name = table2.column_name;
- Sử dụng INNER JOIN
Cú pháp:
SELECT column_name(s) FROM table1
INNER JOIN table2 ON table1.column_name = table2.column_name;
Kết nối ngoài LEFT JOIN
Cú pháp:
SELECT column_name(s)
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name;
Kết nối ngoài trả về tất cả những giá trị từ bảng bên trái (table1) + những giá trị tương ứng với bảng bên phải (table2) hoặc là null (khi những giá trị ở bảng bên phải không tương ứng).
Kết nối ngoài RIGHT JOIN
Cú pháp:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2 ON table1.column_name = table2.column_name;
Kết quả: Trả về tất cả những giá trị từ bảng bên phải (table2)+ những giá trị tương ứng với bảng bên trái (table1) hoặc là null (khi những giá trị ở bảng bên phải không tương ứng).
Kết nối ngoài FULL OUTER JOIN
Cú pháp:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
Kết quả: Kết nối ngoài đủ kết hợp cả kết quả của cả phép kết nối ngoài bên trái và phép kết nối ngoài bên phải ➔ đưa ra bản ghi của cả hai bảng dữ liệu và lấp đầy những dòng tương ứng bị thiếu của cả hai phía bằng NULL.
Trong phạm vi bài viết này, chúng ta sẽ lấy ví dụ về INNER JOIN, loại kết nối hay được sử dụng nhất: Giả sử, chúng ta có 2 bảng dữ liệu: Employee and Department như sau:
=> Thực hiện tìm danh sách nhân viên nữ đang làm việc trong phòng IT Ta sử dụng câu lệnh sau: SELECT a.FullName FROM Employee a INNER JOIN Department b ON a.DepartmentId = b.DepartmentID WHERE a.Sex = 0 AND a.Status = 1 AND b.Name = 'IT' ;
=> Kết quả trả về 2 nhân viên: MaiNT và NgocLT.
Mệnh đề ORDER BY
Mệnh đề này cho phép sắp xếp kết quả truy vấn theo cột. Cú pháp:
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
Có thể sắp xếp kết quả theo chiều: - Tăng dần (asc) – mặc định khi truy vấn khi order - Giảm dần (desc) Ví dụ: Lấy ra các phòng trong công ty sắp xếp theo số lượng nhân viên giảm dần
SECLECT Department.Name
FROM Department
ORDER BY Department.Number DESC
Hoặc lấy ra các phòng trong công ty sắp xếp theo số lượng nhân viên tăng dần ta sử dụng câu lệnh sau:
SECLECT Department.Name
FROM Department
ORDER BY Department.Number DESC
Mệnh đề GROUP BY
Mệnh đề GROUP BY cho phép nhóm các hàng dữ liệu có giá trị giống nhau thành một nhóm Các tính toán (thường sử dụng các hàm truy vấn nhóm) sẽ được tính trên mỗi nhóm. Cú pháp:
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s);
Một số hàm khác thường được sử dụng
-
Hàm Max(column) - Tìm giá trị lớn nhất trong cột column
SELECT MAX(column_name) FROM table_name WHERE condition;
-
Hàm Min(column) - Tìm giá trị nhỏ nhất trong cột column
SELECT MIN(column_name) FROM table_name WHERE condition;
-
Hàm Avg(column) - Tìm giá trị trung bình của cột column
SELECT AVG(column_name) FROM table_name WHERE condition;
-
Hàm Count – Hàm đếm số bộ
SELECT COUNT(column_name) FROM table_name WHERE condition;
-
Hàm SUM(column) – Tổng các giá trị của cột column
SELECT SUM(column_name) FROM table_name WHERE condition;
2.3 Ngôn ngữ thao tác dữ liệu
. Ngôn ngữ thao tác dữ liệu gồm các truy vấn cho phép thêm, sửa, xóa dữ liệu trong các bảng . Các truy vấn này bắt đầu bằng từ khóa: INSERT INTO - thêm dữ liệu mới vào bảng UPDATE - cập nhật/sửa đổi dữ liệu trong bảng DELETE - xóa dữ liệu trong bảng
Câu lệnh thêm dữ liệu mới vào bảng
Câu lệnh này cho phép thêm mới bản ghi vào 1 bảng. Khi thực hiện các câu lệnh truy vấn này cần rõ cấu trúc dữ liệu, mối quan hệ giữa các bảng và chỉ trong trường hợp không tạo được dữ liệu ngoài site thì mới nên dùng INSERT
Cú pháp:
INSERT [INTO] TableName VALUES(val1,val2,…)
INSERT [INTO] TableName(column1,…,columnN) VALUES (val1,…,valN)
Câu lệnh cập nhật dữ liệu trong bảng
Câu lệnh này giúp bạn cập nhật dữ liệu trong 1 bảng nào đó. Và lưu ý khi thực hiện: luôn phải có điều kiện khi update dữ liệu và chú ý hạn chế update dữ liệu bởi vì có thể gây ra sai sót về dữ liệu.
Cú pháp:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
Câu lệnh xóa dữ liệu trong bảng
Trước khi thực hiện câu lệnh này, bạn cần nhớ phải luôn có điều kiện khi thực hiện delete và phải hiểu rõ các ràng buộc trước khi thực hiện delete.
Cú pháp:
DELETE FROM table_name
WHERE condition;
3. Một số lưu ý khi viết câu lệnh SQL
- SQL không phân biệt chữ hoa chữ thường
- Một số gợi ý khi xử lý lỗi cú pháp:
- Quên hoặc lựa chọn sai CSDL
- Viết sai tên bảng hoặc tên cột
- Viết sai từ khóa
- Bỏ sót dấu đóng ngoặc với một chuỗi ký tự.
- Query 2 câu lệnh nhưng thiếu dấu ;
- Sử dụng gợi ý khi viết câu lệnh
- Với database có dữ liệu lớn thì phải truy vấn có điều kiện (VD: khi sử dụng có thể dùng câu lệnh select top 1000 rows: để lấy ra chỉ 1000 bản ghi ) Trong trường hợp truy vấn phức tạp chúng ta có thể tham khảo truy vấn từ developer và nhớ kiểm tra lại độ chính xác của câu lệnh.
4. Tài liệu tham khảo
All rights reserved