PostgreSQL / MySQL

2025.12.07

公式ドキュメント

この記事の要点

SELECT/INSERT/UPDATE/DELETEのCRUD4操作が基本
JOIN(INNER/LEFT/RIGHT)でテーブル結合
EXPLAIN ANALYZEで実行計画を確認し、インデックスで高速化

接続

コマンド説明
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;テーブル名変更

データ型

説明
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)

参考リソース

この技術を体系的に学びたいですか?

未来学では東証プライム上場企業のITエンジニアが24時間サポート。月額24,800円から、退会金0円のオンラインIT塾です。

メールで無料相談する
← 一覧に戻る