【SQL基本】早見表
はじめに
記者は、書籍やUdemyの動画を通じてSQLを学習し、実務でよく使うものをまとめました。
本記事は 備忘録 です。
SQLとは?
SQL(Structured Query Language)は、データベースを操作する言語です。
データの 追加・取得・更新・削除 を行えます。
イメージ
データベースは「本棚」、テーブルは「ジャンル別の棚」、データは「本」。
ジャンルごとに整理すれば、本(データ)を素早く取り出せる!
テーブル
データをカテゴリごとに分けて、スムーズに管理するための入れ物。
基本操作
CRUD
テーブルの作成、取得、更新、削除を行うためのSQL文
| 操作 | SQL文 | 
|---|---|
| テーブル作成 | CREATE TABLE TB名(カラム名1 型名, ...); | 
| テーブル一覧取得 | SHOW TABLES; | 
| テーブル情報取得 | DESCRIBE TB名; | 
| テーブル更新 | ALTER TABLE TB名 ADD COLUMN カラム名 型名; | 
| テーブル削除 | DROP TABLE TB名; | 
型
データの種類を指定するためのSQL文における型の種類
| 型 | 型名 | 解説 | 
|---|---|---|
| 文字列型 | VARCHAR(n) | テキストデータ | 
| TEXT | 長いテキストデータ | |
| 数値型 | INT | 一般的な整数 | 
| BIGINT | 大きな整数(-9京 ~ 9京くらい) | |
| DECIMAL(p, s) | 固定小数点( p= 総桁数,s= 小数桁数) | |
| FLOAT / DOUBLE | 浮動小数点数 | |
| ブール型(真偽型) | BOOLEAN | TRUE/FALSE | 
| 日付・時刻型 | DATE | 日付(YYYY-MM-DD) | 
| DATETIME | 日時(YYYY-MM-DD HH:MM:SS) | |
| TIMESTAMP | タイムゾーン付き日時 | |
| その他 | BLOB | バイナリデータ(画像・ファイルなど) | 
| UUID | 一意の識別子(PostgreSQLなど) | 
制約
データが正しく入力されるようにするためのルールや制限
| 制約 | 制約名 | 解説 | 
|---|---|---|
| 一意性制約 | PRIMARY KEY | テーブルの主キー( NOT NULL+UNIQUE) | 
| UNIQUE | 重複を許可しない列 | |
| 参照制約 | FOREIGN KEY | 他のテーブルの主キーを参照する | 
| 値制約 | NOT NULL | NULLを許可しない | 
| CHECK | 特定の条件を満たす必要がある(例: age > 18) | |
| デフォルト値 | DEFAULT | 指定がない場合の初期値を設定 | 
| 自動採番 | AUTO_INCREMENT | 数値型のカラムを自動で増加させる(MySQLなど) | 
| SERIAL | PostgreSQLの自動増分( BIGSERIALもあり) | |
| その他 | INDEX | 検索速度を向上させるための索引 | 
| UNIQUE INDEX | UNIQUE制約付きの索引 | 
データ
数字や文字、バイナリなどの実際の情報。
基本操作
CRUD
データの作成、取得、更新、削除を行うためのSQL文
| 操作 | SQL文 | 
|---|---|
| レコードの追加 | INSERT INTO TB名(カラム名1, ...) VALUES(カラム1の値, ...),(カラム1の値,  ...); | 
| レコードの取得 | SELECT 列名 FROM TB名; | 
| レコードの更新 | UPDATE TB名 SET カラム名1 = 新しい値, ... WHERE 条件; | 
| レコードの削除 | DELETE FROM TB名 WHERE 条件; | 
トランザクション
一連のデータ操作をまとめて実行し、途中で失敗しても元に戻せる仕組み
| 操作 | 構文 | 
|---|---|
| トランザクション開始 | BEGIN; 処理 COMMIT; | 
| すべて成功したら確定 | BEGIN; 処理 COMMIT; | 
| 途中でエラーが出たら全て取消 | BEGIN; 処理 ROLLBACK; | 
検索
基本検索
データベースから必要な情報を取得する基本的な方法
| 操作 | 構文 | 解説 | 
|---|---|---|
| すべてのデータ取得 | SELECT * FROM TB名; | テーブルの全データを取得 | 
| 特定の列を取得 | SELECT カラム名1, カラム名2 FROM TB名; | 指定した列のみ取得 | 
| 件数制限 | SELECT * FROM TB名 LIMIT レコード数; | 取得する行数を制限 | 
条件検索
特定の条件に一致するデータを取得する方法。
| 操作 | 構文 | 解説 | 
|---|---|---|
| 条件付き取得 | SELECT * FROM TB名 WHERE 条件; | WHEREで条件を指定 | 
| 複数条件 | SELECT * FROM TB名 WHERE カラム名1 = 値1 AND カラム名2 = 値2; | AND/ORで条件を組み合わせ | 
| 部分一致検索 | SELECT * FROM TB名 WHERE カラム名 LIKE '%パターン%'; | LIKEでパターン検索 (%= 任意の文字列) | 
| 範囲検索 | SELECT * FROM TB名 WHERE カラム名 BETWEEN 値1 AND 値2; | 指定範囲内のデータを取得 | 
| 特定リスト検索 | SELECT * FROM TB名 WHERE カラム名 IN (値1, 値2); | INで複数値のいずれかに一致 | 
| NULL判定 | SELECT * FROM TB名 WHERE カラム名 IS NULL; | NULL値を検索 | 
並び替え・重複除外
データを順番に並べたり、重複を取り除く方法。
| 操作 | 構文 | 解説 | 
|---|---|---|
| 並び替え | SELECT * FROM TB名 ORDER BY カラム名 ASC/DESC; | ASC(昇順) /DESC(降順) | 
| 重複除外 | SELECT DISTINCT カラム名 FROM TB名; | 重複を排除したデータ取得 | 
集約
データをまとめて集約する方法。
| 操作 | 構文 | 解説 | 
|---|---|---|
| グループ化 | SELECT カラム名, COUNT(*) FROM TB名 GROUP BY カラム名; | GROUP BYで同じ値を持つ行をグループ化し、集計関数を適用 | 
| 条件付き集計 | SELECT column, COUNT(*) FROM TB名 GROUP BY カラム名 HAVING 条件; | HAVINGを使ってGROUP BYした後の集計結果に条件を適用 | 
補足
グループ化はデータをカテゴリごとにまとめ、集計の際に頻繁に使われる。
HAVING は WHERE の集計バージョン のようなものとして覚えるとよい。
結合
複数のテーブルを関連づけて、1つの結果を取得するSQL文
| 操作 | 構文 | 解説 | 
|---|---|---|
| 内部結合 | SELECT * FROM TB1名 INNER JOIN TB2名 ON TB1名.id = TB2名.id; | INNER JOINで共通データを取得 | 
| 左外部結合 | SELECT * FROM TB1名 LEFT JOIN TB2名 ON TB1名.id = TB2名.id; | LEFT JOINで左側を優先 | 
便利な処理
データの操作や計算を簡単にするための便利な機能や方法をピックアップします。
条件分岐
条件に応じて結果を変更する方法。
| 操作 | 構文 | 解説 | 
|---|---|---|
| 条件分岐 | SELECT CASE WHEN 条件 THEN 値WHEN 条件 THEN 値 ELSE 値 END FROM TB名; | 条件に応じて結果を変化させる | 
関数
データを処理したり、変換したりするための組み込みツール。
算術関数
数値の計算や処理を行う関数
| 役割 | 関数 | 例 | 
|---|---|---|
| 絶対値を求める | ABS(num) | SELECT ABS(-10); → 10 | 
| 切り上げ / 切り捨て | CEIL(num)/FLOOR(num) | SELECT CEIL(4.3); → 5 / SELECT FLOOR(4.9); → 4 | 
| 小数点以下 d桁で四捨五入 | ROUND(num, d) | SELECT ROUND(3.14159, 2); → 3.14 | 
| 剰余(余り)を求める | MOD(a, b) | SELECT MOD(10, 3); → 1 | 
| 0 以上 1 未満のランダムな値を取得 | RAND() | SELECT RAND(); → 0.8457 | 
文字列関数
文字列の操作を行う関数
| 役割 | 関数名 | 
|---|---|
| 文字列を結合 | CONCAT(s1, s2) | 
| 部分文字列を取得 | SUBSTRING(s, start, length) | 
| 文字列の長さを取得 | LENGTH(s) | 
| 小文字 / 大文字に変換 | LOWER(s)/UPPER(s) | 
| 前後の空白を削除 | TRIM(s) | 
日時関数
日付や時刻の処理を行う関数
| 役割 | 関数名 | 
|---|---|
| 現在の日時を取得 | NOW()/CURRENT_TIMESTAMP | 
| n 単位だけ日付を加算 | DATE_ADD(d, INTERVAL n unit) | 
| 2つの日付の差を日数で取得 | DATEDIFF(d1, d2) | 
| 指定した単位 (年, 月, 日) を抽出 | EXTRACT(unit FROM d) | 
| 指定フォーマットで日付を表示 | FORMAT(d, format) | 
変換関数
データ型を変換する関数
| 役割 | 関数 | 例 | 
|---|---|---|
| 指定したデータ型に変換 | CAST(value AS type) | SELECT CAST(123 AS CHAR); → '123' | 
| 指定したデータ型に変換( CASTと同じ) | CONVERT(value, type) | SELECT CONVERT(123, CHAR); → '123' | 
| 文字列を日付に変換 | STR_TO_DATE(str, format) | SELECT STR_TO_DATE('29-01-2025', '%d-%m-%Y'); → '2025-01-29' | 
| 数値をカンマ区切りにフォーマット | FORMAT(num, d) | SELECT FORMAT(1234567.89, 2); → '1,234,567.89' | 
集約関数
複数のデータをまとめて、統計的な計算を行う関数。
| 役割 | 関数名 | 
|---|---|
| 行数をカウント | COUNT(*) | 
| 合計を計算 | SUM(x) | 
| 平均値を計算 | AVG(x) | 
| 最小値を取得 | MIN(x) | 
| 最大値を取得 | MAX(x) | 
論理関数
条件に基づいて値を返したり、選択を行うための関数。
| 役割 | 関数名 | 
|---|---|
| 条件分岐 | CASE WHEN ... THEN ... ELSE ... END | 
| 条件に応じた値を返す | IF(condition, true_value, false_value) | 
| NULL でない最初の値を返す | COALESCE(x1, x2, ..., xn) | 
ウィンドウ関数
データのグループ内で順位や連番を計算するための関数。
| 役割 | 関数名 | 
|---|---|
| 順位を取得(同順位あり) | RANK() OVER (PARTITION BY col ORDER BY col2) | 
| 順位を取得(同順位なし) | DENSE_RANK() OVER (PARTITION BY col ORDER BY col2) | 
| 連番を振る | ROW_NUMBER() OVER (PARTITION BY col ORDER BY col2) | 
JSON関数
JSONデータの操作や取得を行う関数(※一部のDBMS限定)。
| 役割 | 関数名 | 
|---|---|
| JSON データから値を取得 | JSON_EXTRACT(json, path) | 
| JSON オブジェクトを作成 | JSON_OBJECT(key, value, ...) | 
| JSON 配列を作成 | JSON_ARRAY(value1, value2, ...) | 
高度なデータ処理
複雑な条件や複数の操作を組み合わせて、効率的にデータを取得・操作する方法。
サブクエリ
複数の操作を組み合わせて、より複雑なデータを取得する方法。
| 操作 | 構文 | 解説 | 
|---|---|---|
| サブクエリ | SELECT * FROM table WHERE column = (SELECT column FROM table2 WHERE condition); | SELECTの結果を利用 | 
| UNION | SELECT column FROM table1 UNION SELECT column FROM table2; | 2つのクエリの結果を結合(重複除外) | 
参考記事
・SQLの基本をたった1時間で学べます(Youtube)
・データベースのデータをビジネスパーソンが現場で活用するためのSQL(Udemy)
・SQL ゼロからはじめるデータベース操作(書籍)
など...




Discussion