cafegale(LeafCage備忘録)

LeafCage備忘録(はてなダイアリー)と統一しました。

テーブルの閲覧の仕方いろいろ

SQLについて軽くまとめてみた - LeafCage備忘録より分離。

結合して一覧する

SELECT {フィールド名}[, {テーブル名}.{フィールド名}] FROM {テーブル名} [INNER] JOIN {相手テーブル名} ON {テーブル名}.{フィールド名} = {テーブル名}.{フィールド名};
SELECT {フィールド名}[, {テーブル名}.{フィールド名}] FROM {テーブル名} LEFT [OUTER] JOIN {相手テーブル名} ON {テーブル名}.{フィールド名} = {テーブル名}.{フィールド名};
SELECT {フィールド名}[, {テーブル名}.{フィールド名}] FROM {テーブル名} RIGHT [OUTER] JOIN {相手テーブル名} ON {テーブル名}.{フィールド名} = {テーブル名}.{フィールド名};

結合時重複レコードを除外(DISTINCT)

SELECT DISTINCT 顧客名, 商品名, 単価 FROM 受注表, 商品表 WHERE 受注表.商品番号=商品表.商品番号

SELECT文で得た結果を結合する(UNION)

カラム数やデータ型を一致させなければUNIONできない。
UNION 重複したレコードは削除する(DISTINCT処理みたいなことをする)

(SELECT 1, 2 FROM DUAL)
UNION
(SELECT 1, 2 FROM DUAL);

UNION ALL 重複したレコードでもそのまま表示

SELECT 1, 2 FROM DUAL
UNION ALL
SELECT 1, 2 FROM DUAL;

FROMの後にUNIONを使うときには固有名をつける必要あり

SELECT count(*) FROM (
  (SELECT id FROM BBS_MESSAGE)
  UNION ALL
  (SELECT id FROM BBS_REPLY)
) as UNI;

レコード数を取得する

SELECT count(*) FROM {テーブル名};

ソートする(ORDER BY句)

SELECT * FROM {テーブル名} WHERE {条件} ORDER BY {フィールド名} [DESC][, {フィールド名2} [DESC]]

DESCを付けると降順(ASCは昇順)
フィールド名2を指定したとき、フィールド名1が全体に影響、フィールド名2はフィールド名2部分にのみ影響

グループ化する

SELECT dept_no, count(*) FROM user_master2 GROUP BY dept_no ;

つまりGROUP BY以下で指定したフィールドで同じ内容のものは1レコードに圧縮され、圧縮された部分は集合関数を使わないと取り出せなくなる。
(この場合dept_noを基準にレコードが圧縮される)

ダミーデータ

SELECT のあとFROMを付けないとダミーカラムが作成される。
ダミーカラムに名前を付けないと'COUNT'という名前になる。
(一番最初のダミーデータにAS xxx)とすると以後ダミーカラムはxxxになる)

SELECT SUM(COUNT)
FROM(
    SELECT COUNT(countTestA.*)
    FROM (
        SELECT '333'
        UNION 
        SELECT 'fffff'
        UNION 
        SELECT '88888888'
        ) countTestA

    UNION ALL

    SELECT COUNT(countTestB.*)
    FROM (
        SELECT 'uuu'
        UNION 
        SELECT 'r'
        ) countTestB

    UNION ALL

    SELECT COUNT(countTestC.*)
    FROM (
        SELECT 'erer'
        UNION 
        SELECT 'erer'
        UNION 
        SELECT 'erer'
        UNION 
        SELECT '6'
        ) countTestC
) uninTest