Để viết một câu truy vấn dễ dàng hơn

Để viết câu truy vấn dễ dàng hơn

Dù đã nắm được các kiến thức cơ bản về ngôn ngữ SQL. Nhưng các bạn vẫn gặp rất nhiều khó khăn trong quá trình xây dựng câu truy vấn của mình phải không?

Điều kiện cần để câu truy vấn trở nên đơn giản

Để dễ dàng làm việc với CSDL nói chung. Chúng ta cần đáp ứng một số điều kiện dưới đây. Nếu bạn cảm thấy mình còn một chút bối rối. Hãy ôn tập lại chúng.

Kiến thức toán

Toán là nền tảng của phần lớn các lĩnh vực CNTT. Do đó, chúng ta hãy cố vượt qua rào cản này để thành công hơn trên con đường của chúng ta. Với CSDL chúng ta cũng không cần quá nhiều toán. Nhưng các bạn cần nắm vững 2 chủ đề:

  • Mệnh đề và các phép toán logic
  • Tập hợp và các phép toán trên tập hợp

Chúng ta cũng không cần đi quá sâu và 2 chủ đề này. Nếu các bạn còn chút phân vân. Chúng ta có thể ôn tập toán một xíu.

Các cú pháp cơ bản

Chắc chắn rồi, các cú pháp cơ bản là điều kiện tiên quyết. Để bạn có thể sử dụng thuần thục SQL cũng như tìm ra các giải pháp tốt nhất cho bài toán của mình.

Thứ tự thực hiện trong câu truy vấn

Độ ưu tiên hay thứ tự thực hiện các mệnh đề, các toán tử trong câu truy vấn cũng là một yếu tố rất quan trọng. Ví dụ, trong một biểu thức 3 x (2 + 5). Chúng ta có thể làm tốt các phép tính nhưng không rõ về thứ tự các phép toán. Kết quả chúng ta nhận được cũng sẽ bị sai lệch.

Cấu trúc của CSDL

Đây chính là yếu tố cực kỳ quan trọng. Trước khi bắt đầu với bất kỳ một CSDL nào. Chúng ta cũng cần phải tìm hiểu về nó. Tối thiểu chúng ta phải nắm được một số thông tin cơ bản như:

  • Mục đích chính của CSDL
  • Số lượng bảng
  • Cấu trúc của từng bảng
  • Mối liên hệ giữa các bảng

Phương pháp xây dựng câu truy vấn

Cũng như giải một bài toán. Chúng ta có rất nhiều phương pháp để đi đến đáp án cuối cùng. Đây là một phương pháp khá cơ bản mình gợi ý cho các bạn. Tuy nhiên, bạn có thể xây dựng một phương pháp khác tốt hơn cho riêng mình.

Ý tưởng của phương pháp này dựa trên thứ tự thực hiện các mệnh đề. Mình tin rằng có nhiều bạn vẫn lầm tưởng. Câu truy vấn của chúng ta được thực hiện từ trên xuống. Nghĩa là mệnh đề nào viết trước thì thực thi trước. Việc lầm tưởng này làm các bạn khó hình dung và xây dựng câu truy vấn của mình.

Dưới đây mới thực sự là thứ tự các mệnh đề được thực hiện trong một câu truy vấn.

  1. FROM  (JOIN)
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. DISTINCT
  7. LIMIT / OFFSET

Dựa trên thứ tự này. Phương pháp xây dựng câu truy vấn của chúng ta như sau:

  1. Tìm các nguồn (bảng) chứa đầy đủ thông tin chúng ta cần.
  2. Xác định điều kiện để trích xuất dữ liệu.
  3. Thực hiện các thao tác gom nhóm, các hàm tiện ích lên dữ liệu để xử lý dữ liệu.
  4. Rút trích dữ liệu cần thiết.
  5. Xử lý dữ liệu trả về.

Một vài ví dụ

Trong phần ví dụ này, mình cũng sử dụng CSDL Chinook. Nếu bạn chưa biết về nó, hãy xem lại bài viết CSDL mẫu.

Liệt kê tên của tất cả nhân viên

Bước 1: Xác định nguồn dữ liệu. Dựa trên yêu cầu và kiến thức về CSDL. Mình xác định toàn bộ thông tin chúng ta cần chỉ nằm trên bảng ‘Employee’. Lúc này, để đơn giản, chúng ta sẽ tạm thời bỏ qua không quan tâm đến mệnh đề SELECT. Nhưng tránh lỗi không sử dụng được các tiện ích trong SSMS. Mình sẽ để tạm SELECT *. Câu truy vấn của chúng ta lúc này:

Bước 2: Trong yêu cầu của chúng ta không cần lọc, gom nhóm hay thao tác gì hết. Chúng ta sẽ quay lại bước rút trích dữ liệu. Lúc này, câu truy vấn được cập nhật:

Thử execute, kết quả thu về đã đúng như yêu cầu của đề bài.

Kết quả truy vấn

Tuy nhiên, mình cảm thấy chưa hài lòng lắm. Mình sẽ thực hiện bước cuối cùng. Xử dụng hàm tiện ích để xử lý dữ liệu đầu ra:

Bước 3: Xử lý dữ liệu trả về.

Lúc này, dữ liệu trả về của mình đã được cập nhật và có vẻ cấu trúc đã đẹp hơn.

Kết quả truy vấn

Liệt kê tất cả các track thuộc genre ‘Rock’

Bước 1: Xác định nguồn dữ liệu. Để lấy đủ thông tin, chúng ta sẽ cần truy vấn tới 2 bảng Track và Genre.

Thực thi thử và phân tích kết quả. Chúng ta đã thấy tên thể loại đã xuất hiện. Vậy chúng ta đã đi đúng hướng. Tiếp tục thực hiện bước 2.

Kết quả câu truy vấn

Bước 2: Thêm điều kiện để lọc dữ liệu.

Bước 3: Rút trích dữ liệu. Mình sẽ rút ra thông tin TrackId, Name (Track), Composer và Name (Genre).

Sau khi thực thi thử. Mình thấy dữ liệu trả về đã rất ổn. Tuy nhiên, còn lộn xộn một ít. Do đó, mình sẽ sử dụng thêm mệnh đề ORDER BY để sắp xếp lại.

Bước 4: Xử lý kết quả trả về

Và đây là một phần kết quả trả về của chúng ta.

Kết quả trả về

Liệt kê các composer có trên 5 tracks

Bước 1: Dữ liệu nằm toàn bộ trên bảng Track.

Bước 2: Khi thực hiện thử câu truy vấn bước 1. Mình thấy có rất nhiều dòng dữ liệu có composer với giá trị NULL. Do đó, mình sẽ thêm điều kiệu loại bỏ những dòng dữ liệu này.

Bước 3: Trong trường hợp này, mình cần thực hiện gom nhóm và đếm dữ liệu. Do khi sử dụng mệnh đề GROUP BY, sẽ có một số điều kiện ràng buộc nên mình thay đổi một chút ở mệnh đề SELECT.

Bước 4: Rút trích dữ liệu.

Sau bước này, chúng ta đã nhận được tên Composer và số lượng track của họ. Tuy nhiên, đề yêu cầu chỉ hiển thị composer có tracks > 5. Do đó, chúng ta thực hiện thêm bước 5.

Bước 5: Xử lý dữ liệu trả về bằng mệnh đề HAVING. Với mệnh đề HAVING, chúng ta sẽ giới hạn được kết quả của mệnh đề GROUP BY.

Và đây là kết quả cuối cùng của chúng ta. Lúc này, các bạn có thể làm thêm bước 5′ thêm mệnh đề ORDER BY hay TOP, DISTINCT để tiếp tục xử lý dữ liệu.

Kết quả trả về