Node.js - MySQL 連接:初學者指南

您好,有抱負的程式設計師們!今天,我們將踏上一段令人興奮的旅程,進入 Node.js 和 MySQL 連接的世界。別擔心你對編程還是新手——我將成為你的友好導遊,一步步解釋一切。在本教程結束時,你將能像專業人士一樣進行表連接!

Node.js - MySQL Join

了解基礎知識

在我們深入探讨連接之前,讓我們先為一些基本概念搭建舞台。想像你正在組織一個學校俱樂部嘉年華。你有兩個名單:一個是學生名單,另一個是俱樂部名單。將這兩個名單連接起來會幫助你看到哪些學生屬於哪些俱樂部。這就是我們將要在數據庫中做的事情!

設置我們的環境

首先,讓我們確保我們有需要的所有東西:

  1. 從官方網站安裝 Node.js。
  2. 安裝 MySQL 並設置數據庫。
  3. 通過運行以下命令安裝 Node.js 的 MySQL 模組:
npm install mysql

現在,讓我們創建一個到我們數據庫的連接:

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('已連接到數據庫!');
});

這段代碼設置了我們到數據庫的連接。將 'your_username' 和 'your_password' 替換為你的實際 MySQL 凭據。

Members 表

讓我們創建我們的第一個表:Members。這將代表我們的學生。

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]');

在 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 表已創建!');
});

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 已添加!');
});

Committees 表

現在,讓我們創建我們的 Committees 表,代表俱樂部:

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
('象棋俱樂部', 1),
('辯論隊', 2),
('話劇俱樂部', 3),
('象棋俱樂部', 2);

在 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 表已創建!');
});

const committees = [
['象棋俱樂部', 1],
['辯論隊', 2],
['話劇俱樂部', 3],
['象棋俱樂部', 2]
];

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

現在我們設置好了表,讓我們探討不同類型的連接!

MySQL INNER JOIN

一個 INNER JOIN 返回兩個表中匹配的記錄。這就像找到確定屬於某個俱樂部的學生。

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);
});

這個查詢將向我們顯示所有成員和他們屬於的俱樂部。如果一個成員沒有屬於任何俱樂部,他們不會出現在結果中。

MySQL LEFT JOIN

一個 LEFT JOIN 返回左表(Members)的所有記錄,以及右表(Committees)的匹配記錄。這就像列出所有學生,如果他們屬於任何俱樂部,則顯示他們的俱樂部。

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);
});

這將顯示所有成員,即使他們沒有屬於任何俱樂部(他們的俱樂部將為 NULL)。

MySQL RIGHT JOIN

一個 RIGHT JOIN 返回右表(Committees)的所有記錄,以及左表(Members)的匹配記錄。這就像列出所有俱樂部,如果有的話,則顯示成員。

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);
});

這將顯示所有俱樂部,即使它們沒有成員(成員名稱將為 NULL)。

JOIN 類型的比較

這裡有一個方便的表格,總結了不同類型的 JOIN:

JOIN 類型 描述 使用案例
INNER JOIN 返回兩個表中匹配的記錄 當你想要存在於兩個表中的數據時
LEFT JOIN 返回左表的所有記錄,右表的匹配記錄 當你想要第一個表的所有記錄,無論是否有匹配時
RIGHT JOIN 返回右表的所有記錄,左表的匹配記錄 當你想要第二個表的所有記錄,無論是否有匹配時

結論

恭喜你!你剛剛學會了在 Node.js 中使用 MySQL 連接。記住,連接就像偵探工作——你正在從不同的來源連接信息以獲得完整的圖景。在不同的情景中練習,很快你就會成為數據庫關係的大師!

持續編程,保持好奇心,並且在過程中不忘樂趣。快樂連接!

Credits: Image by storyset