SQLの書き方が覚えられない自分用にコピペシートを作成しました。
随時更新していく。
SELECT文
オプション全部載せver
SELECT
別名1.カラム名1, 別名1.カラム名2, 別名2.カラム名1, ...
FROM
テーブル名1 AS 別名1
LEFT JOIN テーブル名2 AS 別名2
ON 別名1.カラム名 = 別名2.カラム名
WHERE
条件式
AND 条件式
OR 条件式
ORDER BY
カラム名 ASC または DESC
LIMIT
返す行数の限度
OFFSET
返す行の開始位置
;
基本構文
SELECT カラム名 FROM テーブル名;
テーブル結合 JOIN
(PostgreSQL)JOINのLEFT・RIGHT・INNERの結果早見表
別名 AS
- 「AS」は省略可能
「AS」省略ver
FROM
テーブル名1 別名1
LEFT JOIN テーブル名2 別名2
ON 別名1.カラム名 = 別名2.カラム名
カラムを選択する際に、「テーブル名(別名).」を付けなくてもSELECTできるが、同一のカラム名が存在する場合にエラーになるため、付けた方がよい
エラーケース
-- productテーブル
id | name | price | description | created_at | updated_at
----+-----------+-------+---------------+----------------------------+----------------------------
1 | product1 | 1000 | description1 | 2023-03-05 11:14:59.348303 | 2023-03-05 11:14:59.348303
2 | product2 | 2000 | description2 | 2023-03-05 11:14:59.348303 | 2023-03-05 11:14:59.348303
3 | product3 | 3000 | description3 | 2023-03-05 11:14:59.348303 | 2023-03-05 11:14:59.348303
-- salesテーブル
id | name | price | description | created_at | updated_at
----+-----------+-------+---------------+----------------------------+----------------------------
1 | product1 | 1000 | description1 | 2023-03-05 11:14:59.348303 | 2023-03-05 11:14:59.348303
2 | product2 | 2000 | description2 | 2023-03-05 11:14:59.348303 | 2023-03-05 11:14:59.348303
3 | product3 | 3000 | description3 | 2023-03-05 11:14:59.348303 | 2023-03-05 11:14:59.348303
-- SQL発行
SELECT
id, name, description -- id がどちらのテーブルにも存在
FROM
product AS p
LEFT JOIN sales AS s
ON p.id = s.product_id;
-- 実行結果
-- ERROR: column reference "id" is ambiguous
並び替え ORDER BY
-
ASC
昇順(1,2,3,...100)
デフォルト値。「ORDER BY」記述しないと自動的に昇順になる。 -
DESC
降順(100,99,98,...1)
新しい順で表示したい時に使うことが多い
INSERT文
1行挿入
INSERT INTO テーブル名 (カラム名1, カラム名2, カラム名3, ... ) VALUES (値1, 値2, 値3, ... );
複数行挿入
INSERT INTO テーブル名 (カラム名1, カラム名2, カラム名3, ... ) VALUES
(値1-1, 値1-2, 値1-3, ... ),
(値2-1, 値2-2, 値2-3, ... ),
(値3-1, 値3-2, 値3-3, ... ),
(値4-1, 値4-2, 値4-3, ... );
UPDATE文
UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, ... WHERE 条件式 ;
DELETE文
全行削除
DELETE FROM テーブル名;
該当行のみ削除
DELETE FROM テーブル名 WHERE カラム名 = '値';
CREATE TABLE
CREATE TABLE teble_name (
-- カラム名 データ型
id SERIAL,
-- 外部キー カスケード
column_name TEXT NOT NULL REFERENCES teble_name (column_name) ON DELETE CASCADE,
-- デフォルト値設定
column_name BOOLEAN NOT NULL DEFAULT false,
-- タイムスタンプ
created_at TIMESTAMP DEFAULT now(),
updated_at TIMESTAMP DEFAULT now(),
-- プライマリーキー
PRIMARY KEY (id)
);
カラム追加・削除・変更
-- 追加
ALTER TABLE テーブル名 ADD COLUMN カラム名 データ型;
-- 削除
ALTER TABLE テーブル名 DROP COLUMN カラム名;
-- 変更
ALTER TABLE テーブル名 ALTER COLUMN カラム名 TYPE データ型