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

Tiếp nối phần 1 chúng ta cùng xem xét tiếp những câu Q&A còn lại trong danh sách 50 câu hỏi về SQL phổ biến nhất 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#28. Định nghĩa UNION, MINUS, UNION ALL, INTERSECT ? Trả lời: 1. UNION - UNION ALL Nếu bạn cần viết hai hay nhiều câu truy vấn SELECT khác nhau nhưng bạn muốn nó trả về một danh sách kết quả duy nhất thì bạn phải sử dụng toán tử UNION. Mệnh đề/Toán tử UNION kết hợp kết quả của các câu lệnh SELECT mà không trả về bất cứ bản sao nào của bản ghi (mỗi bản ghi là duy nhất) Để sử dụng UNION, cần tuân thủ nguyên tắc:

  • Số lượng colums trong tất cả các lệnh SELECT phải bằng nhau
  • Mỗi column tương ứng vị trí phải có cùng kiểu dữ liệu và độ dài Cú pháp cơ bản của mệnh đề UNION trong SQL như sau:
SELECT cot1 [, cot2 ]
FROM bang1 [, bang2 ]
[WHERE dieu_kien]

UNION/UNION ALL

SELECT cot1 [, cot2 ]
FROM bang1 [, bang2 ]
[WHERE dieu_kien]

Theo mặc định thì UNION sẽ loại bỏ các kết quả trùng lặp của các câu SELECT nên chúng ta có các lựa chọn sau:

  • Nếu chọn UNION DISTINCT thì nó sẽ loại bỏ các kết quả trùng.
  • Nếu chọn UNION ALL thì nó giữ lại các kết quả trùng.
  • Nếu không chọn gì thì mặc định nó sẽ lấy UNION DISTINCT

2. MINUS Toán tử MINUS chỉ tồn tại trong Hệ quản trị dữ liệu Oracle, trong SQL nó tương đương với toán tử EXCEPT. Toán tử này được sử dụng để kết hợp 2 câu lệnh SELECT, nó trả về tất cả các bản ghi chỉ thuộc vào bảng của câu truy vấn SELECT đầu tiên, những bản ghi giao nhau và những bản ghi của câu truy vấn SELECT thứ 2 thì không được lấy vào kết quả. Các qui tắc áp dụng cho toán tử UNION cũng áp dụng cho toán tử EXCEPT. MySQL không hỗ trợ toán tử EXCEPT.

Cú pháp cơ bản của EXCEPT trong SQL như sau:

SELECT cot1 [, cot2 ]
FROM bang1 [, bang2 ]
[WHERE dieu_kien]

MINUS/EXCEPT

SELECT cot1 [, cot2 ]
FROM bang1 [, bang2 ]
[WHERE dieu_kien]

3. INTERSECT Mệnh đề/Toán tử INTERSECT trong SQL được sử dụng để kết hợp hai lệnh SELECT, lấy ra nhữngbản ghi nào mà nó hiện diện ở trong cả 2 bảng (có trong bảng này và cũng có trong bảng kia) Các qui tắc áp dụng cho toán tử UNION cũng áp dụng cho toán tử INTERSECT. Trong MySQL không hỗ trợ toán tử INTERSECT. Cú pháp cơ bản của INTERSECT trong SQL như sau:

SELECT cot1 [, cot2 ]
FROM bang1 [, bang2 ]
[WHERE dieu_kien]

INTERSECT

SELECT cot1 [, cot2 ]
FROM bang1 [, bang2 ]
[WHERE dieu_kien]

Q#29. Transaction là gì? Trả lời: Transaction là đơn vị hoặc dãy công việc (operation) được thực hiện theo một thứ tự logic và hợp lý, có thể được thao tác bởi người dùng hoặc bởi một Database program. Đây là một tiến trình xử lý để thực hiện một chức năng theo ý muốn của người dùng, được xác định điểm đầu và điểm cuối, được chia nhỏ thành các operation độc lập, tiến trình được thực thi một cách tuần tự các operation đó, chúng chỉ có thể cùng nhau thành công, hoặc cùng nhau thất bại. Nếu việc thực thi một operation nào đó bị fail (hỏng) đồng nghĩa với việc dữ liệu phải rollback (trở lại) trạng thái ban đầu. Ví dụ, nếu bạn đang tạo một bản ghi hoặc cập nhật một bản ghi hoặc xóa một bản ghi từ một bảng, thì bạn đang thực hiện transaction trên bảng đó. Thực tế, bạn sẽ tập hợp nhiều truy vấn SQL vào trong một nhóm và sẽ thực thi tất cả truy vấn này cùng với nhau như là một phần của một transaction. Cú pháp khai báo một transaction:

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

Q#30. UNIQUE và PRIMARY KEY constraints khác nhau như thế nào? Trả lời: Cả 2 ràng buộc đều để ngăn chặn việc tồn tại những giá trị trùng nhau trong cùng một cột được quy định. Tuy nhiên có sự khác nhau như dưới đây: PRIMARY KEY:

  • Trong 1 bảng chỉ có duy nhất một và chỉ một khóa chính
  • Không thể chấp nhận giá trị NULL

UNIQUE:

  • Trong 1 bảng có thể không có, hoặc có (một hoặc nhiều) trường UNIQUE.
  • Có thể có giá trị NULL

Q#31. Composite primary key là gì? Trả lời:
Khi PRIMARY KEY không phải chỉ có 1 trường mà bao gồm nhiều trường của bảng thì được gọi là một Composite Pimary Key.

Q#32. Index là gì ? Trả lời: Index (Chỉ mục) là bảng tra cứu đặc biệt mà Database Search Engine có thể sử dụng để tăng nhanh thời gian và hiệu suất thực hiện các truy vấn. Index có thể được tạo ra trên một hoặc nhiều cột của một bảng. Các Index cũng có thể là duy nhất, tương tự như UNIQUE. Hiểu đơn giản, một Index là một con trỏ tới dữ liệu trong một bảng. Nó tương tự như chỉ mục trong Mục lục của cuốn sách. Một chỉ mục giúp tăng tốc các truy vấn SELECT và các mệnh đề WHERE, nhưng nó làm chậm việc dữ liệu nhập vào, với các lệnh UPDATE và INSERT. Các chỉ mục có thể được tạo hoặc xóa mà không ảnh hưởng tới dữ liệu. Cú pháp:

CREATE INDEX ten_chi_muc
    ON ten_bang ( cot1, cot2.....);

Q#33. Subquery là gì? Trả lời: Truy vấn con (còn được gọi truy vấn phụ hay truy vấn lồng nhau) là một truy vấn bên trong truy vấn SQL khác và được nhúng bên trong mệnh đề WHERE. Một truy vấn con được sử dụng để trả về dữ liệu mà sẽ được sử dụng trong truy vấn chính như là một điều kiện để thu hẹp dữ liệu được thu nhận. Các truy vấn con có thể được sử dụng với các lệnh SELECT, INSERT, UPDATE VÀ DELETE.

Cú pháp:

SELECT ten_cot [, ten_cot ]
FROM   bang1 [, bang2 ]
WHERE  ten_cot TOAN_TU
      (SELECT ten_cot [, ten_cot ]
      FROM bang1 [, bang2 ]
      [WHERE])

TOAN_TU là các toán tử so sánh như: =, >, <, >=, <=, IN, BETWEEN hoặc LIKE.

Q#34. Tối ưu hóa truy vấn là gì? Trả lời: Tối ưu hóa truy vấn là tiến trình lựa chọn kế hoạch thực thi câu truy vấn một cách hiệu quả nhất. Sao cho: – Tốn ít tài nguyên nhất. – Hồi đáp nhanh nhất. (thời gian thực hiện là ngắn nhất)

Q#35. Collation là gì? Trả lời: Collation là một tập hợp các quy tắc định nghĩa về việc data sẽ được lưu trữ, sắp xếp hay so sánh như thế nào, có phân biệt hoa thường hay không. Một character set là một tập hợp các biểu tượng và mã hóa. Một collation là một bộ quy tắc để so sánh các ký tự trong một bộ ký tự.

Q#36. Referential Integrity là gì? Trả lời: Referential Integrity (Toàn vẹn tham chiếu) là tập hợp các quy tắc để hạn chế các giá trị của một hoặc nhiều cột của bảng dựa trên các giá trị của khóa chính hoặc khóa duy nhất của bảng tham chiếu.

  • Thuộc tính được tham chiếu đến (Referenced attribute) phải là PRIMARY KEY hoặc UNIQUE
  • Thuộc tính tham chiếu (Referencing attribute) được gọi là FOREIGN KEY - Khoá ngoài

Q#37. Hàm CASE là gì? Trả lời: Trường hợp tạo điều kiện cho loại if-then-else của logic trong SQL. Nó đánh giá một danh sách các điều kiện và trả về một trong nhiều biểu thức kết quả tốt. Hàm CASE kiểm định giá trị dựa trên danh sách điều kiện đưa ra, sau đó trả về một hoặc nhiều kết quả thỏa mãn các điều kiện. CASE có 2 định dạng:

  • Chức năng CASE đơn giản hay còn gọi là Simple CASE

  • Chức năng CASE tìm kiếm hay còn gọi là Searched CASE Trong đó: Simple CASE là so sánh một biểu thức với một bộ các biểu thức đơn giản để xác định kết quả. Searched CASE là đánh giá một bộ các biểu thức Boolean để xác định kết quả. Cả 2 định dạng trên đều hỗ trợ đối số ELSE (nhưng không bắt buộc).

  • Cú pháp dạng Simple CASE:

CASE biểu_thức_đầu_vào
 WHEN biểu_thức_1 THEN biểu_thức_kết_quả_1
 WHEN biểu_thức_2 THEN biểu_thức_kết_quả_2
 …
 WHEN biểu_thức_n THEN biểu_thức_kết_quả_n
 ELSE biểu_thức_kết_quả_khác
END

+Cú pháp dạng Searched CASE:

CASE
 WHEN biểu_thức_điều_kiện_1 THEN biểu_thức_kết_quả_1
 WHEN biểu_thức_điều_kiện_2 THEN biểu_thức_kết_quả_2
 …
 WHEN biểu_thức_điều_kiện_n THEN biểu_thức_kết_quả_n
 ELSE biểu_thức_kết_quả_khác
END

Q#38. Xác định một bảng tạm? Trả lời: Một bảng tạm là một cấu trúc lưu trữ tạm thời để lưu trữ dữ liệu tạm thời.

Q#39. Làm thế nào chúng ta có thể tránh việc lặp lại các bản ghi trong truy vấn? Trả lời: Bằng cách sử dụng từ khóa DISTINCT ta có thể tránh được việc lặp lại các bản ghi trong câu truy vấn.

Q#40. Giải thích sự khác biệt giữa Rename và Alias? Trả lời: Rename là đặt một cái tên thường xuyên cho một bảng hoặc một cột trong khi Alias là một cái tên tạm thời cho một bảng hoặc cột.

Q#41. VIEW là gì? Trả lời: Một VIEW là một bảng ảo mà chứa dữ liệu từ một hoặc nhiều bảng, nó không gì khác ngoài môt lệnh SQL mà được lưu giữ trong Database với một tên liên kết. Một VIEW thực sự là một thành phần của một bảng trong form của một truy vấn SQL đã được định nghĩa trước. Một VIEW có thể chứa tất cả các hàng của một bảng hoặc các hàng đã được chọn từ một bảng. Các VIEW hạn chế truy cập dữ liệu của bảng bằng cách chỉ chọn các giá trị được yêu cầu và thực hiện các truy vấn phức tạp một cách dễ dàng.

Q#42. Những ưu điểm của VIEW? Trả lời: VIEW có các ưu điểm sau:

  • Bảo mật dữ liệu :Người sử dụng được cấp phát quyền trên các VIEW với những phần dữ liệu mà người sử dụng được phép. Điều này hạn chế được phần nào việc người sử dụng truy cập trực tiếp dữ liệu.
  • Đơn giản hoá các thao tác truy vấn dữ liệu: Một VIEW đóng vai trò như là một đối tượng tập hợp dữ liệu từ nhiều bảng khác nhau vào trong một “bảng”. Nhờ vào đó, người sử dụng có thể thực hiện các yêu cầu truy vấn dữ liệu một cách đơn giản từ VIEW thay vì phải đưa ra những câu truy vấn phức tạp.
  • Tập trung và đơn giản hoá dữ liệu :Thông qua VIEW ta có thể cung cấp cho người sử dụng những cấu trúc đơn giản, dễ hiểu hơn về dữ liệu trong cơ sở dữ liệu đồng thời giúp cho người sử dụng tập trung hơn trên những phần dữ liệu cần thiết.
  • Độc lập dữ liệu : Một VIEW có thể cho phép người sử dụng có được cái nhìn về dữ liệu độc lập với cấu trúc của các bảng trong cơ sở dữ liệu cho dù các bảng cơ sở có bị thay đổi phần nào về cấu trúc.

Q#43. Liệt kê các loại đặc quyền khác nhau mà người dùng có thể cấp cho một người dùng khác? Trả lời:
SELECT, CONNECT, RESOURCES.

Q#44. Schema là gì? Trả lời: Schema là một tập hợp các đối tượng database của một User. Đầy là khái niệm mới có trong Sql server 2005 trở lên, chema mặc định của các object trong database là dbo. Có thể hiểu schema là một namespace đối với các đối tượng database Một schema định nghĩa một ranh giới mà trong đó tất cả các tên là duy nhất Bên trong một database, tên của schema là duy nhất, luôn có tên với đường đầy đủ dạng server.database.schema.object

Q#45. Table là gì? Trả lời: Một table (bảng) là đơn vị cơ bản của lưu trữ dữ liệu trong hệ quản trị cơ sở dữ liệu. Được dùng để lưu trữ các thông tin của một đối tượng trong thực tế − Gồm có các dòng và các cột − Bảng trong CSDL thường có khoá chính (primary key) − Các bảng thường liên hệ với nhau bằng các mối quan hệ

Q#46. VIEW có chứa dữ liệu hay không? Trả lời: Không, VIEW là một cấu trúc ảo, vì vậy nó không chứa dữ liệu, nó chỉ tập hợp dữ liệu từ các bảng khác nhau.

Q#47. Một VIEW có thể dựa trên 1 VIEW khác được không? Trả lời: Được, một VIEW có thể được tạo ra dựa trên một VIEW khác đã có.

Q#48. Sự khác nhau giữa mệnh đề HAVING và WHERE? Trả lời: Cả hai đều được dùng để chỉ định một điều kiện tìm kiếm nhưng mệnh đề HAVING chỉ được sử dụng với câu lệnh SELECT và thường được sử dụng với mệnh đề GROUP BY. Trong cùng một câu lệnh:

  • WHERE là câu lệnh lọc bớt dữ liệu trước khi nhóm (Group)
  • HAVING là câu lệnh lọc bớt dữ liệu sau khi đã nhóm (Group) Mệnh đề HAVING trong SQL cho bạn khả năng để xác định các điều kiện để lọc nhóm kết quả nào sẽ xuất hiện trong kết quả cuối cùng. Mệnh đề WHERE đặt các điều kiện trên các cột đã lựa chọn, trong khi mệnh đề HAVING đặt các điều kiện trên các nhóm đã được tạo bởi mệnh đề GROUP BY. Mệnh đề HAVING phải theo sau mệnh đề GROUP By trong một truy vấn và cũng phải đặt trước mệnh đề ORDER BY nếu được sử dụng. Dưới đây là cú pháp của lệnh SELECT với mệnh đề HAVING. Sau đây là vị trí của mệnh đề HAVING trong một truy vấn SQL.
SELECT cot1, cot2
FROM bang1, bang2
WHERE [ cac_dieu_kien ]
GROUP BY cot1, cot2
HAVING [ cac_dieu_kien ]
ORDER BY cot1, cot2

Q#49. Sự khác nhau giữa bảng Local và Global temporary table? Trả lời: Bảng tạm (Temporary Table) là một tính năng tuyệt vời giúp bạn lưu giữ và xử lý các kết quả trung gian bằng việc sử dụng các khả năng như chọn, cập nhật, kết hợp giống như bạn có thể sử dụng với các bảng điển hình trong SQL Server. Bảng tạm (Temporary Table) có thể rất hữu ích trong một số trường hợp khi bạn muốn lưu giữ dữ liệu tạm thời. Điều quan trọng nhất bạn cần nên biết về Bảng tạm (Temporary Table) là chúng có thể bị xóa khi Client Session hiện tại kết thúc. Có 2 loại bảng tạm như sau:

  • Local temporary table là bảng tạm được tạo ra và tồn tại trong 1 kết nối. Khi kết thúc kết nối thì bảng tạm này sẽ tự động được xóa. Tên của bảng tạm kiểu Local được bắt đầu bằng ký tử #.
  • Global temporary table là bảng tạm có phạm vi ảnh hưởng trong tất cả các kết nối và nó chỉ tự động được xóa đi khi tất cả các kết nối đã được ngắt. Tên bảng tạm kiểu Global được bắt đầu bằng ##.

Q#50. CTE là gì? Trả lời: Một CTE (Common Table Expression) có thể được xem như một bảng chứa dữ liệu tạm thời từ câu lệnh được định nghĩa trong phạm vi của nó. CTE tương tự như một bảng dẫn xuất (derived table) ở chỗ nó không được lưu trữ như một đối tượng và chỉ kéo dài trong suốt thời gian của câu truy vấn. Không giống như bảng dẫn xuất, CTE có thể tự tham chiếu tới bản thân của nó và có thể tham chiếu nhiều lần trong một câu truy vấn.

Mục đích của CTE:

  • Tạo truy vấn đệ quy (recursive query).
  • Thay thế View trong một số trường hợp.
  • Cho phép nhóm một cột từ truy vấn con.
  • Tham chiếu tới bảng kết quả nhiều lần trong cùng một lệnh.

Ưu điểm của CTE: CTE có nhiều ưu điểm như khả năng đọc dữ liệu được cải thiện và dễ dàng bảo trì các truy vấn phức tạp. Các truy vấn có thể được phân thành các khối nhỏ, đơn giản. Những khối này được sử dụng để xây dựng các CTE phức tạp hơn cho đến khi tập hợp kết quả cuối cùng được tạo ra. CTE có thể được định nghĩa trong function, store procedure, view, trigger.

KẾT LUẬN: SQL là một trong những kiến thức mà Tester cần nắm được để thực hiện được công việc test thật tốt. Hy vọng với sự tổng hợp này các bạn sẽ có thêm nhiều kiến thức trước khi tham gia một cuộc phỏng vấn vào vị trí Tester.

Chúc các bạn học vui !!!

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