SQL(Structured Query Language)は、データベース管理システムにおいてデータの操作、検索、挿入、更新、削除などを行うための標準的な言語です。SQLは、リレーショナルデータベースに対して使用される主要なツールであり、開発者やデータベース管理者にとって不可欠なスキルです。この記事では、SQLの基礎から応用まで、さまざまな重要なトピックをカバーします。
SQLの基本
SQLの基本的な命令には、データの取得、挿入、更新、削除を行うためのコマンドが含まれます。これらのコマンドは、主に以下の5つの主要な操作に分類されます。

-
SELECT: データベースからデータを取得します。最も基本的で頻繁に使用されるSQLコマンドです。
sqlSELECT * FROM テーブル名;
-
INSERT: 新しいデータをテーブルに挿入します。
sqlINSERT INTO テーブル名 (カラム1, カラム2, ...) VALUES (値1, 値2, ...);
-
UPDATE: 既存のデータを更新します。
sqlUPDATE テーブル名 SET カラム1 = 新しい値1, カラム2 = 新しい値2 WHERE 条件;
-
DELETE: データを削除します。
sqlDELETE FROM テーブル名 WHERE 条件;
-
CREATE: 新しいテーブルやデータベースを作成します。
sqlCREATE TABLE テーブル名 ( カラム1 データ型, カラム2 データ型, ... );
SQLのデータ型
SQLでは、各カラムに対してデータ型を指定する必要があります。主なデータ型には以下のものがあります。
-
整数型:
INT
,SMALLINT
,BIGINT
など、数値データを格納します。 -
文字列型:
VARCHAR
,CHAR
,TEXT
など、文字列データを格納します。 -
日付型:
DATE
,DATETIME
,TIMESTAMP
など、日付や時間を格納します。 -
浮動小数点型:
FLOAT
,DOUBLE
,DECIMAL
など、数値の小数部分を格納します。
SQLの条件文と論理演算子
データの取得や更新時には、条件を指定して処理を行うことが重要です。SQLでは、WHERE
句を使用して条件を指定します。また、複数の条件を組み合わせるために論理演算子を使用することができます。
-
論理演算子:
-
AND
: 複数の条件をすべて満たす場合 -
OR
: 複数の条件のいずれかを満たす場合 -
NOT
: 条件を満たさない場合
-
例:
sqlSELECT * FROM 従業員 WHERE 年齢 > 30 AND 部署 = '営業';
集約関数
SQLには、集計データを取得するための集約関数がいくつかあります。これらの関数は、グループ化したデータの集計や統計情報を取得する際に便利です。
-
COUNT: 行数をカウントします。
-
SUM: 数値データの合計を計算します。
-
AVG: 数値データの平均を計算します。
-
MAX: 数値データの最大値を取得します。
-
MIN: 数値データの最小値を取得します。
例:
sqlSELECT 部署, AVG(給与) FROM 従業員 GROUP BY 部署;
JOIN操作
複数のテーブルから関連するデータを取得するために、JOIN
操作が使用されます。JOIN
にはいくつかの種類があります。
-
INNER JOIN: 両方のテーブルに共通するデータのみを取得します。
sqlSELECT * FROM テーブルA INNER JOIN テーブルB ON テーブルA.カラム = テーブルB.カラム;
-
LEFT JOIN: 左側のテーブルのすべてのデータを取得し、右側のテーブルに対応するデータがない場合は
NULL
を返します。sqlSELECT * FROM テーブルA LEFT JOIN テーブルB ON テーブルA.カラム = テーブルB.カラム;
-
RIGHT JOIN: 右側のテーブルのすべてのデータを取得し、左側のテーブルに対応するデータがない場合は
NULL
を返します。sqlSELECT * FROM テーブルA RIGHT JOIN テーブルB ON テーブルA.カラム = テーブルB.カラム;
-
FULL OUTER JOIN: 両方のテーブルからすべてのデータを取得し、対応するデータがない場合は
NULL
を返します。sqlSELECT * FROM テーブルA FULL OUTER JOIN テーブルB ON テーブルA.カラム = テーブルB.カラム;
インデックス
インデックスは、テーブルの検索性能を向上させるために使用されるデータ構造です。インデックスを使用すると、特定のカラムに対する検索が高速になります。
例:
sqlCREATE INDEX idx_従業員名 ON 従業員 (名前);
サブクエリ
サブクエリは、クエリ内で別のクエリを実行する方法です。サブクエリは、SELECT
、INSERT
、UPDATE
、DELETE
などのSQL操作で使用することができます。
例:
sqlSELECT * FROM 従業員 WHERE 給与 > (SELECT AVG(給与) FROM 従業員);
トランザクション
SQLでは、複数の操作を一つの単位としてまとめて実行できるトランザクションを使用することができます。トランザクションを使用することで、データの整合性を保ちながら、複数の操作を一貫して実行することができます。
トランザクションの主なコマンドは以下の通りです。
-
BEGIN TRANSACTION: トランザクションを開始します。
-
COMMIT: トランザクションを確定し、データベースに反映させます。
-
ROLLBACK: トランザクションを取り消し、変更を元に戻します。
例:
sqlBEGIN TRANSACTION;
UPDATE 従業員 SET 給与 = 給与 * 1.1 WHERE 部署 = '営業';
COMMIT;
高度なSQL機能
-
ビュー: ビューは、複雑なクエリを簡単に再利用できるようにする仮想テーブルです。ビューを使用すると、データベース内の複雑な操作を簡潔に表現できます。
例:
sqlCREATE VIEW 高給従業員 AS SELECT * FROM 従業員 WHERE 給与 > 100000;
-
ストアドプロシージャ: ストアドプロシージャは、SQLコマンドを事前に定義し、再利用できるようにするための手続きです。これにより、複雑な処理を効率的に実行できます。
例:
sqlCREATE PROCEDURE 給与増額(従業員ID INT) BEGIN UPDATE 従業員 SET 給与 = 給与 * 1.1 WHERE ID = 従業員ID; END;
-
トリガー: トリガーは、特定のイベント(挿入、更新、削除)によって自動的に実行されるSQL操作です。これにより、データベースの整合性を保つことができます。
例:
sqlCREATE TRIGGER 従業員更新 BEFORE UPDATE ON 従業員 FOR EACH ROW BEGIN IF NEW.給与 < 0 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '給与は負の値にできません'; END IF; END;
結論
SQLはデータベースの操作において不可欠な言語であり、その基本的なコマンドや高度な機能を理解することで、効率的で柔軟なデータ管理が可能となります。データベースを効果的に活用するためには、SQLの基礎をしっかりと学ぶことが重要です。