TM Data School – Giả sử bạn có hai bảng: Customers lưu trữ thông tin về khách hàng, bao gồm tên, địa chỉ và ID khách hàng. Orders lưu trữ thông tin về các đơn hàng, bao gồm ID khách hàng, ID sản phẩm và số lượng đặt hàng. Khi muốn trả lời câu hỏi mỗi khách hàng mua bao nhiêu đơn hàng, bạn sẽ cần lấy ra tên khách hàng trong bảng Customers, và số lượng đặt hàng trong bảng Orders. Đây là lúc mà bạn cần dùng đến JOIN – Một câu lệnh không thể bỏ qua trong SQL.
Vậy JOIN là gì và sử dụng JOIN như thế nào? Hãy cùng TM tìm hiểu trong bài viết này nhé!
Nội dung bài viết:
- JOIN là gì?
- Các loại mệnh đề JOIN trong SQL
– INNER JOIN
– LEFT JOIN
– RIGHT JOIN
– FULL JOIN
– SELF JOIN
– CROSS JOIN - JOIN có gì khác UNION?
JOIN là gì?
Trong SQL, mệnh đề JOIN được sử dụng để kết hợp dữ liệu từ nhiều bảng dữ liệu khác nhau. Bản ghi (records) từ các bảng sẽ kết nối với nhau thông qua điều kiện giữa một (hoặc nhiều) cột có mối quan hệ trong bảng. Nếu đáp ứng điều kiện, bản ghi ở các bảng sẽ được kết nối với nhau thành một.
Lưu ý: câu lệnh JOIN để kết nối dữ liệu giữa nhiều CỘT từ nhiều bảng khác nhau (khác với UNION kết hợp các HÀNG có cùng số cột giữa các bảng khác nhau).
Giả sử, có hai bảng dữ liệu là bảng account (tài khoản) chứa các dữ liệu liên quan tới tài khoản ngân hàng của các khách hàng và bảng customer (khách hàng) chứa các dữ liệu liên quan tới khách hàng cá nhân.
Trong đó:
Bảng account có 5 cột:
- account_id – ID của mỗi tài khoản, giá trị ID là duy nhất và không được có hai giá trị ID ở hai bản ghi trong bảng này.
- overdraft_amount – Hạn mức chi tiêu của mỗi tài khoản.
- customer_id – ID của khách hàng chủ tài khoản, là giá trị định danh mỗi khách hàng.
- type_id – ID của loại tài khoản.
- segment – Phân loại tài khoản, là ‘RET’ (với khách hàng cá nhân) hoặc ‘CORP’ (với khách hàng doanh nghiệp, tổ chức).
Bảng customer có 5 cột:
- customer_id – ID của mỗi khách hàng, giá trị ID là duy nhất và không được có hai giá trị ID ở hai bản ghi trong bảng này.
- name – Tên (First name) của khách hàng.
- lastname – Họ (Last name) của khách hàng.
- gender– Giới tính (nam/nữ).
- marital_status – Tình trạng hôn nhân (Đã kết hôn – Y/N)
Bạn có thể kết hợp dữ liệu từ hai bảng này để trả lời các câu hỏi như:
- Chủ tài khoản của các tài khoản trong bảng account là ai?
- Một khách hàng (giả sử Marc Tesco) có mấy tài khoản ngân hàng?
- Có bao nhiêu tài khoản được mở bởi khách hàng nữ?
- Hạn mức chi tiêu của tất cả các tài khoản của một khách hàng (giả sử Emma Johnson) là bao nhiêu?
Bằng cách đối sánh các giá trị ở cột customer_id trong cả hai bảng, chúng ta sẽ có đầy đủ thông tin về một tài khoản của mỗi khách hàng. Tuy nhiên, sẽ có trường hợp có một số khách hàng có thể không xuất hiện ID trong bảng account nếu họ không mở tài khoản,…
Các loại mệnh đề JOIN trong SQL
Các loại mệnh đề JOIN khác nhau sẽ cho ra một kết quả khác nhau để đảm bảo bạn không làm mất dữ liệu, dư thừa dữ liệu, hay khiến cho dữ liệu trở nên không chính xác khi kết hợp hai bảng với nhau:
- INNER JOIN: Trả về các bản ghi có giá trị thỏa mãn điều kiện JOIN trong cả hai bảng
- LEFT JOIN: Trả về tất cả các bản ghi từ bảng bên trái (table1) và mọi bản ghi phù hợp từ bảng bên phải (table2). Nếu không khớp, giá trị NULL sẽ được hiển thị cho các cột của bảng bên phải (table2)
- RIGHT JOIN: Trả về tất cả các bản ghi từ bảng bên phải (table2) và mọi bản ghi phù hợp từ bảng bên trái (table1). Nếu không khớp, giá trị NULL sẽ được hiển thị cho các cột của bảng bên trái (table1)
- FULL JOIN: Trả về tất cả bản ghi trong cả hai bảng dù có khớp điều kiện JOIN hay không.
- CROSS JOIN: Trả về mọi tổ hợp các record từ cả hai bảng
- SELF JOIN: Trả về các record có giá trị khớp với điều kiện khi một bảng được JOIN với chính nó
Syntax của JOIN:
SELECT column1, column2, …
FROM table1 AS t1
[INNER/LEFT/RIGHT/FULL/CROSS] JOIN table2 AS t2
ON t1.common_column = t2.common_column
Trong đó:
- column1, column2,… là tên các cột muốn hiển thị;
- table1, table2,… là tên các bảng có chứa dữ liệu cần kết hợp;
- t1, t2 là tên thay thế hoặc rút gọn (alias) cho các bảng table1, table2 để khi JOIN hai bảng không cần phải sử dụng tên đầy đủ của bảng;
- common_column là cột chung xuất hiện trong cả hai bảng và được sử dụng để thực hiện phép JOIN.
INNER JOIN
INNER JOIN được sử dụng để kết hợp các bản ghi khớp giá trị từ cả hai bảng và loại bỏ các hàng không khớp trong bất cứ bảng nào. JOIN được mặc định hiểu là INNER JOIN nếu không có từ khóa cụ thể của loại JOIN (như LEFT, RIGHT hoặc FULL).
Giả sử, có thể kết nối dữ liệu từ bảng account và bảng customer bằng query:
SELECT
account.*,
customer.name,
customer.lastname,
customer.gender,
customer.marital_status
FROM account
JOIN customer ON account.customer_id = customer.customer_id;
Kết quả của query trả ra sẽ chỉ hiển thị các cột được chọn với các record có giá trị customer_id ở cả hai bảng account và customer, với điều kiện giá trị cột customer_id ở hai bảng phải bằng nhau. Các record có giá trị customer_id ở bảng account nhưng không khớp với bất cứ giá trị customer_id nào trong customer (hoặc ngược lại) sẽ không được trả về.
Kết quả này sẽ giúp bạn trả lời các câu trả lời về các tài khoản cá nhân (do bảng customer chỉ có thông tin về khách hàng cá nhân).
LEFT JOIN
Tuy nhiên, nếu mục đích là lấy thông tin của tất cả tài khoản, dù là khách hàng cá nhân hay khách hàng doanh nghiệp, thì bạn sẽ cần mệnh đề LEFT JOIN thay vì JOIN.
LEFT JOIN sẽ giữ nguyên LEFT TABLE và kết hợp thêm các cột từ RIGHT TABLE (bảng được LEFT JOIN). Nếu không khớp, giá trị NULL sẽ được hiển thị cho các cột của bảng bên phải.
Bạn có thể query:
SELECT
account.*,
customer.name,
customer.lastname,
customer.gender,
customer.marital_status
FROM account
LEFT JOIN customer ON account.customer_id = customer.customer_id;
Kết quả trả về sẽ là record của tất cả tài khoản và thông tin về họ, tên, giới tính và tình trạng hôn nhân của khách hàng là tài khoản cá nhân. Với những tài khoản doanh nghiệp, những thông tin này sẽ bị NULL (rỗng và không có dữ liệu) do customer_id bảng account không khớp với giá trị customer_id nào trong bảng customer.
RIGHT JOIN
Tương tự như LEFT JOIN, RIGHT JOIN sẽ giữ tất cả bảng ghi của bảng RIGHT TABLE, và kết hợp thêm các cột từ LEFT TABLE. Bạn có thể hình dung kết quả query như hình dưới đây:
Với ví dụ trên, nếu thay LEFT JOIN bằng RIGHT JOIN:
SELECT
account.account_id,
account.overdraft_amount,
account.type_id,
account.segment,
account.customer_id,
customer.customer_id
customer.name,
customer.lastname,
customer.gender,
customer.marital_status
FROM account
RIGHT JOIN customer ON account.customer_id = customer.customer_id;
Kết quả query lần này sẽ trả về tất cả record trong bảng customer và thông tin các các tài khoản trong bảng account thỏa mãn điều kiện có giá trị customer_id khớp với customer_id trong bảng customer. Record của những khách hàng không có tài khoản cũng được trả về, và các trường dữ liệu về tài khoản như account_id, overdraft_amount, type_id, segment sẽ rỗng dữ liệu (NULL).
Kết quả trả về như bảng dưới đây:
FULL JOIN
FULL JOIN sẽ trả về kết quả với tất cả các record từ hai bảng, dù có thỏa mãn điều kiện khớp hay không. Với những record không khớp, các cột không có giá trị ở bảng còn lại sẽ rỗng (NULL).
Syntax của query với FULL JOIN được biểu diễn như sau:
SELECT account.*,
CASE WHEN customer.customer_id IS NULL
THEN account.customer_id
ELSE customer.customer_id
END customer_id
customer.name,
customer.lastname,
customer.gender,
customer.marital_status
FROM account
FULL JOIN customer ON account.customer_id = customer.customer_id;
Kết quả trả về tương đương với điều kiện Nếu customer_id bảng customer NULL thì lấy customer_id bảng customer, nếu không thì lấy customer bảng customer.
CASE WHEN customer.customer_id IS NULL
THEN account.customer_id
ELSE customer.customer_id END customer_id
SELF JOIN
SELF JOIN được sử dụng nếu bạn muốn kết hợp dữ liệu từ một bảng với chính nó. Các record được chọn sẽ khớp với các record khác trong cùng một bảng theo một điều kiện nhất định. SELF JOIN sẽ hữu ích trong một số use case, ví dụ như khi bạn muốn so sánh hai giá trị khác nhau trong cùng một dòng. Bạn không thể so sánh nếu hai giá trị đó không cùng một dòng.
Ví dụ, bạn có bảng employee có chứa tất cả thông tin về các nhân viên, bao gồm:
- employee_id – ID của mỗi nhân viên, giá trị ID là duy nhất và không được có hai giá trị ID ở hai bản ghi trong bảng này.
- first_name – Tên (First name) của khách hàng.
- last_name – Họ (Last name) của khách hàng.
- gender – Giới tính (nam/nữ).
- salaries – Mức lương.
- manager_id – ID của manager quản lý nhân viên đó. Ngoại trừ lãnh đạo cao nhất (ID = 1) thì tất cả mọi người đều có quản lý giám sát.
Nếu bạn muốn lấy thông tin của nhân viên và thông tin của cả manager của nhân viên đó, bạn có thể query:
SELECT
e.id,
e.first_name,
e.last_name,
e.salary,
m.first_name AS fname_boss,
m.last_name AS lname_boss
FROM employee e
JOIN employee m ON e.manager_id = m.id ;
Lưu ý rằng, bởi chúng ta JOIN từ cùng một bảng, cần phải đặt tên (alias) cho mỗi bảng để có thể phân biệt các cột thuộc bảng đó. Trong ví dụ trên, bảng employee được đặt ALIAS là “e” nhằm biểu thị sẽ lấy các trường dữ liệu về nhân viên, và bảng employee được đặt ALIAS là “m” nhằm biểu thị sẽ lấy các trường dữ liệu về người quản lý của nhân viên đó.
Với query trên, có thể hiểu là chúng ta sẽ so sánh giá trị ở cột manager_id của từng nhân viên, với cột id trong bảng manager (do mỗi manager cũng là nhân viên và sẽ có ID tương ứng được lưu trong bảng employee).
Trong bảng kết quả không có record về John Watson với ID là 1. Bởi John là lãnh đạo cấp cao không có manager và query đang dùng loại JOIN (được hiểu là INNER JOIN), truy vấn sẽ không trả dữ liệu về John. Để có thể lấy tất cả dữ liệu về nhân viên kể cả lãnh đạo cấp cao nhất, chúng ta có thể sử dụng LEFT JOIN thay vì INNER JOIN.
Vậy khi nào chúng ta nên dùng SELF JOIN trong SQL?
SELF JOIN thường được sử dụng với:
Mối quan hệ phân cấp (Hierarchical relationships): Là dữ liệu biểu thị giá trị phân cấp, gia phả (ví dụ: nhân viên – manager, các phụ tùng trong một chiếc ô tô như động cơ – ắc quy/máy phát điện, các thành viên trong gia đình,…) và mối quan hệ này có thể xác định trên cùng một trường dữ liệu (Ví dụ: nhân viên và manager đều có ID, các bộ phận lớn và nhỏ trong ô tô đều có ID,…). Bạn có thể sử dụng SELF JOIN để xác định mối quan hệ parent-child hoặc mối quan hệ thuộc-về với những trường hợp như này.
Bạn cũng có thể SELF JOIN nhiều lần để biểu thị nhiều cấp dữ liệu. Ví dụ như query dưới đây, bạn có thể lấy được thông tin của một thành viên trong gia đình, mẹ và ông ngoại của thành viên đó.
SELECT
c.first_name,
c.last_name,
m.first_name AS fname_mother,
m.last_name AS lname_mother
FROM person c
LEFT JOIN person m ON c.mother_id = m.id
LEFT JOIN person f ON m.father_id = f.id ;
Mối quan hệ tuần tự/có tính chu trình (Sequential relationships): Ví dụ: giả sử bạn có bản ghi mô tả các bước liên tiếp cần thiết để chuẩn bị một món ăn. Tất cả các bước có thể được đặt trong một bảng duy nhất. Thứ tự của chúng được xác định dựa trên các cột trỏ đến ID của bản ghi trước và bản ghi tiếp theo trong cùng một bảng.
id | content | previous_id | next_id |
1 | Làm nóng lò nướng ở nhiệt độ 220 độ C. | NULL | 2 |
2 | Gọt bốn củ khoai tây. | 1 | 4 |
3 | Trộn khoai tây thái lát với dầu. | 4 | 6 |
4 | Cắt khoai tây thành lát. | 2 | 3 |
5 | Nêm các lát khoai sau khi nướng với muối và hạt tiêu. | 6 | NULL |
6 | Nướng trong lò làm nóng trước trong 20 phút. | 3 | 5 |
Đọc nội dung trong cột content, có thể thấy ID với mỗi content không phải số thứ tự để thực hiện công thức này. Khi query để sắp xếp lại các bước thực hiện:
SELECT
c.content AS previous_step,
a.content AS step,
b.content AS next_step
FROM recipe a
LEFT JOIN recipe b ON a.next_id = b.id
LEFT JOIN recipe c ON a.previous_id = c.id ;
sẽ được công thức chính xác:
- Làm nóng lò nướng ở nhiệt độ 220 độ C.
- Gọt bốn củ khoai tây.
- Cắt khoai tây thành lát.
- Trộn khoai tây thái lát với dầu.
- Nướng trong lò làm nóng trước trong 20 phút.
- Nêm các lát khoai sau khi nướng với muối và hạt tiêu.
Và dữ liệu có tính cấp bậc đồ thị (Graph data)
Biểu đồ là một cấu trúc bao gồm các đối tượng được kết nối với nhau bằng các mối quan hệ. Một ví dụ về biểu đồ là mạng lưới đường bộ giữa nhiều thành phố:
Biểu đồ này thể hiện năm thành phố có mối liên kết với nhau. Mỗi mũi tên hiển thị một con đường từ thành phố này đến thành phố khác. Có hai bảng dữ liệu để lưu trữ thông tin này: Bảng city chứa thông tin như mã ID, tên của các thành phố và bảng route chứa thông tin về mã ID về con đường, thành phố bắt đầu (cột from_city_id) và thành phố đích đến của con đường (cột to_city_id).
Đây là bảng city:
id | name |
1 | Laredo |
2 | San Antonio |
3 | Austin |
4 | Waco |
5 | Houston |
Và đây là dữ liệu của bảng route:
id | from_city_id | to_city_id |
1 | 4 | 1 |
2 | 4 | 3 |
3 | 4 | 2 |
4 | 1 | 4 |
5 | 2 | 3 |
6 | 2 | 5 |
7 | 5 | 3 |
Có thể sử dụng SELF JOIN trong bảng city, cùng với INNER JOIN của hai bảng, để tìm ra các tuyến đường tồn tại giữa các thành phố.
SELECT
c1.name AS from_city,
c2.name AS to_city
FROM city c1
JOIN route r ON c1.id = r.from_city_id
JOIN city c2 ON c2.id = r.to_city_id ;
Hai bảng được kết nối với nhau thông qua trường ID trong bảng city và trường from_city_id và to_city_id trong bảng route để lấy được thông tin về thành phố bắt đầu và kết thúc của mỗi cung đường. Kết quả là:
id | from_city_id | to_city_id |
1 | Waco | Laredo |
2 | Waco | Austin |
3 | Waco | San Antonio |
4 | Laredo | Waco |
5 | San Antonio | Austin |
6 | San Antonio | Houston |
7 | Houston | Austin |
SELF JOIN giúp tìm các giá trị trùng lặp
SELF JOIN cũng có thể giúp tìm các giá trị trùng lặp trong một bảng. Giả sử chúng ta có bảng color:
id | name |
1 | blue |
2 | green |
3 | yellow |
4 | blue |
5 | yellow |
ID trong các bảng phải là giá trị định danh của một màu duy nhất. Tuy nhiên, nếu chỉ xác định bằng ID có unique hay không, chúng ta có thể bỏ sót các trường hợp cùng một màu nhưng lại có hai ID như trên. Trong quá trình xử lý và làm sạch dữ liệu, cần phải tìm ra các trường hợp như này để loại bỏ. Query với SELF JOIN có thể giúp bạn tìm ra màu bị trùng lặp:
SELECT
c1.id AS id1,
c1.name AS color1,
c2.id AS id2,
c2.name AS color2
FROM color c1
JOIN color c2 ON c1.name = c2.name AND c1.id != c2.id;
Điều kiện để JOIN hai bảng chính là tìm ra những màu có cùng tên nhưng khác ID. Kết quả trả về chính là hai màu bị trùng lặp:
id1 | color1 | id2 | color2 |
1 | blue | 4 | blue |
3 | yellow | 5 | yellow |
CROSS JOIN
CROSS JOIN trả về tích Descartes hoặc tất cả các bản ghi được kết nối với tất cả các bản ghi trong tất cả các bảng và không cần thỏa mãn điều kiện JOIN nào (tức là không có mệnh đề ON).
Giả sử, có hai bảng là tshirt chứa tất cả sản phẩm áo phông của một cửa hàng thời trang và bảng color chứa tất cả màu của các sản phẩm đó.
Bảng tshirt có những bản ghi:
id | name |
1 | S |
2 | M |
3 | L |
4 | XL |
Bảng color có những bản ghi:
id | name |
1 | yellow |
2 | violet |
3 | green |
Nếu tất cả sản phẩm áo phông đều có variant với tất cả màu sắc, có thể query SQL với CROSS JOIN như sau:
SELECT *
FROM tshirt CROSS JOIN color (ON TRUE);
Chúng ta đã chọn tất cả các bản ghi từ bảng tshirt và nối mỗi bản ghi với tất cả màu sắc trong bảng color. Nói cách khác, chúng ta có sự kết hợp của từng chiếc áo phông ở mỗi kích cỡ với từng màu sắc.
Tương tự các mệnh đề JOIN trên, CROSS JOIN cũng có thể sử dụng với nhiều hơn hai bảng. Giả sử bảng tshirt chứa dữ liệu về các sản phẩm áo phông với ba kích cỡ (S, M, L), bảng fabric chứa dữ liệu về các loại vải của sản phẩm (cotton và lanh), và bảng color chứa dữ liệu về các mã màu sắc của các sản phẩm (hồng và xanh).
SELECT
tshirt.size as size,
color.name AS color,
fabric.name as fabric
FROM tshirt
CROSS JOIN fabric
CROSS JOIN color ;
Kết quả truy vấn trả về sẽ là chi tiết về loại vải, màu và kích thước của mỗi sản phẩm áo phông tại cửa hàng:
size | color | fabric |
S | blue | cotton |
M | blue | cotton |
L | blue | cotton |
S | pink | cotton |
M | pink | cotton |
L | pink | cotton |
S | blue | linen |
M | blue | linen |
L | blue | linen |
S | pink | linen |
M | pink | linen |
L | pink | linen |
JOIN có gì khác UNION?
Dữ liệu có thể rải rác nằm ở nhiều bảng khác nhau, và Data Analyst cần kết hợp những dữ liệu đó vào một bảng để làm giàu dữ liệu, đồng thời đảm bảo dễ dàng truy xuất dữ liệu. UNION là câu lệnh trong SQL giúp Data Analyst làm nhiệm vụ đó. UNION sẽ kết hợp dữ liệu từ kết hợp của nhiều câu lệnh SELECT thành một kết quả truy xuất.
Syntax của UNION:
SELECT column1, column2, …
FROM table1
UNION
SELECT column1, column2, …
FROM table2;
Trong đó:
column1, column2,… là tên các cột để cần dùng để kết hợp các dòng với nhau, và table1, table2,… là tên các bảng có chứa dữ liệu cần kết hợp.
Bạn cũng cần nắm được sự khác biệt giữa UNION và UNION ALL:
- UNION sẽ loại bỏ những record bị trùng lặp trong kết quả và chỉ giữ lại một record
- UNION ALL sẽ giữ lại tất cả những record bị trùng lặp
Ví dụ: Một công ty có nhiều chi nhánh và cửa hàng trên địa bàn thành phố Hà Nội. Bạn cần lấy đầy đủ danh sách các nhân viên, bộ phận làm việc, vị trí làm việc và level để đưa ra quyết định về phân bổ ngân sách cho nhân sự.
Để truy xuất những dữ liệu này, có ba bảng bạn cần quan tâm: employee, department, position và level. Bạn có thể query:
SELECT
e1.first_name,
e1.last_name,
e1.dept_id,
d.name AS department,
e1.position_id,
p.name AS position_name,
e1.level_id,
l.name AS level
FROM employee_store_1 e1
LEFT JOIN department d ON e1.dept_id = d.id
LEFT JOIN position p ON e1.position_id = p.id
LEFT JOIN level l ON e1.level_id = l.id
ON
UNION
SELECT
e2.first_name,
e2.last_name,
e2.dept_id,
d.name AS department,
e2.position_id,
p.name AS position_name,
e2.level_id,
l.name AS level
FROM employee_store_2 e2
LEFT JOIN department d ON e2.dept_id = d.id
LEFT JOIN position p ON e2.position_id = p.id
LEFT JOIN level l ON e2.level_id = l.id
Lưu ý:
- Số lượng cột được truy xuất trong UNION phải bằng nhau
- Các cột ở cùng một vị trí trong mỗi câu lệnh SELECT phải có kiểu dữ liệu tương tự nhau. Ví dụ: “char” và “varchar” là các kiểu dữ liệu giống hệt nhau, trong khi “varchar” và “integer” không thể UNION
- Các cột phải theo đúng thứ tự trong câu lệnh SELECT
- ORDER BY phải được đặt ở SELECT cuối cùng. Tuy nhiên, bạn cũng có thể sử dụng TOP/LIMIT ở mỗi câu lệnh SELECT để giới hạn số dòng trước khi UNION
- Tương tự câu lệnh SELECT thông thường, bạn cũng có thể thêm điều kiện WHERE, GROUP BY, HAVING,…
- Có thể chỉ đặt tên cột cho câu lệnh SELECT đầu tiên, các câu lệnh SELECT sau đó sẽ UNION với cột ở vị trí tương ứng và lấy theo tên cột đã đặt phía trên
Vậy điểm khác nhau giữa UNION và JOIN là gì?
UNION | JOIN |
UNION là kết hợp các dòng giữa các truy xuất có cùng số lượng cột, các cột có kiểu dữ liệu tương thích | JOIN là kết hợp các cột giữa các bảng với nhau theo một điều kiện và không bắt buộc phải tương thích về số cột hoặc kiểu dữ liệu |
Dữ liệu được kết hợp sẽ được thêm vào kết quả dưới dạng một dòng mới | Dữ liệu được kết hợp sẽ được thêm vào kết quả dưới dạng một cột mới |
Là toán tử kết hợp | Là câu lệnh tìm sự giao thoa và đáp ứng được điều kiện của các bảng |
UNION không cần bất kỳ mệnh đề bổ sung nào để kết hợp hai bảng | JOIN cần thêm mệnh đề ON để kết hợp hai bảng dựa trên một điều kiện chung, ví dụ: giá trị của hai trường bằng nhau |
Thường được dùng trong các use case như hợp nhất hai kết quả với các điều kiện riêng biệt, ví dụ: danh sách nhân viên cũ với danh sách nhân viên mới trong một công ty | Thường được dùng trong các use case bổ sung ý nghĩa hoặc thông tin cho một trường dữ liệu đã có, ví dụ: lấy được tên đơn vị vận chuyển của một đơn hàng khi đã có id của đơn vị vận chuyển đó |
Tạm kết
SQL là một “công cụ” hỗ trợ đắc lực trong việc truy vấn, xử lý dữ liệu từ kho dữ liệu trung tâm. Tuy nhiên, chỉ biết “câu lệnh” là chưa đủ, để khai thác tối đa tiềm năng của công cụ này, chủ động hơn trong quá trình truy vấn dữ liệu, bạn cần trang bị cho mình kiến thức về:
- Cơ sở dữ liệu: Hiểu rõ cấu trúc, cách thức hoạt động và các loại dữ liệu được lưu trữ trong cơ sở dữ liệu.
- Loại dữ liệu: Nắm rõ loại dữ liệu bạn sở hữu (data type) để lựa chọn phương thức truy vấn phù hợp.
- Vị trí lưu trữ: Xác định vị trí lưu trữ của dữ liệu để truy xuất nhanh chóng hơn.
Đây cũng là một trong những nội dung quan trọng được truyền tải trong khóa SQL for Data Analysis của TM Data School. Khóa học sẽ giúp bạn:
- Hiểu cách dữ liệu được tổ chức và lưu trữ, từ đó biết cách trích xuất và xử lý dữ liệu hiệu quả với mỗi một bài toán khác nhau của doanh nghiệp
- Cung cấp các “câu lệnh” SQL từ đơn giản đến nâng cao để bạn có thể chủ động thực hiện các truy vấn nhằm tìm kiếm thông tin, biến đổi dữ liệu để phục vụ cho việc tạo báo cáo phân tích.
Tìm hiểu thêm về khóa học SQL for Data Analysis – Trang bị tư duy xây dựng hệ thống dữ liệu và truy xuất data với SQL.
Bài viết được biên dịch từ learnsql.com, xin vui lòng không sao chép dưới mọi hình thức!