SQLで学ぶWHERE句とJOINの使い方

ミサキ

ナナさん、SQLのWHERE句とJOINについて教えてもらえませんか? まだよくわからないんです。

ナナ

もちろん!WHERE句はデータを絞り込むのに使うし、JOINは複数のテーブルを結合する時に使うんだよ。まずWHERE句から始めようか。

WHERE句の基本構文と使い方

WHERE句は、SQLのSELECT文やUPDATE文、DELETE文などでデータを条件によって絞り込むために使います。基本的な構文は以下の通りです。

SELECT カラム名 FROM テーブル名 WHERE 条件;

例えば、employees テーブルから「年齢が30歳以上の従業員」を取得する場合、次のように書きます。

SELECT * FROM employees WHERE age >= 30;

このように、WHERE句を使うことで必要なデータだけを抽出できます。

条件指定の方法と演算子の解説

WHERE句では、さまざまな条件を指定することができます。よく使われる演算子には以下のものがあります。

例:

  1. 年齢が20歳以上かつ30歳以下の従業員を取得する場合:

    SELECT * FROM employees WHERE age BETWEEN 20 AND 30;
  2. 名前が「田中」で始まる従業員を取得する場合:

    SELECT * FROM employees WHERE name LIKE '田中%';

JOINの種類(INNER JOIN, LEFT JOIN, RIGHT JOIN)の説明

JOINは、複数のテーブルを結合してひとつの結果セットを作るためのSQL文です。主に以下の3つの種類があります。

INNER JOIN

INNER JOINは、結合する両方のテーブルに共通する値だけを取得します。

SELECT カラム名 FROM テーブル1 INNER JOIN テーブル2 ON テーブル1.カラム名 = テーブル2.カラム名;

LEFT JOIN

LEFT JOINは、左側のテーブルのすべての行と、右側のテーブルの一致する行を取得します。右側に一致する行がない場合、NULLが返されます。

SELECT カラム名 FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.カラム名 = テーブル2.カラム名;

RIGHT JOIN

RIGHT JOINは、右側のテーブルのすべての行と、左側のテーブルの一致する行を取得します。左側に一致する行がない場合、NULLが返されます。

SELECT カラム名 FROM テーブル1 RIGHT JOIN テーブル2 ON テーブル1.カラム名 = テーブル2.カラム名;

複数テーブルの結合方法と例

複数のテーブルを結合するには、同様にJOINを使います。例えば、employees テーブルと departments テーブルをINNER JOINで結合する場合、次のように書きます。

SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

このクエリでは、従業員の名前とその所属部門の名前を取得します。

パフォーマンスに影響を与える要因

JOINを使用する際には、パフォーマンスに影響を与える要因がいくつかあります。以下の点に注意しましょう。

データの整合性を保つための注意点

テーブルを結合する際には、データの整合性に注意する必要があります。以下の点を考慮しましょう。

実践的なクエリ例とその解説

実際のデータベースでのクエリ例を見てみましょう。以下は、従業員の情報として employees テーブル、部門情報として departments テーブルを持っていると仮定します。

SELECT employees.name, employees.age, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id
WHERE employees.age > 25;

このクエリは、25歳以上の従業員の名前、年齢、そして所属部門名を取得します。LEFT JOINを使用しているため、部門がない従業員も含まれます。

まとめ

ミサキ

なるほど、WHERE句やJOINの基本がわかってきました!

ナナ

よかった!SQLは強力なツールだから、ぜひ使いこなしてみてね。

ミサキ

はい、もっと練習してみます!ありがとうございました!

← 前の記事 次の記事 →