50 câu Q&A thường gặp về SQL dành cho Tester - Phần 1

Trong bài viết này, chúng ta sẽ liệt kê 28/50 câu hỏi phổ biến nhất thường gặp khi phỏng vấn Testers. Đây là những câu hỏi kèm theo câu trả lời phổ biến và hữu ích nhất sẽ giúp bạn tự tin tham gia một cuộc phỏng vấn.

Q#1. SQL là gì? Trả lời: SQL là viết tắt của cụm từ "Structured Query Language." - ngôn ngữ truy vấn mang tính cấu trúc. Nó được thiết kế để quản lý dữ liệu trong một hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS). SQL là ngôn ngữ cơ sở dữ liệu, được dùng để tạo, xóa, lấy các hàng và sửa đổi các hàng, … Tất cả hệ quản trị cơ sở dữ liệu (Database Management System - DBMS) như MySQL, Oracle, MS Access, Sybase, Informix, Postgres và SQL Server đều sử dụng SQL như là ngôn ngữ cơ sở dữ liệu chuẩn.

Q#2. Làm thế nào để lấy được tất cả các bản ghi trong một bảng xác định? Trả lời: Để lấy được tất cả các bản ghi từ một bảng, chúng ta cần sử dụng câu lệnh dưới đây:

Select * from table_name;

Q#3. Định nghĩa từ khóa "JOIN" và các loại "JOIN" khác nhau? Trả lời: Từ khóa "JOIN" được sử dụng để lấy dữ liệu từ 2 hay nhiều bảng liên quan. Đây là phép kết hợp các dòng dữ liệu từ nhiều bảng lại với nhau. Khi bạn cần truy vấn các cột dữ liệu từ nhiều bảng khác nhau để trả về trong cùng một tập kết quả, bạn cần dùng từ khóa "JOIN". Các loại JOIN :

  • INNER JOIN (Hoặc JOIN)
  • LEFT OUTER JOIN (Hoặc LEFT JOIN)
  • RIGHT OUTER JOIN (Hoặc RIGHT JOIN)
  • FULL OUTER JOIN (Hoặc OUTER JOIN)
  • CROSS JOIN
  • SELF JOIN

Q#4. Dùng cú pháp nào để thêm bản ghi vào một bảng? Trả lời: Để thêm bản ghi vào một bảng, sử dụng câu lệnh INSERT theo cú pháp sau:


INSERT into table_name VALUES (value1, value2..);

Q#5. Bạn thêm một cột vào bảng như thế nào? Trả lời: Để thêm một cột vào trong bảng thì câu lệnh dưới đây được sử dụng:


ALTER TABLE table_name ADD (column_name);

Q#6. Định nghĩa câu lệnh SQL Delete. Trả lời: Câu lệnh "DELETE" được sử dụng để xóa một dòng hoặc nhiều dòng từ một bảng dựa trên những điều kiện do người dùng chỉ định. Cú pháp cơ bản như sau:

DELETE FROM table_name

WHERE <Condition>

Q#7. "COMMIT" trong SQL là gì? Trả lời: "COMMIT" lưu tất cả những thay đổi được thực hiện trong một transaction. Các thay đổi này được tạo bởi DML (ngôn ngữ thao tác dữ liệu -Data Manipulation Language). DML cho phép thực thi các câu truy vấn, bao gồm cú pháp để cập nhật – sửa đổi, chèn thêm và xoá các mẩu tin. Trong SQL một transaction có đoạn code ở dạng đơn giản như sau:

BEGIN TRAN
   -- Lệnh 1
   -- Lệnh 2
   -- ...
COMMIT

Bạn mở transaction bằng lệnh BEGIN TRAN và kết thúc bằng lệnh COMMIT – sau lệnh này những cập nhật dữ liệu sẽ được xác nhận vào trong database, transaction được đóng lại và các khóa (lock) trên các bảng được cập nhật được thả ra.

Q#8. Primary key là gì? Trả lời: Một PRIMARY KEY- Khóa chính là một trường trong một bảng mà nhận diện một cách duy nhất mỗi hàng/bản ghi trong một bảng dữ liệu. Các PRIMARY KEY phải chứa các giá trị duy nhất, không được sử dụng lại. Một cột là PRIMARY KEY thì không được phép có giá trị NULL. Một bảng chỉ cho phép tối đa một PRIMARY KEY, bao gồm một trường đơn hay nhiều trường. Mỗi bảng đều cần có khóa chính.

Q#9. Foreign keys là gì? Trả lời: FOREIGN KEY - Khóa ngoại là một trường trong bảng cơ sở dữ liệu, đó là khóa chính trong một bảng khác được thêm vào tạo ra sự liên quan giữa hai bảng. Trong bảng, giá trị của FOREIGN KEY có thể chấp nhận giá trị NULL, cũng như các giá trị trùng nhau.

Q#10. CHECK Constraint - Ràng buộc CHECK là gì? Trả lời: Một ràng buộc CHECK được sử dụng để giới hạn các giá trị hoặc kiểu của dữ liệu có thể nhập và lưu trữ trong một trường của bản ghi. Nếu bản ghi không đáp ứng được điều kiện này, thì sẽ không được lưu trữ vào trong bảng.

Q#11. Một bảng có thể có nhiều hơn một khóa ngoại được không? Trả lời: Có, một bảng có thể có nhiều khóa ngoại và chỉ có một khóa chính.

Q#12. Trường BOOLEAN có thể nhận các giá trị nào. Trả lời: Giá trị của trường BOOLEAN có thể nhận 1 trong 2 giá trị sau: -1(TRUE) và 0(FALSE).

Q#13. STORED PROCEDURE là gì? Trả lời: STORED PROCEDURE là một tập hợp các câu lệnh SQL dùng để thực thi một nhiệm vụ nhất định. Nó hoạt động giống như một hàm trong các ngôn ngữ lập trình khác. STORED PROCEDURE là một khái niệm khá phổ biến và được hầu hết các hệ quản trị cơ sở dữ liệu (DBMS) hỗ trợ, tuy nhiên không phải tất cả đều hỗ trợ STORED PROCEDURE.

Q#14. IDENTITY trong SQL là gì? Trả lời: Một trường IDENTITY trong SQL tự động sinh ra các giá trị số tự tăng. Chúng ta có thể định nghĩa giá trị bắt đầu và giá trị gia tăng của cột IDENTITY.

Q#15. NORMALIZATION - Chuẩn hóa dữ liệu là gì? Trả lời: Quá trình thiết kế bảng để giảm thiểu sự dư thừa số liệu, loại bỏ các thay đổi dữ liệu dị thường (update anomaly, insertion anomaly, deletion anomaly) được gọi là quá trình chuẩn hóa dữ liệu. Để thực hiện quá trình này, chúng ta cần phải chia một cơ sở dữ liệu thành hai hay nhiều bảng và xác định các mối quan hệ giữa chúng.

Q#16. TRIGGER là gì? Trả lời: TRIGGER được hiểu đơn giản là một thủ tục (một tập các câu lệnh SQL được lưu trữ trong CSDL) được thực thi từ phía máy chủ cơ sở dữ liệu (CSDL) khi có một sự kiện xảy ra như Update, Insert hay Delete. TRIGGER thường dùng để kiểm ra các ràng buộc toàn vẹn trên CSDL, và chúng được thực thi một cách tự động mà không cần sự can thiệp bằng các thao tác thủ công như kiểm tra dữ liệu, đồng bộ hóa dữ liệu,…

Q#17. Làm thế nào để lấy ra được các dòng ngẫu nhiên từ một bảng? Trả lời: Sử dụng mệnh đề SAMPLE chúng ta có thể lấy được các dòng ngẫu nhiên. Ví dụ:


SELECT * FROM table_name SAMPLE(10);

Q#18. SQL Server chạy cổng TCP / IP nào? Trả lời: SQL Server mặc định chạy trên cổng 1433.

Q#19. Viết một câu lệnh SQL SELECT mà trả về mỗi bản ghi chỉ một lần từ một bảng? Trả lời: Để lấy mỗi bản ghi chỉ một lần, chúng ta cần sử dụng từ khóa DISTINCT. Từ khóa DISTINCT trong SQL được sử dụng kết hợp với lệnh SELECT để loại tất cả các bản sao của bản ghi và chỉ lấy các bản ghi duy nhất. Có thể có trường hợp xuất hiện nhiều bản sao của bản ghi trong một bảng. Trong khi lấy các bản ghi này, chỉ lấy bản ghi duy nhất thay vì lấy nhiều bản sao của bản ghi đó.


SELECT DISTINCT name FROM table_name;

Q#20. Giải thích DML và DDL? Trả lời:

  • DML là viết tắt của "Data Manipulation Language" - Ngôn ngữ thao tác dữ liệu: cho phép thực thi các câu truy vấn, bao gồm cú pháp để cập nhật – sửa đổi, chèn thêm và xoá các mẩu tin. INSERT, UPDATE và DELETE là các câu lệnh DML.

  • DDL viết tắt cho "Data Definition Language" - Ngôn ngữ định nghĩa dữ liệu: dùng để định nghĩa cấu trúc của cơ sở dữ liệu, bao gồm định nghĩa các hàng, các cột, các bảng dữ liệu, các chỉ số và một số thuộc tính khác liên quan đến cơ sở dữ liệu như vị trí của file và là thành phần chính trong các hệ quản lý dữ liệu và có sự khác biệt rất nhiều giữa các ngôn ngữ truy vấn trên các hệ khác nhau. CREATE, ALTER, DROP, RENAME là các câu lệnh DDL.

Q#21. Chúng ta có thể đổi tên một cột trong đầu ra của SQL query được không? Trả lời: Có. Có thể dùng câu lệnh sau để làm việc này:


SELECT column_name AS new_name FROM table_name;

Q#22. Thứ tự của các mệnh đề trong câu lệnh SQL SELECT như thế nào? Trả lời: Thứ tự các mệnh đề SQL SELECT là: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY. Trong đó chỉ có điều khoản SELECT và FROM là bắt buộc phải có, các mệnh đề khác có thể có hoặc không.

Q#23. Giả sử một bảng Student có hai cột, Name and Marks. Làm thế nào để có được tên và điểm của ba sinh viên top đầu Trả lời:


SELECT Name, Marks FROM Student s1 where 3 <= (SELECT COUNT(*) FROM Students s2 WHERE s1.marks = s2.marks)

Q#24. SQL comments là gì? Trả lời: Đôi khi bạn muốn ghi chú thích vào câu truy vấn SQL của bạn, để làm cho câu truy vấn ấy trở nên rõ ràng và dễ hiểu hơn, khi ấy bạn sử dụng SQL comment.

Khi câu truy vấn được thực thi thì trình biên dịch sẽ tự động bỏ qua những dòng có comment. Vì thế chương trình sẽ không có lỗi.

Có 2 cách để tạo SQL comments:

  • Sử dụng 2 dấu gạch ngang liên tiếp (–): đây là comment trên một dòng, tức chỉ có hiệu lực 1 trên dòng mà bạn đặt comment này, được tính từ sau 2 dấu gạch cho đến cuối dòng. Khi bạn đặt dấu comment vào dòng nào, thì ngay lập tức dòng đó sẽ bị chuyển thành màu xanh lá (green), đó là dấu hiệu để nhận biết dòng lệnh của bạn đã bị comment (và trình biên dịch sẽ bỏ qua dòng này, tính từ sau 2 dấu gạch)

-- text_of_comment  
  • Sử dụng cú pháp /*…*/: đây là comment dành cho một khối lệnh (có thể nhiều hơn một dòng). Trong dấu … là phần bạn muốn comment. Cũng tương tự như 2 dấu gạch, những dòng comment cũng sẽ chuyển sang màu xanh lá và trình biên dịch tự động bỏ qua trong lúc thực thi.
 /*
 text_of_comment 1
 text_of_comment 2
 text_of_comment 3
 ...
*/

Q#25. Sự khác nhau giữa các câu lệnh TRUNCATE, DELETE và DROP? Trả lời:

  • Lệnh DELETE có tác dụng xóa một số hoặc tất cả các hàng từ một bảng dựa trên những điều kiện được chỉ định. Các bản ghi này cũng có thể được phục hồi lại (Roll back).

  • Lệnh TRUNCATE xóa toàn bộ các bản ghỉ từ bảng bằng cách phân chia lại bộ nhớ các trang. Xử lý này không thể được phục hồi.

  • Lệnh DROP xóa hoàn toàn một bảng từ cơ sở dữ liệu.

Q#26. Các thuộc tính của một giao dịch là gì? Trả lời: Nói chung các thuộc tính này được gọi là các thuộc tính ACID. Chúng bao gồm:

  • Atomicity - Tính nguyên tử
  • Consistency - Tính nhất quán
  • Isolation - Cô lập
  • Durability - Độ bền

Q#27. ROWID được hiểu là gì? Trả lời: Đó là một cột giả trong bảng CSDL, bao gồm 18 ký tự cho biết địa chỉ của mỗi dòng trong Cơ sở dữ liệu: Thông thường, ROWID xác định mỗi một row riêng biệt trong table (trừ trường hợp cluster table), ghi lại cách thức tổ chức dữ liệu và là cách truy cập dữ liệu nhanh nhất có thể. ROWID gồm block.row.file, trong đó:

  • block : chuỗi hệ hexa cho biết block chứa row
  • row : chuỗi hệ hexa cho biết row trong block
  • file : chuỗi hệ hexa cho biết database file chứa block
Ví dụ: 
0000000F.0000.0002 ==> Được hiểu là row đầu tiên trong block 15 của data file thứ hai.

Những câu hỏi tiếp theo sẽ được trình bày trong một bài viết khác. Chúc các bạn học SQL thật vui ^^

Bài viết tham khảo từ nguồn: http://www.softwaretestinghelp.com/50-popular-sql-interview-questions-for-testers/