Câu hỏi phỏng vấn cho lập trình viên SQL: Các câu hỏi thường gặp trong phỏng vấn SQL - Phần 3

Trong SQL, các loại kết nối (joins) nào bạn đã sử dụng và giải thích cách chúng hoạt động?

Trả lời:

  • INNER JOIN: Trả về các hàng có sự khớp dữ liệu từ cả hai bảng.
  • LEFT JOIN: Trả về tất cả các hàng từ bảng bên trái và các hàng khớp từ bảng bên phải.
  • RIGHT JOIN: Trả về tất cả các hàng từ bảng bên phải và các hàng khớp từ bảng bên trái.
  • FULL JOIN: Trả về tất cả các hàng từ cả hai bảng, bao gồm cả các hàng không khớp

 

Giải thích các khái niệm ACID trong SQL và vai trò của chúng trong quản lý giao dịch

Trả lời: ACID là viết tắt của Atomicity, Consistency, Isolation, và Durability. Chúng là các thuộc tính quan trọng trong quản lý giao dịch trong SQL:

  • Atomicity đảm bảo rằng giao dịch được xử lý hoàn toàn hoặc không được xử lý chút nào.
  • Consistency đảm bảo rằng dữ liệu phải tuân thủ các quy tắc, ràng buộc, và điều kiện đã được định nghĩa.
  • Isolation đảm bảo rằng các giao dịch đồng thời không làm ảnh hưởng lẫn nhau.
  • Durability đảm bảo rằng khi giao dịch được hoàn thành, các thay đổi trong cơ sở dữ liệu sẽ được lưu trữ một cách an toàn và bền vững.

 

Sự khác nhau giữa các hàm ROW_NUMBER(), RANK(), và DENSE_RANK() trong SQL

Trả lời: Các hàm ROW_NUMBER(), RANK(), và DENSE_RANK() đều được sử dụng để thực hiện việc đánh số thứ tự cho các hàng trong kết quả truy vấn, nhưng có sự khác nhau như sau:

  • ROW_NUMBER(): Đánh số thứ tự liên tục cho các hàng trong kết quả truy vấn, không quan tâm đến giá trị trùng lặp.
  • RANK(): Đánh số thứ tự cho các hàng trong kết quả truy vấn và bỏ qua giá trị trùng lặp, nhưng có thể bỏ qua số sau nó.
  • DENSE_RANK(): Đánh số thứ tự cho các hàng trong kết quả truy vấn và bỏ qua giá trị trùng lặp, nhưng không bỏ qua số sau nó.

 

Giải thích cách sử dụng cửa sổ (window functions) trong SQL và cung cấp ví dụ

Trả lời: Cửa sổ (window functions) cho phép thực hiện các tính toán trên một tập hợp các hàng có liên quan mà không làm thay đổi kết quả của truy vấn chính.

Ví dụ, chúng ta có thể sử dụng cửa sổ để tính tổng chạy tăng (running total) hoặc lấy hàng đứng đầu (top N rows) của một nhóm kết quả. 

SELECT ProductID, UnitPrice, 
       SUM(UnitPrice) OVER (ORDER BY ProductID) AS RunningTotal
FROM Products;

 

Cách sử dụng các biểu thức chính quy (regular expressions) trong SQL

Trả lời: Các biểu thức chính quy trong SQL cho phép thực hiện các tìm kiếm mẫu văn bản phức tạp. Chúng thường được sử dụng trong câu lệnh LIKE hoặc các hàm như REGEXP_LIKE (trong Oracle) hoặc REGEXP_MATCHES (trong PostgreSQL).

SELECT * FROM Employees WHERE LastName LIKE '%son%';

 

Làm thế nào để sử dụng các chức năng JSON trong SQL để làm việc với dữ liệu JSON

Trả lời: Các chức năng JSON trong SQL cho phép truy xuất, thêm, cập nhật, và xóa dữ liệu từ dạng JSON trong cơ sở dữ liệu.

Ví dụ, chúng ta có thể sử dụng các hàm JSON_VALUE, JSON_QUERY, JSON_MODIFY (trong SQL Server) hoặc các toán tử ->, ->>, #>, #>>, etc. (trong PostgreSQL) để thao tác với các thuộc tính JSON. 

SELECT JSON_VALUE(CustomerInfo, '$.Name') AS CustomerName
FROM Customers;

 

Các kỹ thuật tối ưu hóa truy vấn SQL và tối ưu hóa hiệu suất trong cơ sở dữ liệu

Trả lời: Để tối ưu hóa truy vấn SQL và hiệu suất cơ sở dữ liệu, chúng ta có thể sử dụng các kỹ thuật như:

  • Sử dụng các chỉ mục (indexes) cho các cột được truy vấn thường xuyên.
  • Tối ưu hóa câu lệnh JOIN và WHERE để truy vấn dữ liệu một cách hiệu quả.
  • Sử dụng cửa sổ (window functions) và phân trang (pagination) khi cần thiết.
  • Tránh sử dụng SELECT * để chỉ lấy các cột cần thiết.
  • Sử dụng các câu lệnh truy vấn gợi ý (query hints) trong một số trường hợp.
  • Đảm bảo dữ liệu được chuẩn hóa và không có giá trị trùng lặp.
  • Sử dụng công cụ giám sát hiệu suất để theo dõi và điều chỉnh cơ sở dữ liệu.

 

Giải thích cách sử dụng các phép toán SET (UNION, INTERSECT, EXCEPT) trong SQL

Trả lời: Các phép toán SET (UNION, INTERSECT, EXCEPT) được sử dụng để kết hợp và thao tác trên các tập hợp kết quả của các truy vấn khác nhau.

  • UNION: Kết hợp kết quả của hai hoặc nhiều truy vấn thành một tập dữ liệu duy nhất và loại bỏ các bản ghi trùng lặp.
  • INTERSECT: Trả về các bản ghi mà xuất hiện trong cả hai tập dữ liệu truy vấn.
  • EXCEPT: Trả về các bản ghi mà chỉ xuất hiện trong tập dữ liệu truy vấn đầu tiên và không xuất hiện trong tập dữ liệu truy vấn thứ hai.

 

Cách sử dụng các hàm truy vấn như LEAD, LAG, FIRST_VALUE và LAST_VALUE trong SQL

Trả lời: Các hàm truy vấn như LEAD, LAG, FIRST_VALUE, và LAST_VALUE được sử dụng để truy xuất các giá trị từ các hàng xung quanh trong cùng một kết quả truy vấn.

  • LEAD: Lấy giá trị của một cột từ hàng tiếp theo trong kết quả truy vấn.
  • LAG: Lấy giá trị của một cột từ hàng trước đó trong kết quả truy vấn.
  • FIRST_VALUE: Lấy giá trị đầu tiên của một cột trong kết quả truy vấn.
  • LAST_VALUE: Lấy giá trị cuối cùng của một cột trong kết quả truy vấn.