Open12

SQL(PostgreSQL)の文・句・式まとめ

tomonoritomonori

CREATE文

テーブルを作成するときに利用します。

CREATE TABLE ○○ (
    △△ □□
,   △△ □□
);

○○:テーブル名
△△:列(カラム)名
□□:データ型名

tomonoritomonori

ALTER文

テーブル定義を変更するときに利用し、以下の操作が可能です。

  • テーブル名の変更
ALTER TABLE ○○ RENAME TO △△;

○○:変更前テーブル名
△△:変更後テーブル名

  • 列の追加、削除
-- 追加
ALTER TABLE ○○ ADD COLUMN △△ □□;

-- 削除
ALTER TABLE ○○ DROP COLUMN △△;

○○:テーブル名
△△:列(カラム)名
□□:データ型名

  • 列名の変更
ALTER TABLE ○○ RENAME COLUMN △△ TO □□;

○○:テーブル名
△△:変更前列(カラム)名
□□:変更後列(カラム)名

  • 列のデータ型の変更
ALTER TABLE ○○ ALTER COLUMN △△ TYPE □□;

○○:テーブル名
△△:列(カラム)名
□□:変更後データ型名

tomonoritomonori

INSET文

データを挿入するときに利用します。

INSERT INTO ○○ △△ □□;

-- 例(m_fruitsテーブルに対しnameは'Apple', fruit_idは1, priceは5.0のレコードを挿入している)
INSERT INTO m_fruits (name, fruit_id, price) VALUES ('Apple', 1, 5.0);

○○:テーブル名
△△:列(カラム)名 ※テーブルで定義した列の順番の通りに□□を与えているなら省略可能
□□:挿入データ

tomonoritomonori

UPDATE文

データを更新するときに利用します。

UPDATE ○○ SET △△ = □□;

-- 例(m_fruitsテーブルのpriceカラムの全フィールドの値を、1.1乗算した値にしている)
UPDATE m_fruits SET price = price * 1.1;

○○:テーブル名
△△:更新対象の列(カラム)名
□□:更新後の値

tomonoritomonori

DELETE文

データを削除するときに利用します。

DELETE FROM ○○ WHERE △△;

-- 例(m_fruitsテーブルのpriceカラムの値が10以上のフィールドを削除している)
DELETE FROM m_fruits WHERE price >= 10;

○○:テーブル名
△△:削除するレコードの条件指定

tomonoritomonori

SELECT文

テーブルからデータを取得するときに利用します。

SELECT ○○ FROM △△ ...;

-- 例(m_fruitsテーブルのpriceカラムの値が10以上のフィールドからnameとpriceをカラム名を指定して(フルーツ名と価格)取得している)
-- ※ASは省略可能です。
SELECT
    name AS フルーツ名
,   price AS 価格
FROM
    m_fruits
WHERE
    price >= 10;

○○:取得したいデータ
△△:テーブル名
... :句(join, left join, where, group by, order by, limitなど)が続きます

tomonoritomonori

JOIN句(+ON句)

複数のテーブルを結合するときに利用し、以下の結合方法などがあります。

  • CROSS JOIN
    2つのテーブルのすべての行の組み合わせを結合して出力します。レコード数が3と4のテーブルの結合の場合、出力されるレコード数は12(3×4)になります。
SELECT * FROM ○○ CROSS JOIN △△

○○:テーブル名1
△△:テーブル名2

  • JOIN(INNER JOIN)
    2つのテーブル間でON句の結合条件と一致するレコードのみ結合して出力します。
SELECT * FROM ○○ JOIN △△ ON □□

○○:テーブル名1
△△:テーブル名2
□□:結合条件

  • LEFT JOIN(LEFT OUTER JOIN)
    FROM句側のテーブルをベースとし、以下の2条件で結合結果が出力されます。
    1.ON句の結合条件と一致するレコード→条件一致したLEFT JOIN句側のテーブルのレコードが結合されます。
    2.ON句の結合条件と一致しないレコード→全カラム値がNULLのレコードが結合されます。
SELECT * FROM ○○ LEFT JOIN △△ ON □□

○○:テーブル名1
△△:テーブル名2
□□:結合条件

  • RIGHT JOIN(RIGHT OUTER JOIN)
    RIGHT JOIN句側のテーブルをベースとし、以下の2条件で結合結果が出力されます。
    1.ON句の結合条件と一致するレコード→条件一致したFROM句側のテーブルのレコードが結合されます。
    2.ON句の結合条件と一致しないレコード→全カラム値がNULLのレコードが結合されます。
SELECT * FROM ○○ RIGHT JOIN △△ ON □□

○○:テーブル名1
△△:テーブル名2
□□:結合条件

  • FULL JOIN(FULL OUTER JOIN)
    LEFT JOIN句とRIGHT JOIN句を組み合わせたような結合方法です。以下の条件で結合結果が出力されます。ほとんど使わないらしいです。
    1.ON句の結合条件と一致するレコード→両テーブルで条件一致したレコード同士が結合されます。
    2.ON句の結合条件と一致しないレコード→全カラム値がNULLのレコードが結合されます。
SELECT * FROM ○○ FULL JOIN △△ ON □□

○○:テーブル名1
△△:テーブル名2
□□:結合条件

tomonoritomonori

WHERE句(+LIKE句、BETWEEN句、IN句、IS NULL句、比較演算子、論理演算子など...)

検索条件を指定するときに利用し、以下の検索条件して方法などがあります。

  • LIKE句
    対象のカラムに対して文字列検索できます。
SELECT * FROM ○○  WHERE △△ LIKE □□;

--例(m_fruitsテーブルのnameカラムで「○リンゴ:○は0文字以上の文字列」のフィールドを取得している)
SELECT * FROM m_fruits  WHERE name LIKE '%リンゴ';

○○:テーブル名
△△:対象カラム名
□□:検索文字(%:0文字以上の任意の文字列、_:任意の1文字)

  • BETWEEN句
    対象のカラムに対して指定した範囲内の値を持つフィールドを検索できます。
SELECT * FROM ○○ WHERE △△ BETWEEN A AND B;

--例(m_fruitsテーブルのpriceカラムで5以上10以下の価格のフィールドを取得している)
SELECT * FROM m_fruits WHERE price BETWEEN 5 AND 10;

○○:テーブル名
△△:対象カラム名
A :取得する下限値
B :取得する上限値

  • IN句
    対象のカラムに対して複数の条件で検索できます。
SELECT * FROM ○○ WHERE △△ IN(□□);

--例(m_fruitsテーブルのnameカラムでリンゴかブドウの名前を持つフィールドを取得している)
SELECT * FROM m_fruits WHERE name IN('リンゴ', 'ブドウ');

○○:テーブル名
△△:対象カラム名
□□:検索文字群

  • IS NULL句
    NULL値を持つレコードを検索できます。NULL値を持たないレコードの検索はIS NOT NULL句で可能です。
SELECT * FROM ○○ WHERE △△ IS NULL;

○○:テーブル名
△△:対象カラム名

  • 比較演算子
    値と値の比較してTRUEの条件を検索でき、以下の6種が使用可能です。
    ※NULL値は弾かれます。
    • <:小なり
    • >:大なり
    • <=:以下
    • >=:以上
    • =:等しい
    • <> or !=:等しくない
SELECT * FROM ○○ WHERE △△ X □□;

○○:テーブル名
△△:比較値1
X :比較演算子
□□:比較値2

  • 論理演算子
    複数の検索条件を指定したい場合や条件の否定をしたいときに利用し、以下の3種類が使用可能です。
    • AND:論理積(両方TRUEならTRUE、それ以外はFALSE)
    • OR:論理和(両方FALSEならFALSE、それ以外はTRUE)
    • NOT:否定(TRUEならFALSE、FALSEならTRUE)
SELECT * FROM ○○ WHERE (△△ AND □□) OR (××);

○○:テーブル名
△△:検索条件1
□□:検索条件2
××:検索条件3

tomonoritomonori

GROUP BY句(+集計関数、HAVING句)

任意のカラムの値に基づいてレコードをグループ化するときに利用します。

SELECT X(○○) FROM  △△ GROUP BY □□ HAVING ××;

--例(m_fruitsテーブルのtypeカラムでグループ化し、type毎(typeの値が5以上)のレコード数を取得している)
SELECT
    COUNT(type)
FROM
    m_fruits
GROUP BY
    type
HAVING
    type >= 5;

X :集計関数(COUNT:件数、SUM:合計値、ANG:平均値、MAX:最大値、MIN:最小値)
○○:集計したいカラム名
△△:テーブル名
□□:グループ化したいカラム名
××:検索条件(グループ化後に実行される)

tomonoritomonori

ORDER BY句

SELECT文で取得したデータに対して、ソートをしたいときに利用します。

SELECT ○○ FROM △△ ORDER BY ○○ A;

-- 例(m_fruitsテーブルのpriceカラムの値を降順でソートして取得している)
-- ※ ORDER BY句はSELECT文の後に実行されるので「価格 DESC」としても実行可能です。
SELECT
    price AS 価格
FROM
    m_fruits
ORDER BY
    price DESC;

○○:取得したいデータ
△△:テーブル名
A :並び変える順番(ASC:昇順、DESC:降順)※何も指定しなければASCが適応される

tomonoritomonori

LIMIT句(+OFFSET句)

取得件数を制限したいときに利用します。

SELECT * FROM ○○ LIMIT △△ OFFSET ××;

-- 例(m_fruitsテーブルのレコードを6番目から10件取得している)
-- ※ OFFSETは省略可能です。
SELECT * FROM m_fruits LIMIT 10 OFFSET 5;

○○:テーブル名
△△:取得数
××:取得開始データのオフセット