絵でわかるWebプログラミング入門

よく使うSQL、図解で一覧

やりながら学べる基本のSQL入門では基本的なSQLを実際に使いながら学習しましたが、SQLはそれ以外にもたくさんあります。


このページでは、よく使うMySQLのSQLの一覧を図を混じえて紹介していきます。便宜上、テーブル名は、カラム名はとしています。

SELECT

テーブル内のたくさんのデータから何らかのデータを抽出するにはSELECTを使います。大きく分けると列を指定する方法と行を指定する方法があります。


全ての列を抽出するには「*」を使います。特定の列を抽出するにはその列名を指定し、複数の列を指定するには列名をカンマで区切ります。

SELECT * FROM 表;
SELECT 列2 FROM 表;
SELECT 列2,列4 FROM 表;
MySQLのSELECTの図解

全ての行ではなく、特定の行を指定して抽出するにはWHEREを使って条件を付けます。

条件を列名=値とするとその列が値と等しい行を抽出することができます。

複数の条件を&&(またはAND)でつなげると両方の条件に合う行を抽出し、||(またはOR)でつなげるといずれかの条件に合う行を抽出します。

	SELECT * FROM 表 WHERE 列1=1;
	SELECT * FROM 表 WHERE 列1=1 && 列2=2;
	SELECT * FROM 表 WHERE 列1=1 || 列2=2;
MySQLのSELECT_WHEREの図解

これらの記号は比較演算子と呼ばれ、ほかにも!=(等しくない)、>(より小さい)、<=(以上)などがあります。

INSERT

テーブルにデータを挿入するにはINSERTを使います。


テーブルに設定してあるデフォルト値を入力するには列名も値も指定しません。

値を指定するにはテーブルの列の順序に合わせます。列名を指定するとその列の値を個別に入力できます。指定しなかった列はDEFAULTの設定値やNULLが入ります。

	INSERT INTO 表 VALUES();
	INSERT INTO 表 VALUES(1,2,3,4);
	INSERT INTO 表(列2,列4) VALUES(2,4);
MySQLのINSERTの図解

UPDATE

全て行の列を更新するにはUPDATEを使います。

UPDATEは条件を指定しないと全ての行の列の値を更新します。特定の行だけを更新するにはWHEREを使って条件を付けます。

	UPDATE 表 SET 列1=2;
	UPDATE 表 SET 列1=2 WHERE 列2=2;
MySQLのUPDATEの図解

DELETE

テーブルの行を削除するにはDELETEを使います。

DELETEUPDATEと同じように、条件を指定しないと全ての行を削除します。特定の行だけを更新するにはUPDATEと同じくWHEREを使って条件を付けます。

	DELETE FROM 表;
	DELETE FROM 表 WHERE 列2=1;
MySQLのDELETEの図解

JOINについて

複数のテーブルの列を結合するにJOINを使います。JOINにはいくつか種類があります。

よく使うのはINNER JOINLEFT JOINです。JOINの種類による違いは、よく次のような図で説明されます。

JOIN結合のイメージ

INNER JOIN

INNER JOIN - ONを使うとONで指定した列の同じ値同士で結合され、結合された行が返ります。

	SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列1 = 表2.列1;
MySQLのINNER_JOINによるテーブル結合

また、INNER JOINは一致する行が複数ある場合は一致する行の数だけ行が返ります。

MySQLのINNER_JOINによるテーブル結合

LEFT JOIN

LEFT JOIN - ONINNER JOIN - ONと似ていますが、最初(左)に指定したテーブルの列はすべて返り、一致する行が無い場合はNULLが入ります。

	SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.列1 = 表2.列1;
MySQLのLEFT_JOINによるテーブル結合

INNER JOINLEFT JOINの違いは、両方に存在する行だけを返すか、最初(左)に指定したテーブルに存在する行を返すかです。

RIGHT JOINというのもありますが、これはLEFT JOINの逆バージョンのようなものです。

CROSS JOIN

あまり使いませんがCROSS JOINというのもあります。CROSS JOINでテーブルを結合すると、それぞれのテーブルの行を掛け合わせた行が返ります。

	SELECT * FROM 表1 CROSS JOIN 表2;
MySQLのCROSS_JOINによるテーブル結合

MySQLでは、単なるJOINまたは条件のないINNER JOINCROSS JOINと同じ結果になります。

UNION

UNIONを使うと複数の選択結果を結合することができます。JOINとは違って縦に結合します。

	SELECT * FROM 表1 UNION SELECT * FROM 表2;
	SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;
MySQLのUNIONによる結合

MySQLのUNIONはデフォルトで重複した行を含めませんが、ALLを付けると重複行も含めることができます。