MENU

SQL構文メモ

目次

はじめに

自分用のSQL構文メモ。
MySQL用。

MySQLへのログイン

mysql -u ユーザー名 -p

データベース操作

データベース作成

CREATE DATABASE データベース名;

データベース削除

DROP DATABASE データベース名;

データベース一覧確認

SHOW DATABASES;

使用するデータベースの切り替え

USE データベース名;

現在使用中のデータベース確認

SELECT DATABASE();

テーブル操作

テーブル作成(基本)

CREATE TABLE テーブル名 (
フィールド名1 データ型,
フィールド名2 データ型
);

プライマリーキー・AUTO_INCREMENT付きテーブル作成

CREATE TABLE テーブル名 (
id INT AUTO_INCREMENT,
フィールド名 データ型,
PRIMARY KEY (id)
);

テーブル削除

DROP TABLE テーブル名;

テーブル一覧確認

SHOW TABLES;

テーブル定義確認

SHOW FIELDS FROM テーブル名;

フィールド(カラム)操作

フィールド追加

ALTER TABLE テーブル名 ADD 追加フィールド データ型 AFTER 既存フィールド;

フィールド削除

ALTER TABLE テーブル名 DROP 削除対象フィールド;

フィールド名変更

ALTER TABLE テーブル名 CHANGE 旧フィールド名 新フィールド名 データ型;

フィールドのデータ型変更

ALTER TABLE テーブル名 MODIFY フィールド名 データ型;

NOT NULL 制約の設定

ALTER TABLE テーブル名
MODIFY フィールド1 データ型 NOT NULL,
MODIFY フィールド2 データ型 NOT NULL;

デフォルト値の設定

ALTER TABLE テーブル名
ALTER フィールド名 SET DEFAULT 'デフォルト値';

プライマリーキー設定

ALTER TABLE テーブル名 ADD PRIMARY KEY (フィールド名);

外部キー制約設定

ALTER TABLE テーブル名
ADD FOREIGN KEY (外部キー列)
REFERENCES 参照先テーブル (主キー列);

ユーザー・権限管理

ユーザー作成

CREATE USER 'ユーザー名'@'localhost';

現在のユーザー確認

SELECT USER();

パスワード設定・変更

ALTER USER 'ユーザー名'@'localhost'
IDENTIFIED BY '新しいパスワード';

権限付与

GRANT 権限 ON データベース名.* TO 'ユーザー名'@'localhost';

主要権限一覧

権限名対象できること実務での主な用途危険度
SELECTデータデータ参照のみ参照専用、分析、レポート
INSERTデータレコード追加登録処理、ログ保存
UPDATEデータレコード更新ステータス・数量更新
DELETEデータレコード削除物理削除が必要な処理
CREATE構造テーブル作成開発作業
DROP構造テーブル削除管理作業非常に高
ALTER構造テーブル定義変更カラム追加・変更非常に高
INDEX構造インデックス作成・削除パフォーマンス調整
REFERENCES構造外部キー制約作成リレーション設計
ALL / ALL PRIVILEGES全体そのスコープ内の全権限管理者・開発環境非常に高
GRANT OPTION権限権限を他人に付与DBA非常に高

データ操作

レコード追加

INSERT INTO テーブル名 (フィールド1, フィールド2)
VALUES ('データ1', 'データ2');

レコード追加(全カラム指定)

INSERT INTO テーブル名 VALUES ('データ1', 'データ2');

レコード更新

UPDATE テーブル名
SET 更新方法1
WHERE 条件;

レコード削除

DELETE FROM テーブル名 WHERE 条件;

SELECT文(検索)

全件取得

SELECT * FROM テーブル名;

重複除外

SELECT DISTINCT フィールド名 FROM テーブル名;

条件付き検索

SELECT フィールド名
FROM テーブル名
WHERE フィールド名 比較演算子 '条件'
AND / OR / NOT フィールド名 比較演算子 '条件';

主要な比較演算子一覧

演算子意味使用例実務での主な用途
=等しいage = 30完全一致検索(ID、コードなど)
!=<>等しくないstatus != '削除'特定値を除外
>より大きいscore > 80閾値超過の判定
<より小さいprice < 1000上限チェック
>=以上created_at >= '2025-01-01'開始日以降
<=以下pdate <= CURDATE()今日以前など
BETWEEN範囲指定(含む)age BETWEEN 20 AND 29年齢・期間指定
INいずれかに一致status IN ('未処理','保留')OR条件の簡略化
NOT INいずれにも一致しないid NOT IN (1,2,3)除外リスト
LIKE部分一致name LIKE '%山田%'あいまい検索
NOT LIKE部分一致しないname NOT LIKE '%テスト%'不要データ除外
IS NULLNULL判定deleted_at IS NULL未設定データ抽出
IS NOT NULLNULLでないmemo IS NOT NULL入力済み判定
EXISTS存在確認EXISTS (SELECT 1 …)サブクエリ存在チェック
NOT EXISTS存在しないNOT EXISTS (SELECT 1 …)未対応データ抽出

よく一緒に使う論理演算子

演算子意味使用例
AND両方満たすage >= 20 AND age < 30
ORどちらか満たすrole = 'admin' OR role = 'user'
NOT否定NOT status = '削除'

並び替え

SELECT フィールド名
FROM テーブル名
ORDER BY フィールド名 ASC / DESC;

件数制限

SELECT フィールド名
FROM テーブル名
ORDER BY フィールド名
LIMIT 件数;

集計・グループ化

GROUP BY + 集計関数

SELECT フィールド名, 集計関数
FROM テーブル名
GROUP BY フィールド名;

主要な集計関数一覧

集計関数意味使用例実務での主な用途
COUNT(*)行数を数える(NULL含む)COUNT(*)件数集計、レコード数確認
COUNT(フィールド)NULLを除いた件数COUNT(score)入力済み件数の把握
SUM(フィールド)合計値SUM(amount)売上合計、数量合計
AVG(フィールド)平均値AVG(score)平均点、平均金額
MIN(フィールド)最小値MIN(price)最安値、最古日付
MAX(フィールド)最大値MAX(price)最高値、最新日付

別名(エイリアス)

SELECT フィールド名 AS 別名
FROM テーブル名;

JOIN(結合)

内部結合(INNER JOIN)

SELECT t1.フィールド, t2.フィールド
FROM テーブル1 AS t1
INNER JOIN テーブル2 AS t2
ON 条件2

外部結合(LEFT / RIGHT JOIN)

SELECT t1.フィールド, t2.フィールド
FROM テーブル1 AS t1
LEFT / RIGHT OUTER JOIN テーブル2 AS t2
ON 条件;

完全外部結合(FULL OUTER JOIN)

MySQLでは FULL OUTER JOIN は未対応

SELECT t1.フィールド, t2.フィールド
FROM テーブル1 AS t1
FULL OUTER JOIN テーブル2 AS t2
ON 条件;

MySQLでの代替方法(UNION)

SELECT t1.フィールド, t2.フィールド
FROM テーブル1 AS t1
LEFT JOIN テーブル2 AS t2
ON 条件
UNION
SELECT t1.フィールド, t2.フィールド
FROM テーブル1 AS t1
RIGHT JOIN テーブル2 AS t2
ON 条件;

※ UNION は重複行を除外する。重複を許可したい場合は UNION ALL を使用する。
※ WHERE 句で結合先テーブルの条件を指定すると、外部結合の意味が失われることがあるため注意。

インデックス

インデックス作成

CREATE INDEX インデックス名 ON テーブル名 (フィールド名);

インデックス削除

DROP INDEX インデックス名 ON テーブル名;

インデックスの利用状況確認

EXPLAIN SELECT 文;

トランザクション

トランザクション開始

BEGIN;

確定

COMMIT;

取り消し

ROLLBACK;

SQLファイルの実行(データ展開)

SOURCE ファイルパス;
  1. フィールド名 = フィールド名 + 1 など ↩︎
  2. t1.フィールド = t2.フィールド など ↩︎
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

勉強中のセキュリティエンジニアです。
初心者の目線で学んだことをまとめています。

コメント

コメントする

CAPTCHA


目次