SQL dành cho tester (Phần I)

Giới thiệu chung

SQL là một ngôn ngữ chuẩn để truy cập các Cơ Sở Dữ Liệu (CSDL), vì thế trước khi thực hiện kiểm thử CSDL, điều kiện tiên quyết đối với các kiểm thử viên là cần có kiến thức về SQL. Hiện nay có rất nhiều tài liệu về SQL cũng như thực hành SQL trực tuyến, tuy nhiên nếu chưa có cơ hội làm việc về CSDL trước đó trong khi dự án yêu cầu phải làm quen nhanh với SQL, tester sẽ gặp nhiều bỡ ngỡ và mất nhiều thời gian để đọc và thực hành mà đôi khi trong công việc kiểm thử thực tế của dự án chưa hoặc không đòi hỏi phải sử dụng tất cả như thế. Đứng dưới góc độ kiểm thử viên khi lần đầu tiên được giao nhiệm vụ kiểm thử CSDL “thực sự” và chỉ có 2 ngày để nghiên cứu trước khi bắt tay vào dự án, người viết mong muốn sẽ tập hợp lại một chuỗi hướng dẫn về các cú pháp, câu lệnh, chức năng từ cơ bản đến nâng cao sao cho tester tiếp cận nhanh và hiệu quả nhất. Phần I của chủ đề này sẽ trình bày các cú pháp SQL cơ bản mà tester thường xuyên dùng nhất để truy vấn CSDL.

SQL là gì?

SQL tên gọi đầy đủ là Structured Query Language, cho phép người dùng truy cập dữ liệu trong các hệ thống quản lý CSDL quan hệ, như Oracle, Sybase, Informix, Microsoft SQL Server Access, v.v... bằng cách cho phép người dùng mô tả dữ liệu mà họ muốn trả về. Ngoài ra, SQL còn cho phép người dùng định nghĩa dữ liệu trong một CSDL, và điều khiển dữ liệu đó.

1. SQL SELECT

Trong một CSDL quan hệ, dữ liệu được lưu trữ ở dạng bảng (table). SELECT là câu lệnh cơ bản nhất trong SQL và tester sử dụng thường xuyên nhất để truy vấn dữ liệu trong các bảng (Table) của CSDL.

Cú pháp:

SELECT ColumnName1, ColumnName2 … FROM TableName;

Ngữ cảnh: Toàn bộ thông tin khách hàng được lưu trong 1 bảng CSDL tên Customers và bạn muốn truy vấn tên và địa chỉ của từng khách hàng.

Câu lệnh SELECT và kết quả trả về sẽ như sau:

Image1.png

Lưu ý:

a) Tên bảng và tên cột không được có khoảng cách và được nhập như một từ; và câu lệnh phải kết thúc bằng chấm phẩy (😉.

b) Phải có dấu phẩy (,) giữa các tên cột.

c) Để lấy tất cả các cột của một bảng mà không cần nhập tất cả tên cột, dùng câu lệnh:

SELECT * FROM TableName;

2. SQL WHERE

WHERE là câu lệnh nhằm giới hạn phạm vi truy vấn dựa trên các tiêu chí được mô tả ở mệnh đề WHERE.

Cú pháp:

SELECT ColumnName(s) FROM TableName WHERE ColumnName operator ‘Value';

Đây là danh sách các toán tử hay dùng với WHERE và ý nghĩa của chúng:

  • "=" - Bằng với
  • "<>" hoặc "!=" - Khác với
  • "<" - Nhỏ hơn
  • ">" - Lớn hơn
  • "<=" - Nhỏ hơn hoặc bằng
  • ">=" - Lớn hơn hoặc bằng
  • "LIKE" - Giống với
  • "BETWEEN" - Nằm giữa
  • "IN" - Trong phạm vi

Ngữ cảnh: Truy vấn tên và địa chỉ khách hàng có quốc gia là Germany. Câu lệnh truy vấn và kết quả trả về như sau:

Image2.png

Thông thường, với các cột text, sẽ dùng toán tử bằng hoặc không bằng, và text cần tìm phải được bao bởi nháy đơn (‘).

2.1 Điều kiện kép: AND & OR

Toán tử AND

AND kết nối hai hoặc nhiều điều kiện, và hiển thị những hàng (row) nào có dữ liệu thỏa mãn TOÀN BỘ điều kiện được mô tả.

Cú pháp:

SELECT ColumnNames WHERE ColumnName operator Value AND ColumnName operator Value;

Ngữ cảnh: Truy vấn Tên khách hàng, Thành phố, và Quốc gia trong đó City = ‘London' và Country=’UK'.

Câu lệnh truy vấn và kết quả trả về như sau:

Image3.png

Toán tử OR

OR kết nối hai hay nhiều điều kiện, và trả về các hàng thỏa mãn một trong số các điều kiện yêu cầu.

Cú pháp:

SELECT ColumnName(s) WHERE ColumnName operator Value OR ColumnName operator Value;

Ngữ cảnh: Truy vấn Tên khách hàng đến từ City = ‘London' hoặc Country=’UK'.

Câu lệnh truy vấn và kết quả trả về như sau:

Image4.png

Kết hợp AND & OR

AND & OR có thể kết hợp với nhau và thường dùng ngoặc đơn () để gộp những biểu thức có điều kiện phức tạp.

Ngữ cảnh: Truy vấn khách hàng đến từ Country = 'Spain' và City = 'Madrid' hoặc City = 'Barcelona'.

Câu lệnh truy vấn và kết quả trả về như sau:

Image5.png

2.2 IN & BETWEEN

Một cách dễ hơn trong việc dùng các điều kiện kép là dùng IN hoặc BETWEEN.

Toán tử IN

IN cho phép chỉ định nhiều giá trị cho các cột trong mệnh đề WHERE.

Cú pháp:

SELECT ColumnName(s) FROM TableName WHERE ColumnName IN (value1,value2,...);

Ngữ cảnh: Truy vấn khách hàng đến từ UK và Mexico.

Câu lệnh truy vấn và kết quả trả về như sau:

Image6.png

Toán tử BETWEEN

BETWEEN được dùng để chọn các giá trị nằm trong một phạm vi giới hạn. Giá trị có thể là số, chữ hoặc ngày tháng.

Cú pháp:

SELECT ColumnName(s) FROM TableName WHERE ColumnName BETWEEN value1 AND value2;

Ngữ cảnh: Chọn các sản phẩm có giá từ $18 đến $40.

Câu lệnh truy vấn và kết quả trả về như sau:

Image7.png

Nếu giá trị là chữ, phải đặt trong dấu nháy đơn, nếu là ngày tháng phải đặt trong dấu #.

Ngược lại, để liệt kê tất cả các dòng có giá trị không thuộc phạm vi giới hạn, dùng NOT BETWEEN. Tương tự, NOT IN sẽ liệt kê ra tất cả các dòng không nằm trong danh sách IN.

Toán tử LIKE

LIKE thường được dùng để so sánh một giá trị với các giá trị tương tự bằng toán tử wildcard. Có một số toán tử wildcard được sử dụng kết hợp với LIKE nhưng ở phần I này chỉ đề cập đến ký hiệu % mà tester hay dùng. Những toán tử wildcard khác sẽ được đề cập ở phần II tiếp theo của chủ đề này.

Cú pháp:

SELECT ColumnName(s) FROM TableName WHERE ColumnName LIKE pattern;

Xem ví dụ cụ thể sau:

  • WHERE ColumnName LIKE 'L%' - Tìm kiếm bất kỳ giá trị nào bắt đầu với L.
  • WHERE ColumnName LIKE '%L%' - Tìm kiếm bất kỳ giá trị nào có L ở bất kỳ vị trí nào.
  • WHERE ColumnName LIKE '%L' - Tìm kiếm bất kỳ giá trị nào mà kết thúc với L.

Tương tự, NOT LIKE sẽ trả về các dòng không khớp với mô tả.

(To be continued .....)


Trên đây là những câu lệnh cơ bản mà trong thực tế tester cần làm quen khi bắt tay vào một dự án yêu cầu kiểm thử CSDL. Phần II sẽ đề cập đến câu lệnh và chức năng phức tạp hơn một ít so với phần I mà tester cần biết để sử dụng.

Nguồn dữ liệu sử dụng làm ví dụ trong bài viết: http://www.w3schools.com/sql/