Node.js - MySQL Join: Hướng dẫn cho người mới bắt đầu

Xin chào, những người đam mê lập trình! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của Node.js và MySQL joins. Đừng lo lắng nếu bạn là người mới bắt đầu trong lập trình - tôi sẽ là người hướng dẫn thân thiện của bạn, giải thích mọi thứ từng bước. Cuối cùng của bài hướng dẫn này, bạn sẽ có thể join bảng như một chuyên gia!

Node.js - MySQL Join

Hiểu về các khái niệm cơ bản

Trước khi chúng ta nhảy vào joins, hãy chuẩn bị sân khấu với một số khái niệm cơ bản. Hãy tưởng tượng bạn đang tổ chức một buổi hội chợ câu lạc bộ trường học. Bạn có hai danh sách: một danh sách cho học sinh và một danh sách cho các câu lạc bộ. Joining hai danh sách này sẽ giúp bạn biết học sinh nào tham gia câu lạc bộ nào. Đó chính là điều chúng ta sẽ làm với cơ sở dữ liệu!

Thiết lập môi trường của chúng ta

Đầu tiên, hãy chắc chắn rằng chúng ta có tất cả những gì cần thiết:

  1. Cài đặt Node.js từ trang web chính thức.
  2. Cài đặt MySQL và thiết lập cơ sở dữ liệu.
  3. Cài đặt module MySQL cho Node.js bằng cách chạy lệnh:
npm install mysql

Bây giờ, hãy tạo kết nối đến cơ sở dữ liệu của chúng ta:

const mysql = require('mysql');

const connection = mysql.createConnection({
host: 'localhost',
user: 'your_username',
password: 'your_password',
database: 'school_club_fair'
});

connection.connect((err) => {
if (err) throw err;
console.log('Connected to the database!');
});

Mã này thiết lập kết nối của chúng ta đến cơ sở dữ liệu. Thay thế 'your_username' và 'your_password' bằng thông tin tài khoản MySQL thực tế của bạn.

Bảng Members

Hãy tạo bảng đầu tiên của chúng ta: Members. Bảng này sẽ đại diện cho học sinh.

CREATE TABLE Members (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);

INSERT INTO Members (name, email) VALUES
('Alice', '[email protected]'),
('Bob', '[email protected]'),
('Charlie', '[email protected]');

Để tạo bảng này trong Node.js:

connection.query(`
CREATE TABLE Members (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
)
`, (err) => {
if (err) throw err;
console.log('Members table created!');
});

const members = [
['Alice', '[email protected]'],
['Bob', '[email protected]'],
['Charlie', '[email protected]']
];

connection.query('INSERT INTO Members (name, email) VALUES ?', [members], (err) => {
if (err) throw err;
console.log('Members added!');
});

Bảng Committees

Bây giờ, hãy tạo bảng Committees của chúng ta, đại diện cho các câu lạc bộ:

CREATE TABLE Committees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
member_id INT,
FOREIGN KEY (member_id) REFERENCES Members(id)
);

INSERT INTO Committees (name, member_id) VALUES
('Chess Club', 1),
('Debate Team', 2),
('Drama Club', 3),
('Chess Club', 2);

Trong Node.js:

connection.query(`
CREATE TABLE Committees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
member_id INT,
FOREIGN KEY (member_id) REFERENCES Members(id)
)
`, (err) => {
if (err) throw err;
console.log('Committees table created!');
});

const committees = [
['Chess Club', 1],
['Debate Team', 2],
['Drama Club', 3],
['Chess Club', 2]
];

connection.query('INSERT INTO Committees (name, member_id) VALUES ?', [committees], (err) => {
if (err) throw err;
console.log('Committees added!');
});

Bây giờ chúng ta đã thiết lập xong bảng, hãy khám phá các loại joins khác nhau!

MySQL INNER JOIN

An INNER JOIN trả về các bản ghi có giá trị khớp trong cả hai bảng. Nó giống như tìm học sinh chắc chắn tham gia một câu lạc bộ.

connection.query(`
SELECT Members.name, Committees.name AS committee
FROM Members
INNER JOIN Committees ON Members.id = Committees.member_id
`, (err, results) => {
if (err) throw err;
console.table(results);
});

Truy vấn này sẽ hiển thị tất cả các thành viên và các câu lạc bộ họ tham gia. Nếu một thành viên không tham gia bất kỳ câu lạc bộ nào, họ sẽ không xuất hiện trong kết quả.

MySQL LEFT JOIN

A LEFT JOIN trả về tất cả các bản ghi từ bảng trái (Members), và các bản ghi khớp từ bảng phải (Committees). Nó giống như liệt kê tất cả học sinh, hiển thị câu lạc bộ của họ nếu họ tham gia.

connection.query(`
SELECT Members.name, Committees.name AS committee
FROM Members
LEFT JOIN Committees ON Members.id = Committees.member_id
`, (err, results) => {
if (err) throw err;
console.table(results);
});

Truy vấn này sẽ hiển thị tất cả các thành viên, ngay cả khi họ không tham gia bất kỳ câu lạc bộ nào (câu lạc bộ của họ sẽ là NULL).

MySQL RIGHT JOIN

A RIGHT JOIN trả về tất cả các bản ghi từ bảng phải (Committees), và các bản ghi khớp từ bảng trái (Members). Nó giống như liệt kê tất cả các câu lạc bộ, hiển thị thành viên nếu có.

connection.query(`
SELECT Members.name, Committees.name AS committee
FROM Members
RIGHT JOIN Committees ON Members.id = Committees.member_id
`, (err, results) => {
if (err) throw err;
console.table(results);
});

Truy vấn này sẽ hiển thị tất cả các câu lạc bộ, ngay cả khi chúng không có bất kỳ thành viên nào (tên thành viên sẽ là NULL).

So sánh các loại JOIN

Dưới đây là bảng tóm tắt các loại JOIN khác nhau:

Loại JOIN Mô tả Trường hợp sử dụng
INNER JOIN Trả về các bản ghi khớp từ cả hai bảng Khi bạn muốn dữ liệu tồn tại trong cả hai bảng
LEFT JOIN Trả về tất cả từ bảng trái, khớp từ bảng phải Khi bạn muốn tất cả các bản ghi từ bảng đầu tiên, bất kể có khớp hay không
RIGHT JOIN Trả về tất cả từ bảng phải, khớp từ bảng trái Khi bạn muốn tất cả các bản ghi từ bảng thứ hai, bất kể có khớp hay không

Kết luận

Chúc mừng! Bạn vừa học về MySQL joins trong Node.js. Nhớ rằng, joins giống như công việc của một thám tử - bạn đang kết nối thông tin từ các nguồn khác nhau để có được một bức tranh hoàn chỉnh. Luyện tập với các tình huống khác nhau, và sớm bạn sẽ thành thạo trong việc thiết lập mối quan hệ cơ sở dữ liệu!

Tiếp tục lập trình, 保持好奇心, và đừng quên vui vẻ trên đường đi. Chúc bạn may mắn trong việc join!

Credits: Image by storyset