Học cách giúp xử lý dữ liệu từ SQL trở lên dễ dàng

Đối với dân lập trình như chúng ta thì việc truy vấn từ CSQL(nói chung) và SQL(nói riêng) là việc vô cùng quen thuộc đúng ko. Tuy vậy mình tin chắc rằng những nội dung trong bài viết này vô cùng thú vị và hữu ích cho bạn đấy. Bởi vì mình thấy rằng hiện tại chúng ta(ít nhất là mình :)) ) mới chỉ sử dụng các mệnh đề truy vấn hay các hàm đơn giản của SQL thôi.

Ví dụ như: DISTINCT, WHERE, GROUP BY, HAVING, ORDER BY, JOIN, MIN, MAX, AVG,… Sau khi truy vấn mình sẽ xử lý chúng bằng ngôn ngữ lập trình.

Tuy vậy nếu chúng ta biết tận dụng các hàm (SQL Function), mệnh đề (SQL Clause) có sẵn của SQL thì có nó sẽ giúp cho việc xử lý dữ liệu, lấy dữ liệu, phân tích dữ liệu trở lên nhanh gọn và dễ dàng. Ko cần nhiều logic để xử lý bằng ngôn ngữ lập trình mà tận dụng luôn các SQL Engine. Qua đó giúp cho performance của application trở lên tốt hơn.

Đặc biệt hơn với những người nào làm việc trong ngành phân tích dữ liệu thì xử lý, truy vấn SQL để phân tích lại là một điều tối thiểu và quan trọng nhất đúng ko nào.

Trong hướng dẫn này, chúng ta sẽ thảo luận về các mệnh đề hay các hàm thường được sử dụng để clean, transform và xóa dữ liệu trùng lặp khỏi các output truy vấn.

  • CASE
  • WHEN
  • COALESCE
  • NULLIF
  • Chuyển đổi kiểu dữ liệu
  • DISTINCT

Để bắt đầu thì chúng ta sẽ có một bảng dữ liệu mẫu ở đây và no có tên là employees. Và chúng ta sẽ sử dụng bảng này xuyên suốt bài viết này nhé.

Bảng dữ liệu này đã được đẩy lên Next Tech sandbox tại link này. Bạn có thể sử dụng để test luôn cho bài này nhé.

CASE WHEN

Về cơ bản thì CASE WHEN là bộ câu lệnh rẽ nhánh trong SQL.

CASE
    WHEN condition1 THEN value1
    WHEN condition2 THEN value2
    ...
    WHEN conditionX THEN valueX
    ELSE else_value
END

Ở đây thì các điều kiện: condition1, condition2,…conditionX sẽ được dùng để so sánh. Nếu như một trong các điều kiện này thỏa mãn thì các giá trị value1, value2,…valueX sẽ được trả về tương ứng. Còn ELSE là giá trị default nếu không có điều kiện nào bên trên được thỏa mãn (giống default trong SWITCH CASE hay ELSE trong IF ELSE ấy).

Ví dụ nhỏ: trong công ty của bạn thì những ai được tuyển sau nngày 2019-01-01 được gọi là New còn lại sẽ là Standard.

SELECT
    *,
    CASE
        WHEN hire_date >= '2019-01-01' THEN 'New'
        ELSE 'Standard'
    END AS employee_type
FROM
    employees;

Câu query trên sẽ cho ra kết quả như sau:

COALESCE

Một hàm hữu ích khác sẽ giúp cho bạn thay thế các giá trị NULL bằng một giá trị default đó chính là COALESCE. Nó sẽ cho phép bạn truyền bất cứ các cột hay là giá trị nào vào. Nếu giá trị đầu tiên trong danh sách là NULL, nó sẽ lấy giá trị thứ hai. Còn nếu giá trị thứ 2 truyền vào vẫn NULL thì nó sẽ lấy giá trị thứ 3,… Hàm COALESCE sẽ tiếp tục các phần tử trong danh sách các giá trị truyền vào cho đến khi nó gặp giá trị không phải là NULL. Nếu tất cả các giá trị trong hàm COALESCE là NULL, thì hàm trả về NULL.

Ví dụ:

SELECT COALESCE(NULL, NULL, NULL, 'W3Schools.com', NULL, 'Example.com');

>>> Nó sẽ trả về W3Schools.com.

Áp dụng vào bảng dữ liệu mẫu. Mình muốn lấy ra title của nhân viên. Nếu title là null thì sẽ lấy giá trị là NO TITLE:

SELECT
    first_name,
    last_name,
    COALESCE(title, 'NO TITLE') AS title
FROM
    employees;

Kết quả sẽ được như sau:

NULLIF

Hàm NULLIF trong SQL này thì lại ngược lại với thằng cha bên trên. Nó có 2 tham số, nếu như nó gặp được một giá trị nào đó bằng giá trị được truyền vào. Nó sẽ trả về giá trị null.

Ví dụ bạn muốn rằng nếu như nhân viên nào có title là Honorable thì trả về null:

SELECT
    first_name,
    last_name,
    NULLIF(title, 'Honorable') AS title
FROM
    employees;

Ta được kết quả như sau:

CAST

Nó sẽ giúp cho bạn thay đổi kiểu dữ liệu của một cột trong một truy vấn. Ví dụ như bạn muốn chuyển kiểu dữ liệu từ integer sang kiểu varchar hay từ datetime sang date thôi chẳng hạn. Cách sử dụng thì vô cùng dễ dàng thôi: CAST(giá trị AS kiểu dữ liệu)

Ví dụ như bạn muốn chuyển tuổi (kiểu integer) sang kiểu varchar:

SELECT
    first_name,
    last_name,
    CAST(age as varchar) as age
FROM
    employees;

Tất nhiên trong một vài trường hợp bạn không thể chuyển được. Ví dụ chuyển từ một varchar có giá trị là ‘đsssdsd’ sang datetime thì có mà toang.

DISTINCT

Hàm này có vẻ là các bạn sẽ biết nhiều hơn so với mấy hàm bên trên nhỉ. Tuy nhiên mình vẫn muốn cho nó vào đây. Thì DISTINCT trong SQL được sử dụng kết hợp với lệnh SELECT để loại tất cả các giá trị trùng lặp của các bản ghi và chỉ lấy các bản ghi duy nhất. Ví dụ như trong bảng dữ liệu mẫu có 2 ông có first_name là Bill. Giờ mình chỉ muốn lấy ra các first_name duy nhất thôi.

SELECT
    DISTINCT first_name
FROM
    employees;

Bạn có thể thấy kết quả trả về đó. Với DISTINCT thì bạn có thể sử dụng với nhiều cột trong câu truy vấn nhé. Ví dụ:

SELECT
     DISTINCT first_name, last_name, age
 FROM
     employees;

Kết thúc rồi

Cảm ơn bạn đã đọc bài viết này của mình. Mình rất hy vọng rằng bài viết này sẽ giúp ích cho bạn trong hiện tại hay tương lai. Xin chào tạm biệt và hẹn gặp lại nhé.

Bái baiiiiiiiiiiiiii!!!!!!!!!!!!!!!!!

6 Comments

  1. I believe that is among the such a lot important information for me.

    And i am happy reading your article. But should commentary on few normal issues, The website
    taste is ideal, the articles is in reality great : D.
    Just right process, cheers

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *