🐾

「SQL書けますよ」って言いたい

2023/08/02に公開

はじめに

本記事の概要

SQL 文の書き方について、自分用にまとめたものです

網羅はしていません
また、データベースについては特に触れません

背景

「SQL 書けますよ(`・ω・)」

って言いたくて

SQL について

SQL とは

RDB(リレーショナルデータベース) を操作するための言語のこと

ちなみに 「SQL 文」というと、 SQL を使った命令文(クエリ)のことだそう
https://wa3.i-3-i.info/word15078.html

3つの分類

SQL は大きく3つに分類されるそうで、今回はこのうち、データ定義言語とデータ操作用語を対象にしています

  • データ定義言語(DDL: data definition language)
    データベースの定義を行う
  • データ操作言語(DML: data manipulation language)
    データベースの操作を行う
  • データ制御言語(DCL: data control language)
    トランザクション管理を行う

基本的なルール

  • SQL の予約語は、大文字で書くのが一般的
  • 適宜改行できる
  • 文末には;をつける

テーブル操作

テーブル作成

CREATE TABLE テーブル名 (
    カラム名1 データ型 オプション,
    カラム名2 データ型 オプション,
    カラム名3 データ型 オプション,
    ・・・
);

データ型について

格納するデータの型のこと
DB の種類によって微妙に異なるため、ここは都度確認する

オプションについて

データの整合性を維持し、品質を高めるための制約

主なもの

オプション 説明
NOT NULL 値がない状態を許可しない
UNIQUE テーブル内で一意でなければならない
PRIMARY KEY レコードを一意に識別するためのキー
FOREIGN KEY テーブル間で関連性を定義するためのキー
CHECK 保存できる値の制限
DEFAULT 値が指定されなかった場合に自動的に割り当てられる値

テーブル削除

DROP TABLE テーブル名;

テーブル変更

テーブル名変更

ALTER TABLE テーブル名
RENAME TO 新しいテーブル名;

カラム名変更

ALTER TABLE テーブル名
RENAME COLUMN 元のカラム名 TO 新しいカラム名;

カラム追加

ALTER TABLE テーブル名
ADD COLUMN カラム名 データ型 オプション;

カラム変更

ALTER TABLE テーブル名
MODIFY COLUMN カラム名 新しいデータ型 新しいオプション;

カラム削除

ALTER TABLE テーブル名
DROP COLUMN カラム名;

データ操作(基本形)

データ抽出

SELECT カラム名 FROM テーブル名;
  • カラム名は,区切りで複数指定できる
  • すべてのカラムを取得したい場合は、カラム名を*とする

データ挿入

INSERT INTO テーブル名 (カラム名1,カラム名2,...)
VALUES (1,2,...);
  • カラム名と値は、順番を対応させる必要がある

データ更新

UPDATE テーブル名 SET カラム名 =;

データ削除

DELETE FROM テーブル名;

データ操作(条件指定)

絞り込み

WHERE 条件式;

条件式について

以下の比較演算子を使用して、条件に合致するデータを絞り込みできる

比較演算子 説明
= 等しい
!= 等しくない
> より大きい
< より小さい
>= 以上
<= 以下

以下の論理演算子を使用して、条件を複数指定できる

論理演算子 説明
AND いずれの条件も満たす
OR いずれかの条件を満たす

文字列検索

指定した文字列のデータを取得

WHERE 条件式 LIKE "文字列";

ワイルドカードを使用することで曖昧検索ができる

ワイルドカード 説明
% 0 文字以上の任意の文字列
_ 任意の 1 文字

複数指定

複数指定したうちのどれかに一致するデータを取得

WHERE カラム名 IN(1,2,...);

範囲指定

範囲内のデータを取得

WHERE カラム名 BETWEEN 最小値 AND 最大値;

集計

データの集計結果を取得

集計関数 (カラム名);

主なもの

集計関数 説明
COUNT データの個数を数える
SUM 合計する
AVG 平均する
MAX 最大値を返す
MIN 最小値を返す

グループ化

指定したカラムに基づいて、データをグループ化する
一般的に集計関数と組み合わせて使用される

GROUP BY カラム名;

集計結果の絞り込み

グループ化した集計結果に対して絞り込みを行う

HAVING 条件式;

ソート

データを昇順(ASC)で取得するか降順(DESC)で取得するか指定する

ORDER BY カラム名 `ASC`または`DESC`;

件数指定

取得するデータの件数を指定する

LIMIT 件数;

名前付け

取得するデータに名前をつける

AS つけたい名前;

データ操作(テーブル結合)

2つのテーブルにまたがってデータを取得したいときは、テーブル結合を使う

内部結合

テーブル間で共通のデータを取得

SELECT カラム名 FROM テーブル名1
INNER JOIN テーブル名2
ON テーブル名1.カラム名 = テーブル名2.カラム名;

外部結合

左外部結合

左側(テーブル名 1)のテーブルにしかないデータも取得

SELECT カラム名 FROM テーブル名1
LEFT OUTER JOIN テーブル名2
ON テーブル名1.カラム名 = テーブル名2.カラム名;

右外部結合

右側(テーブル名 2)のテーブルにしかないデータも取得

SELECT カラム名 FROM テーブル名1
RIGHT OUTER JOIN テーブル名2
ON テーブル名1.カラム名 = テーブル名2.カラム名;

交差結合

両方のテーブルの組み合わせすべてを取得

SELECT カラム名 FROM テーブル名1
CROSS JOIN テーブル名2;

おわりに

SQL、一見シンプルなようで奥が深いですね

いろいろな記事を参考にしながら一旦まとめてみたので、あとは実際に手を動かしながら覚えたいと思います!

内容についてお気づきのことがあれば、ぜひお気軽にコメントください 🐾

Discussion