よく使うSQL、図解で一覧
やりながら学べる基本のSQL入門では基本的なSQLを実際に使いながら学習しましたが、SQLはそれ以外にもたくさんあります。
このページでは、よく使うMySQLのSQLの一覧を図を混じえて紹介していきます。便宜上、テーブル名は表、カラム名は列としています。
SELECT
テーブル内のたくさんのデータから何らかのデータを抽出するにはSELECTを使います。大きく分けると列を指定する方法と行を指定する方法があります。
全ての列を抽出するには「*」を使います。特定の列を抽出するにはその列名を指定し、複数の列を指定するには列名をカンマで区切ります。
SELECT * FROM 表; SELECT 列2 FROM 表; SELECT 列2,列4 FROM 表;
全ての行ではなく、特定の行を指定して抽出するにはWHEREを使って条件を付けます。
条件を列名=値とするとその列が値と等しい行を抽出することができます。
複数の条件を&&(またはAND)でつなげると両方の条件に合う行を抽出し、||(またはOR)でつなげるといずれかの条件に合う行を抽出します。
SELECT * FROM 表 WHERE 列1=1; SELECT * FROM 表 WHERE 列1=1 && 列2=2; SELECT * FROM 表 WHERE 列1=1 || 列2=2;
これらの記号は比較演算子と呼ばれ、ほかにも!=(等しくない)、>(より小さい)、<=(以上)などがあります。
INSERT
テーブルにデータを挿入するにはINSERTを使います。
テーブルに設定してあるデフォルト値を入力するには列名も値も指定しません。
値を指定するにはテーブルの列の順序に合わせます。列名を指定するとその列の値を個別に入力できます。指定しなかった列はDEFAULTの設定値やNULLが入ります。
INSERT INTO 表 VALUES(); INSERT INTO 表 VALUES(1,2,3,4); INSERT INTO 表(列2,列4) VALUES(2,4);
UPDATE
全て行の列を更新するにはUPDATEを使います。
UPDATEは条件を指定しないと全ての行の列の値を更新します。特定の行だけを更新するにはWHEREを使って条件を付けます。
UPDATE 表 SET 列1=2; UPDATE 表 SET 列1=2 WHERE 列2=2;
DELETE
テーブルの行を削除するにはDELETEを使います。
DELETEはUPDATEと同じように、条件を指定しないと全ての行を削除します。特定の行だけを更新するにはUPDATEと同じくWHEREを使って条件を付けます。
DELETE FROM 表; DELETE FROM 表 WHERE 列2=1;
JOINについて
複数のテーブルの列を結合するにJOINを使います。JOINにはいくつか種類があります。
よく使うのはINNER JOINとLEFT JOINです。JOINの種類による違いは、よく次のような図で説明されます。
INNER JOIN
INNER JOIN - ONを使うとONで指定した列の同じ値同士で結合され、結合された行が返ります。
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列1 = 表2.列1;
また、INNER JOINは一致する行が複数ある場合は一致する行の数だけ行が返ります。
LEFT JOIN
LEFT JOIN - ONはINNER JOIN - ONと似ていますが、最初(左)に指定したテーブルの列はすべて返り、一致する行が無い場合はNULLが入ります。
SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.列1 = 表2.列1;
INNER JOINとLEFT JOINの違いは、両方に存在する行だけを返すか、最初(左)に指定したテーブルに存在する行を返すかです。
RIGHT JOINというのもありますが、これはLEFT JOINの逆バージョンのようなものです。
CROSS JOIN
あまり使いませんがCROSS JOINというのもあります。CROSS JOINでテーブルを結合すると、それぞれのテーブルの行を掛け合わせた行が返ります。
SELECT * FROM 表1 CROSS JOIN 表2;
MySQLでは、単なるJOINまたは条件のないINNER JOINもCROSS JOINと同じ結果になります。
UNION
UNIONを使うと複数の選択結果を結合することができます。JOINとは違って縦に結合します。
SELECT * FROM 表1 UNION SELECT * FROM 表2; SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;
MySQLのUNIONはデフォルトで重複した行を含めませんが、ALLを付けると重複行も含めることができます。