🗄️

SQL基礎

2023/04/26に公開

概要

こんにちは、ゲーム大好き大野です。

今回は、SQL基礎の話です。

WEB開発、ゲーム開発などで絶対あるであろうデータベース。
それを操作するためのSQL。

本記事は、今一度SQLについて整理し、
具体的に理解を促すことを目的とします。

この記事のゴール

以下の理解を得ることをゴールとします。

  • 簡単なSQLを調べずに書く事が出来る。
  • 人に説明する事が出来る。

SELECT文

基本構文

SELECT [取得したい要素] FROM [使用テーブル];

全ての要素だけ表示する。

SELECT * FROM [使用テーブル];

特定の要素だけ表示する。

今回は、例として「名前」を取得するとします。

SELECT name FROM [使用テーブル];

複数の要素を表示する。

今回は、例として「名前」と「ID」を取得するとします。

SELECT name, id FROM [使用テーブル];

条件を絞る。

FROMの後に「WHERE」を追加すると条件の抽出が行えます。

SELECT * FROM [使用テーブル] WHERE WHERE [条件文];

今回は、例として「名前」が「太郎」という人物を抽出します。

SELECT * FROM [使用テーブル] WHERE name = '太郎';

整列(ソート)をする。

FROMの後に「ORDER BY」を追加すると条件の抽出が行えます。

SELECT * FROM [使用テーブル] ORDER BY [ソートしたい要素] [昇順・降順の指定(省略時昇順)];

「昇順・降順の指定」は、asc(昇順)、desc(降順)で指定できます。

今回は、例として「id」を「数値が多い順(降順)」で全データを表示させます。

SELECT * FROM [使用テーブル] ORDER BY id desc;

「GROUP BY」でグループわけ!

グループ分けに使用する場合は、「GROUP BY」を使用します。

SELECT [取得したい要素] FROM [使用テーブル] GROUP BY [グループ化したい要素];

使用例としては、所属人数や種類を知りたいときに使えます。

SELECT job, count( * ) FROM game_character GROUP BY job;
出力例
+--------------+----------+
| job          | count(*) |
+--------------+----------+
| 僧侶         |        1 |
| 勇者         |        1 |
| 戦士         |        2 |
| 魔法使い     |        1 |
+--------------+----------+

出力時に名前をつける。

表示時の各要素に名前をつけることが可能。

SELECT [要素名] AS [要素につけたい名前] FROM [使用テーブル];

例として、「name」に「名前」として出力しましょう。

SELECT name AS "名前" FROM [使用テーブル];

DML文

DML = Data Manipulation Languageの略で、
表内の行の追加(INSERT)や削除(DELETE)、列値更新(UPDATE)などを行う際に使用するSQL文

INSERT文

基本構文

INSERT INTO [データを追加したいテーブル名] (要素名A,要素名B) VALUES(要素Aに入れるデータ,要素Bに入れるデータ);

DELETE文

基本構文

DELETE [データを削除したいテーブル名] WHERE [条件文];

WHERE句はなくても大丈夫です。
ない場合は、全てのデータが削除されます。

UPDATE文

基本構文

UPDATE [データを更新したいテーブル名] WHERE [条件文];

WHERE句はなくても大丈夫です。
ない場合は、全てのデータが更新されます。

TRUNCATE文

テーブル内の全てのレコードを全て削除する場合に使用します。

基本構文

TRUNCATE [データを削除したいテーブル名];

TRUNCATE文とDELETE文

  • 条件指定の可否
    DELETE文ではWHERE句を使って削除対象のレコードを条件指定する事が出来るが、TRUNCATE文では条件を指定することが出来ません。
  • 処理速度の違い
    テーブル内のレコードを全削除する場合、DELETE文よりもTRUNCATE文を使う方が高速に削除することが可能。
  • ロールバックの可否
    DELETE文はコミットしていなければロールバック可能ですが、
    TRUNCATE文はロールバックすることが出来ません。
TRUNCATE DELETE
条件指定 不可 可能
処理速度 速い 遅い
ロールバック 不可 可能
GitHubで編集を提案

Discussion