SELECT文

SELECTの使い方

SELECT 式のリスト; --条件に合う行を検索する
FROM句で表を指定する
SELECT 列名 FROM 表名;
列に別名を付ける
SELECT 列名 AS 別名 FROM 表名;
WHERE句で検索条件を指定する
SELECT 列名 FROM 表名 WHERE 検索条件;
IN演算子
SELECT 列名 FROM 表名 WHERE 列名 IN(値1,値2,...); --列挙した値のどれかなら真
BETWEEN演算子
SELECT 列名 FROM 表名 WHERE 列名 BETWEEN1 AND2; --値1〜値2の範囲内なら真
NULLを検索する
SELECT 列名 FROM 表名 WHERE 列名 IS [NOT] NULL;
LIKE演算子
SELECT 列名 FROM 表名 WHERE 列名 LIKE パターン文字列; --パターンマッチングを行なう

パターン文字列で使用出来るワイルドカード

% 0文字以上の任意の文字列
_ 任意の文字列
DISTINCTで重複データを除く
SELECT DISTINCT 列名 FROM 表名 ;

ORDER BY句で並び替える

SELECT 列名 FROM 表名 ORDER BY 列名 [ASC]; --昇順に並び替える
SELECT 列名 FROM 表名 ORDER BY 列名 DESC; --昇順に並び替える

集計関数を使う

SELECT SUM(列名) FROM 表名;    --合計値
SELECT AVG(列名) FROM 表名;    --平均値
SELECT MAX(列名) FROM 表名;    --最大値
SELECT MIN(列名) FROM 表名;     --最小値
SELECT COUNT(列名) FROM 表名;--行数

GROUP BY句でグループにまとめる

SELECT 列名 FROM 表名 GROUP BY グループ化する列名;
HAVING句でグループ化の結果を判定する
SELECT 列名 FROM 表名 GROUP BY グループ化する列名 HAVING 検索条件;

CASE式

if,switchと似た場分け処理

SELECT 列名 CASE
    WHEN 値式 = 値式1 THEN 戻り値1
    WHEN 値式 = 値式2 THEN 戻り値2
    ...
    ELSE 戻り値
    END 
FROM 表名

表の結合

交差結合
SELECT * FROM 表名1 CROSS JOIN 表名2;--二つの表の全ての行の組み合わせを作る
内部結合
SELECT * FROM 表名1 [INNER] JOIN 表名2 ON 結合条件;--指定列を基準にして二つの表に共通にある行を結合する
左外部結合
SELECT * FROM 表名1 LEFT [OUTER] JOIN 表名2 ON 結合条件;--左の表にしかない行+共通にある行を取り出して結合する
右外部結合
SELECT * FROM 表名1 RIGHT [OUTER] JOIN 表名2 ON 結合条件;--共通にある行+右の表にしかない行を取り出して結合する
USING句で結合を行なう

上記でつかった ON 検索条件を代替するもの

SELECT * FROM 表名1            [INNER]  JOIN 表名2 USING(列名リスト);
SELECT * FROM 表名1 LEFT   [OUTER]  JOIN 表名2 USING(列名リスト);
SELECT * FROM 表名1 RIGHT [OUTER]  JOIN 表名2 USING(列名リスト);
SELECT * FROM 表名1 FULL   [OUTER]  JOIN 表名2 USING(列名リスト);
自然結合を行なう

USING句を使った結合よりさらに簡潔に結合を行なう

SELECT * FROM 表名1 NATURAL           [INNER]  JOIN 表名2;
SELECT * FROM 表名1 NATURAL LEFT   [OUTER]  JOIN 表名2;
SELECT * FROM 表名1 NATURAL RIGHT [OUTER]  JOIN 表名2;
SELECT * FROM 表名1 NATURAL FULL   [OUTER]  JOIN 表名2;
自己結合
SELECT 列名 FROM 表名 別名1, 表名 別名2;--同じ表同士を結合する

問い合わせ結果の集合

UNIONで和集合を得る
SELECT 命令 UNION [ALL] SELECT 命令;--二つの表をまとめる
INTERSECTで共通集合を得る
SELECT 命令 INTERSECT SELECT 命令;--二つの表の共通部分を取得する
EXCEPTで差集合を得る
SELECT 命令 EXCEPT SELECT 命令;--はじめのSELECT結果からふたつめのSELECT結果を引いた残りを抜き出す

副問い合わせ

SELECT文中の値式の部分にSELECT命令を書く事が出来る。より複雑な問い合わせが可能になる
副問い合わせはWHERE句の中に記述される事が多いが、構文としては、SELECT,FROM,WHERE,HAVING の中に記述出来る。

SELECT 列名 FROM 表名 WHERE (SELECT ...);
IN演算子
SELECT 列名 FROM 表名 検索条件 [NOT] IN (SELECT ...);--()の中のどれかなら真
EXISTS演算子
SELECT 列名 FROM 表名 [NOT] EXISTS (SELECT ...);--副問い合わせの結果が1行以上あれば真
ANY演算子
SELECT 列名 FROM 表名 値式 比較演算子 ANY (SELECT ...);--副問い合わせの結果の中のどれかと比較条件が取れればTRUE
ALL演算子
SELECT 列名 FROM 表名 値式 比較演算子 ALL (SELECT ...);--副問い合わせの結果の中の全てと比較条件が取れればTRUE

ビュー

ビューとは問い合わせで得た結果に、識別用の名前(ビュー名)を付け再利用出来るようにした仮想の表。

ビューの定義
CREATE VIEW ビュー名 (列名1,列名2, ...) AS SELECT文;
CREATE VIEW ビュー名 AS SELECT文;

SELECT * FROM ビュー名;--ビューを利用した文
ビューを使った更新

ビューに対してUPDATE,DELETE,INSERTなどの更新系命令を実行し、そのビューの元になった実表を更新する事が出来る

ビューの削除
DROP VIEW ビュー名;