PostgreSQL / MySQL

2025.12.07

公式ドキュメント

概要

SQL は、リレーショナルデータベースに対してデータの取得・更新・集計・定義を行うための言語です。このチートシートでは、PostgreSQL と MySQL で共通して使う基本 SQL と、破壊的操作の注意点をまとめます。

最初に覚える最小セット

操作SQL / コマンド
接続psql -U user -d dbname / mysql -u user -p dbname
一覧\dt / SHOW TABLES;
構造確認\d table / DESCRIBE table;
取得SELECT col FROM t WHERE cond LIMIT 10;
追加INSERT INTO t (...) VALUES (...);
更新UPDATE t SET col=val WHERE cond;
削除DELETE FROM t WHERE cond;
実行計画EXPLAIN / EXPLAIN ANALYZE

更新・削除・DROP・TRUNCATE の前には、同じ条件で SELECT して対象行や対象オブジェクトを確認します。本番ではバックアップとロールバック方針も確認します。

接続

コマンド説明
psql -U user -d dbnamePostgreSQL接続
mysql -u user -p dbnameMySQL接続
\q / exit接続終了
\c dbnameDB切り替え(PostgreSQL)
use dbname;DB切り替え(MySQL)

データベース操作

SQL説明
CREATE DATABASE dbname;データベース作成
DROP DATABASE dbname;データベース削除
\l / SHOW DATABASES;DB一覧表示
\dt / SHOW TABLES;テーブル一覧表示
\d table / DESCRIBE table;テーブル構造表示

テーブル操作

SQL説明
CREATE TABLE t (col type);テーブル作成
DROP TABLE t;テーブル削除
TRUNCATE TABLE t;全データ削除(高速)
ALTER TABLE t ADD col type;カラム追加
ALTER TABLE t DROP col;カラム削除
ALTER TABLE t RENAME TO new;テーブル名変更

注意: DROP DATABASEDROP TABLETRUNCATE は復旧が難しい操作です。学習用以外では、バックアップと接続先 DB を確認してから実行してください。

データ型

説明
INTEGER / INT整数
BIGINT大きな整数
DECIMAL(p,s)固定小数点
FLOAT / REAL浮動小数点
VARCHAR(n)可変長文字列
TEXT長いテキスト
BOOLEAN真偽値
DATE日付
TIMESTAMP日時
JSON / JSONBJSONデータ
UUID一意識別子

ポイント: VARCHAR(n)は長さ制限付き文字列、TEXTは無制限。PostgreSQLでは内部的に同じなので、制約が不要ならTEXTで十分です

SELECT(データ取得)

SQL説明
SELECT * FROM t;全カラム取得
SELECT col1, col2 FROM t;特定カラム取得
SELECT DISTINCT col FROM t;重複除去
SELECT * FROM t WHERE cond;条件指定
SELECT * FROM t ORDER BY col;並び替え
SELECT * FROM t LIMIT 10;件数制限
SELECT * FROM t OFFSET 10;オフセット

WHERE 条件

条件説明
col = 'value'等しい
col != 'value' / col <> 'value'等しくない
col > / < / >= / <=比較
col BETWEEN a AND b範囲
col IN ('a', 'b')リスト内
col LIKE '%pattern%'パターンマッチ
col ILIKE '%pattern%'大文字小文字無視(PostgreSQL)
col IS NULLNULL判定
col IS NOT NULL非NULL判定
cond1 AND cond2AND条件
cond1 OR cond2OR条件

実践メモ: LIKE '%pattern%'の先頭%はインデックスが効きません。前方一致('pattern%')にするか、PostgreSQLならpg_trgm拡張でGINインデックスを使いましょう。

INSERT / UPDATE / DELETE

SQL説明
INSERT INTO t (cols) VALUES (vals);データ挿入
INSERT INTO t VALUES (vals);全カラム挿入
UPDATE t SET col=val WHERE cond;データ更新
DELETE FROM t WHERE cond;データ削除

注意: UPDATE/DELETEにWHERE句を忘れると全行が更新・削除されます。本番では必ずSELECTで対象行を確認してから実行しましょう

JOIN(結合)

SQL説明
INNER JOIN t2 ON t1.id = t2.id内部結合
LEFT JOIN t2 ON t1.id = t2.id左外部結合
RIGHT JOIN t2 ON t1.id = t2.id右外部結合
FULL OUTER JOIN t2 ON ...完全外部結合
CROSS JOIN t2直積

集約関数

関数説明
COUNT(*)行数カウント
SUM(col)合計
AVG(col)平均
MIN(col)最小値
MAX(col)最大値
GROUP BY colグループ化
HAVING condグループ条件

ポイント: LEFT JOINは「左テーブルの全行を保持」、INNER JOINは「両方にある行のみ」。ユーザー一覧と投稿数の取得など、投稿がないユーザーも表示したい場合はLEFT JOINを使います。

インデックス

SQL説明
CREATE INDEX idx ON t(col);インデックス作成
CREATE UNIQUE INDEX idx ON t(col);ユニークインデックス
DROP INDEX idx;インデックス削除
\di / SHOW INDEX FROM t;インデックス一覧

実践メモ: EXPLAIN ANALYZEで実行計画と実際の実行時間を確認できます。Seq Scan(全件スキャン)が表示されたらインデックス追加を検討しましょう。

トランザクション

SQL説明
BEGIN; / START TRANSACTION;トランザクション開始
COMMIT;コミット
ROLLBACK;ロールバック
SAVEPOINT name;セーブポイント作成
ROLLBACK TO name;セーブポイントまで戻る

注意: トランザクション内で長時間処理を実行すると、ロックが保持され続けて他のクエリがブロックされます。トランザクションは短く保つのが鉄則です。

ユーティリティ

コマンド説明
EXPLAIN query;実行計画表示
EXPLAIN ANALYZE query;実行計画と実行時間
VACUUM;不要領域回収(PostgreSQL)
ANALYZE t;統計情報更新
\timing実行時間表示(PostgreSQL)

まとめ

SQL は、SELECTWHEREJOIN、集約、トランザクション、インデックスを押さえると多くの調査と実装に対応できます。変更系の SQL は、対象確認、トランザクション、バックアップ、実行計画を意識します。

PostgreSQL と MySQL では構文や関数に差があります。迷った場合は、使っているデータベースの公式ドキュメントで確認してください。

参考リソース

← 一覧に戻る
PR
PR
PR
PR