Node.js - MySQLのJOIN:初心者向けガイド

こんにちは、プログラミングを志す皆さん!今日は、Node.jsとMySQLのJOINの世界に興味深く飛び込みましょう。プログラミングが初めてでも心配しないでください - 私はあなたの親切なガイドとして、すべてをステップバイステップで説明します。このチュートリアルの終わりには、プロのようにテーブルを結合できるようになるでしょう!

Node.js - MySQL Join

基本概念の理解

JOINに飛び込む前に、基本的な概念を整理しましょう。学校のクラブフェアを組織していると仮定しましょう。生徒リストとクラブリストの2つがあります。これらのリストを結合することで、どの生徒がどのクラブに所属しているかを把握できます。これが、データベースで私たちが行うことです!

環境の設定

まず、必要なものを確認しましょう:

  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
('Chess Club', 1),
('Debate Team', 2),
('Drama Club', 3),
('Chess Club', 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 = [
['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を追加しました!');
});

テーブルが設定されたので、さまざまなJOINを見てみましょう!

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 JOINについて学びました。JOINは、異なるソースからの情報を結びつける探偵のようなものです - 完全なイメージを得るために情報を結びつけます。さまざまなシナリオで練習し、データベースの関係をプロのようにマスターしてください!

codingを続け、好奇心を持ち、楽しみながら進んでください。ハッピージョイン!

Credits: Image by storyset