Truy vấn dữ liệu – Câu truy vấn đơn giản

Truy vấn dữ liệu - Câu truy vấn đơn giản
Truy vấn dữ liệu - Câu truy vấn đơn giản

Truy vấn dữ liệu là thao tác rút trích dữ liệu cần thiết từ Cơ Sở Dữ Liệu. Đây là thao tác quan trọng và có tần suất thực hiện rất lớn. Để đảm bảo dữ liệu đầy đủ và chính xác. Chúng ta cần hiểu rõ cách thức làm việc của các câu truy vấn. Trong bài viết này, chúng ta sẽ bắt đầu với những câu truy vấn cơ bản nhất.

Cấu trúc một câu truy vấn cơ bản

Dưới đây là cấu trúc một câu truy vấn cơ bản

Bạn có thể thấy, câu truy vấn này gồm 2 mệnh đề:

  • SELECT: mệnh dề này liệt kê các thuộc tính (cột) mà chúng ta muốn lấy dữ liệu.
  • FROM: mệnh đề này khai báo nguồn dữ liệu, trong trường hợp cơ bản nhất là bảng dữ liệu.

Lưu ý: giữa các mệnh đề không cần sử dụng ký tự để phân cách. Kết thúc câu truy vấn, chúng ta được khuyến cáo nên sử dụng một dấu chấm phẩy.

Ví dụ: mình muốn liệt kê tên tất cả nhân viên của cửa hàng. Mình sẽ có một câu truy vấn như sau:

Truy vấn nhiều cột dữ liệu

Trong một số trường hợp, chúng ta cần truy vấn nhiều hơn một thuộc tính. Để làm việc này, chúng ta chỉ cần liệt kê tất cả những thuộc tính muốn truy vấn dữ liệu tại mệnh đề SELECT. Các thuộc tính được ngăn cách với nhau bởi một dấu phẩy.

Ví dụ: Mình cần truy vấn tên và thông tin liên hệ (phone và email) của các nhân viên trong cửa hàng. Mình sẽ có một câu truy vấn như sau

Và đây là kết quả mình nhận được.

Kết quả truy vấn
Kết quả truy vấn

Lưu ý về cách trình bày

Chúng ta đã có thể tự viết được một câu truy vấn rồi đúng không nào. Bây giờ là lúc quan tâm đến tính tường minh, dễ đọc và dễ hiểu của các câu truy vấn. Để một câu truy vấn có những thuộc tính trên ta có thể viết theo một trong hai cách sau:

Mỗi cách có những ưu nhược điểm khác nhau. Tùy thuộc vào quan điểm và sở thích của mỗi người. Chúng ta có thể chọn cách tốt nhất cho mình.

Lưu ý: Có 2 lưu ý nhỏ, mình muốn nhắc các bạn:

  • Sau này trong môi trường công việc, các yếu tố thời gian và không gian sẽ được coi trọng. Nên các câu truy vấn có thể được yêu cầu viết gọn thành một dòng. Tuy nhiên, trong thời điểm hiện tại, chúng ta nên viết các câu truy vấn càng tường minh càng tốt. Để dễ dàng hiểu rõ chúng và có thể ôn tập lại trong tương lai
  • Phần này mình có quy ước trước đây, bây giờ chỉ nhắc lại: các từ khóa (keywords) của T-SQL nên được viết IN HOA. Khi đó, bạn dễ dàng phân biệt được các mệnh đề, dễ dàng nhận biết dữ liệu trong câu truy vấn

Phương thức TOP

Bảng Track của chúng ta có khoảng 3500 dòng dữ liệu. Trong một số trường hợp, chúng ta chỉ cần trích xuất 1 vài dòng hoặc một phần dữ liệu. Lúc này, phương thức TOP sẽ hỗ trợ chúng ta. Xem ví dụ bên dưới:

Đây là kết quả nhận được của câu truy vấn trên:

Kết quả truy vấn
Kết quả truy vấn

Để trích xuất 1 phần của dữ liệu, chúng ta thêm từ khóa PERCENT vào phía sau phương thức TOP. Dưới đây là một truy vấn lấy 1% dữ liệu trong bảng Track.

Khi kết hợp TOP với việc sắp xếp dữ liệu. Chúng ta có thể dễ dàng truy xuất những giá trị lớn nhất hoặc nhỏ nhất (theo một tiêu chí nào đó).

Phương thức DISTINCT

Trong CSDL của chúng ta, không có một bảng dữ liệu riêng giành cho tác giả. Thay vào đó, chúng ta lưu tên tác giả kèm với tên bài hát. Giả sử bây giờ chúng ta cần truy vấn tên của tất cả nhạc sĩ thì sao nhỉ? Thật đơn giản đúng không nào.

Và đây là kết quả:

Kết quả truy vấn
Kết quả truy vấn

Khi phân tích kỹ kết quả, chúng ta nhận thấy sự bất thường. Mặc dù kết quả hoàn toàn chính xác. Nhưng có sự trùng lắp dữ liệu. Trong thực tế, chúng ta cũng sẽ gặp những trường hợp tương tự. Vậy, để loại bỏ những giá trị trùng lặp. T-SQL cung cấp cho chúng ta phương thức DISTINCT. Chúng ta cùng cập nhật lại câu truy vấn thông tin nhạc sĩ phía trên.

Và bây giờ các bạn thử thực thi câu truy vấn trên nào. Các dòng dữ liệu trùng lắp đã bị loại bỏ.

SELECT *

Ký tự ‘*’ (tiếng Việt chúng ta gọi là dấu sao, dấu hoa thị, tiếng Anh là asterisk) đại diện cho tất thuộc tính trong bảng. Vậy để truy vấn tất cả các thông tin về khách hàng. Chúng ta có:

Và đây là kết quả:

Kết quả truy vấn
Kết quả truy vấn

Rất tiện đúng không các bạn. Chúng ta không cần liệt kê một danh sách dài dằng dặc 13 thuộc tính của bảng Customer, thay vào đó chỉ là 1 ký tự thay thế. Tuy nhiên, vì sự tiện lợi của nó, không ít lập trình viên lạm dụng nó quá mức. Với tư duy, cứ truy vấn hết, phần nào cần thì sử dụng nếu không cũng không sao. Nhưng, chúng ta cần nhớ một trong những lý do các hệ CSDL ra đời – “Giảm sự dư thừa dữ liệu”. Vậy nên, mỗi khi bạn sử dụng cú pháp SELECT * hãy tự hỏi lại bản thân: “Mình có thực sự cần tất cả các thuộc tính của bảng này không?”.

Bí danh – AS

Đặt bí danh cho một thuộc tính

Dưới đây mình có một ví dụ khác. Mình muốn truy vấn thông tin về họ tên của khách hàng. Đây là phương án của mình.

Khi thực thi, chúng ta sẽ có kết quả:

Kết quả truy vấn
Kết quả truy vấn

Kết quả trả về đúng yêu cầu phải không nào. Tuy nhiên, các bạn hình dung. Nếu tiếp tục đem kết quả này sử dụng trong ứng dụng của chúng ta. Chúng ta sẽ phải xử lý 1 mảng 2 chiều – khá vất vả.

Thật may là T-SQL cung cấp cho chúng ta một phương thức CONCAT. Về chi tiết của phương thức này. Trong thời gian sắp tới mình sẽ có một bài giới thiệu các phương thức tiện ích xử lý chuỗi trong T-SQL cho các bạn. Trong bài viết này, các bạn có thể hiểu đơn giản. Đây là một phương thức giúp nối các chuỗi dữ liệu lại với nhau.

Với phương thức CONCAT, lúc này câu truy vấn của mình sẽ là:

Và đây là kết quả:

Kết quả truy vấn
Kết quả truy vấn

Bây giờ các bạn thấy, dữ liệu đã được nối lại với nhau thành một cột. Chúng ta đã giải được bài toán phía trên. Tuy nhiên, một vấn đề mới xuất hiện. Tên của cột dữ liệu mới đang bị thiếu (No column name). Và để gán tên cho những cột dữ liệu được tạo ra trong câu truy vấn, hoặc đặt lại tên (chúng ta thường gọi là bí danh) cho một thuộc tính. Chúng ta sẽ sử dụng phương thức AS. Bây giờ, câu lệnh của chúng ta là:

Kết quả của chúng ta vẫn như cũ. Tuy nhiên, tên cột dữ liệu đã được đặt lại thành Fullname.

Kết quả truy vấn
Kết quả truy vấn

Đặt bí danh cho một bảng dữ liệu

Chúng ta có thể đặt bí danh cho một bảng dữ liệu, một biểu thức và một thuộc tính bất kỳ. Việc đặt bí danh giúp chúng ta nhiều lợi ích:

  • Giúp câu truy vấn ngắn gọn hơn. Trong một số trường hợp, tên các bảng, thuộc tính, quá dài. Chúng ta có thể đặt cho nó một bí danh (giống đặt một biến trong lập trình). Nhưng khi chúng ta sử dụng chức năng này, cũng nên cân nhắc vấn đề ngữ nghĩa.
  • Giúp câu truy vấn có nghĩa hơn trong một số trường hợp. Trong ví dụ phía trên, khi chúng ta đặt lại tên cho biểu thức nối chuỗi là Fullname. Chúng ta đã khiến câu truy vấn trở nên dễ hiểu hơn.

Đây là một chức năng rất quan trọng. Trong các bài tiếp theo, các bạn sẽ được thực hành khá nhiều với chúng.

Cảm ơn các bạn đã theo dõi một bài viết tương đối dài của mình. Tuy nhiên, đây là một bài rất căn bản để chúng ta có thể tiếp tục đi tiếp trong loại bài này. Do đó, các bạn vui lòng làm lại các ví dụ của mình. Nếu có thắc mắc, các bạn có thể sử dụng chức năng liên hệ để liên lạc với mình.