Node.js - MySQLのJOIN:初心者向けガイド
こんにちは、プログラミングを志す皆さん!今日は、Node.jsとMySQLのJOINの世界に興味深く飛び込みましょう。プログラミングが初めてでも心配しないでください - 私はあなたの親切なガイドとして、すべてをステップバイステップで説明します。このチュートリアルの終わりには、プロのようにテーブルを結合できるようになるでしょう!
基本概念の理解
JOINに飛び込む前に、基本的な概念を整理しましょう。学校のクラブフェアを組織していると仮定しましょう。生徒リストとクラブリストの2つがあります。これらのリストを結合することで、どの生徒がどのクラブに所属しているかを把握できます。これが、データベースで私たちが行うことです!
環境の設定
まず、必要なものを確認しましょう:
- 公式サイトからNode.jsをインストールします。
- MySQLをインストールし、データベースを設定します。
- 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