LoginSignup
1
1

本記事では、SQL を学ぶ上で重要な用語の解説をします。

1. SQL

SQL とは Structured Query Language の略で、リレーショナルデータベース管理システム(RDBMS)内でデータを管理するための言語です。読み方は「エスキューエル」もしくは「シークェル」です。

以下のような SQL 文(SQL statement)と呼ばれる命令文を用いて、データベースに対して様々な操作を行います。

SQL 文
SELECT name, salary FROM employees;

2. データベース

データベースとは構造化されたデータの集まりを指します。構造化とはデータが規則的な形式で整理されていることを意味します。

データとは観測された事象や現象を数値や文字、画像、音声などの形式で表したものです。例)売上高、気温、商品名

データベースはその構造によって「階層型」や「ネットワーク型」、「リレーショナル型」などに分類されます。

データベースを管理するためのソフトウェアであるデータベース管理システム(DBMS)を、略してデータベースと呼ぶ場合もあります。

3. リレーショナルデータベース

リレーションデータベース(RDB)は関連性を持つデータテーブルという形式で論理的に整理し、管理するデータベースです。

リレーショナルデータベースの仕組みを実装したソフトウェアはリレーショナルデータベース管理システム(RDBMS)と呼ばれています。

代表的な RDBMS としては MySQL、PostgreSQL、Oracle Database などがあります。

RDBMS はデータの永続化と管理を担当します。SQL を用いて、データベース内にテーブル関係を定義し、データを格納、取得、更新、削除などの操作を行います。

4. テーブル

テーブル(レコード)と(カラム)で構成されています。

テーブル

レコードは特定のエンティティ (顧客、商品など) に関する情報を格納します。 カラムはレコード内の特定の属性 (名前、価格など) を格納します。また、レコードを構成する 1 つ 1 つの要素はフィールドと呼ばれます。

5. 主キーと外部キー

各レコードには、テーブル内の各レコードを一意に識別するための主キー(Primary Key)があります。主キーは 1 つのカラムまたは複数のカラムの組み合わせで構成されます。

以下の departments テーブルでは主キーid カラムです。このカラムは各レコードを一意に識別します。(name カラムも各レコードを一意に識別できるので主キーにすることができます)

departments テーブル
+-----+-----------+
| id  | name      |
+-----+-----------+
| 1   | 営業部     |
+-----+-----------+
| 2   | 開発部     |
+-----+-----------+

また、主キーは他のテーブルとのリレーションシップ(関係性)を表現するために使用されることがあります。この場合、他のテーブルの主キーを参照するカラムは外部キー(Foreign Key)と呼ばれます。

以下の employees テーブルでは外部キーdepartment_id カラムです。このカラムは departments テーブルの id カラムを参照し、各従業員が所属する部門を示します。

employees テーブル
+-----+-----------+-----------+---------------+
| id  | name      | salary    | department_id |
+-----+-----------+-----------+---------------+
| 1   | 田中 太郎  | 123456.78 | 1             |
+-----+-----------+-----------+---------------+
| 2   | 山田 花子  | 987654.32 | 2             |
+-----+-----------+-----------+---------------+
| 3   | 鈴木 次郎  | 567890.12 | 1             |
+-----+-----------+-----------+---------------+

6. スキーマ

スキーマ(schema)とはデータベースの構造のことです。設計図のようなものです。

スキーマの三層モデル
データベースのスキーマは、通常、以下の 3 つの層に分けられます。

  1. 外部スキーマ(External Schema)
  2. 概念スキーマ(Conceptual Schema)
  3. 内部スキーマ(Internal Schema)

概念スキーマはデータベース全体の論理構造を定義するためのものです。リレーショナルデータベースの場合は、テーブルの定義やリレーションシップ、制約などを含みます。

外部スキーマは、リレーショナルデータベースのビューにあたる部分です。特定のユーザーやアプリケーションが必要とするデータだけを提供し、不要なデータへのアクセスを防ぎます。

内部スキーマは、データの物理的なストレージ構造を定義します。

7. 標準 SQL と方言

標準SQL とは、国際標準化機構 (ISO) やアメリカ国家標準協会 (ANSI) などの標準化団体によって定められた、SQL の仕様です。 標準 SQL は、 RDBMS の種類に依存せず、共通の SQL 構文を使用できることを目的としています。

1986 年に最初の標準 SQL 規格である SQL-86 が制定されました。ここ最近では 2011 年に SQL:2011、2016 年に SQL:2016、2023 年に SQL:2023 と、約 5 年ごとに改訂されています。

一方、方言は、各 RDBMS が独自に拡張した機能であり、標準 SQL には含まれていない機能です。 例えば、Oracle Database には DECODE と呼ばれる独自の拡張コマンドがあります。

しかし、方言は他の RDBMS では利用できないため、データベースの移植性や相互運用性を低下させる可能性があります。

8. SQL コマンド

SQL を構成する個別の命令は SQL コマンドと呼ばれています。

SQL コマンドは以下の 4 つに分類されます。

  1. DDL(データ定義言語)
    データベースの構造を定義するコマンド。
    例) CREATE, ALTER, DROP, TRUCATE
  2. DML(データ操作言語)
    データの検索、追加、削除、更新、検索を行うコマンド。
    例) SELECT, INSERT, UPDATE, DELETE
  3. DCL(データ制御言語)
    データベースのアクセス権を制御するコマンド。
    例) GRANT, REVOKE
  4. TCL(トランザクション制御言語)
    トランザクションを管理するコマンド。
    例) COMMIT, ROLLBACK, SAVEPOINT

これらの SQL コマンドを組み合わせることで、データベースに対して様々な操作を行うことができます。

9. キーワード と 予約語

キーワードとは SQL 文で特別な意味を持つ単語のことです。

キーワードは、上記で紹介した SQL コマンド以外に、FROMWHERE などの SQL コマンドを補完するものも含まれます。

以下は employees テーブルから name カラムと salary カラムのデータを取得する SQL 文です。

SQL 文
    SELECT name, salary FROM employees;
    ------              ----
    keyword            keyword

キーワードは、予約キーワード(予約語)と未予約キーワードに分類されます。予約語は、通常は識別子(例: テーブル名やカラム名)として使うことができない単語です。
RDBMS の種類やそのバージョンによって、そのキーワードが予約語なのか変わります。

重要なキーワード

キーワード 説明
WHERE 検索条件を指定
DISTINCT 重複するレコードを除外
LIMIT 取得するレコード数の制限
ORDER BY 並べ替え
DESC 降順
ASC 昇順
AS 別名
FROM データソース指定
INSERT データの挿入
VALUES 値の指定
CASE 条件式
DEFAULT デフォルト値を指定
GROUP BY グループ化
HAVING グループに対する条件

キーワードの例は全て大文字で示しました。小文字でも問題ありませんが、慣習として大文字を用います。キーワードとカラム名やテーブル名を区別し、SQL 文を読みやすくします。

キーワードや予約語について詳しくは以下を参照してください。

10. 句

(clause)は SQL 文の一部を構成するセクションです。句は、キーワードとそれに続く要素(データ項目名、テーブル名、検索条件式など)で構成されます。

SQL 文
    keyword        keyword       keyword          keyword
    ------          ----         --------          ----
    SELECT column_2 FROM table_1 ORDER BY column_2 DESC;
    --------------- ------------ ----------------------
        clause         clause            clause

11. 文

(statement)は、データベースに対して実行する完全な命令です。クエリとも呼ばれています。文は ; で終わります。ただ、SQLite など、RDBMS によっては ; を省略できるものもあります。

SQL 文
                         statement
    --------------------------------------------------
    SELECT column_2 FROM table_1 WHERE column_2 > 1000;
    --------------- ------------ ---------------------
        clause         clause           clause

SELECT から始まる文は SELECTUPDATE から始まる文は UPDATE 文と呼びます。FROM 文や WHERE 文と呼び方はしません。

12. 式

(expression)はデータベース内で値を生成するために使用されます。例えば、算術式、比較式 、論理式などがあります。

  • 算術式 (Arithmetic Expressions)
    +, -, *, / などの算術演算子を使用して数値を計算
    例) price * quantity
  • 文字列式 (String Expressions)
    文字列の連結
    例) first_name || ' ' || last_name
  • 比較式 (Comparison Expressions)
    =, <>, >, < などの比較演算子を使用して値を比較
    例) salary >= 50000
  • 論理式(Logical Expressions)
    論理演算子(AND, OR, NOT)を使用して条件を評価
    例) age > 18 AND city = 'Tokyo'
  • 関数
    組み込み関数やユーザー定義関数を呼び出して結果を計算
    例) SUM(price), ROUND(average, 2)

SELECT 文の中で使用される列の値や WHERE 句で条件式として使われることが一般的です。

                                                              expression
                                                                ------
SELECT price * quantity AS total_price FROM orders WHERE name = 'apple';
       ----------------                                  --------------
          expression                                       expression

SQL の式には数値や文字列などのリテラル(literal)も含まれます。

13. 述語

述語(Predicate)は式の一種で、TRUEFALSE、または UNKNOWN に評価される式です。述語は、条件を指定するために使用され、WHERE 句、HAVING 句などでよく使われます。

述語の種類

  • 比較式
    • 比較演算子(=, <=)が使用される
    • 例) salary > 50000
  • 論理式
    • 論理演算子(AND, BETWEEN)が使用される
    • 例) salary > 50000 AND department = 'HR'

14. リテラル

リテラルは SQL 文で直接使用される数値、文字列、日付などの固定値のことを指します。

  • 数値リテラル(Numeric Literals)
    固定長の整数や浮動小数点数などの数値を表します。
    例) 123, 1.23
  • 文字列リテラル(String Literals)
    シングルクォート(')で囲まれた文字列を表します。
    例) 'Hello, World!'
  • 日時リテラル(Date Literals)
    日付リテラルは標準的な日付フォーマットで表現される日付を表します。
    例) '1998-12-25'

リテラルは、他の式と組み合わせて使用されます。

算術式とリテラル
SELECT salary + 5000 AS increased_salary FROM employees;
                ----
               literal

詳しくは以下を参照してください。

15. 演算子

演算子(operator)は、式や値に対して特定の操作を行うためのシンボルです。

算術演算子

演算子 説明
+ 加算 3 + 5
- 減算 10 - 4
* 乗算 6 * 7
/ 除算 20 / 4
% 剰余 10 % 3
^ べき乗 2 ^ 3

ビット演算子

演算子 説明
~ ビット反転 ~5
& ビット AND 6 & 3
| ビット OR 6 | 3
^ ビット XOR 6 ^ 3
<< ビット左シフト 1 << 2
>> ビット右シフト 8 >> 2

比較演算子

演算子 説明
= 等しい column = 5
< より小さい column < 5
> より大きい column > 4
<= 以下 column <= 5
>= 以上 column >= 2
!= 等しくない column != 3
<> 等しくない column <> 3

論理演算子

演算子 説明
AND 論理積 true AND false
OR 論理和 true OR false
NOT 否定 NOT true
ANY いずれか ANY(1, 2, 3) = 2
SOME いずれか SOME(1, 2, 3) = 4
ALL すべて ALL(1, 2, 3) < 4
BETWEEN 範囲 column BETWEEN 1 AND 10
IN 内に含まれる column IN ('a', 'b', 'c')
EXISTS 存在する EXISTS (SELECT * FROM table)
IS 等しい column IS 5
IS NOT 等しくない column IS NOT 3
LIKE パターンマッチ column LIKE 'a%'
IS NULL NULLである value IS NULL
IS UNIQUE 一意である column IS UNIQUE

複合演算子

演算子 説明
+= 加算して代入 a += 5
-= 減算して代入 a -= 2
*= 乗算して代入 a *= 3
/= 除算して代入 a /= 4
%= 剰余して代入 a %= 3
&= ビットANDして代入 a &= 1
^= ビットXORして代入 a ^= 2
|= ビットORして代入 a |= 4

文字列演算子

演算子 説明
|| 文字列の連結 'Hello' || ' World'

16. 関数

SQL で使用される関数(functions)には、集計関数や文字列関数、日付関数など、さまざまな種類があります。

集計関数

関数 説明
AVG カラムの平均値 AVG(column)
COUNT レコード数 COUNT(*), COUNT(column)
MAX カラムの最大値 MAX(column)
MIN カラムの最小値 MIN(column)
SUM カラムの合計値 SUM(column)

文字列関数

関数 説明
CONCAT 文字列を連結 CONCAT('Hello', ' ', 'World')
SUBSTRING 文字列の一部を抽出 SUBSTRING(column, start, length)
LENGTH 文字列の長さを取得 LENGTH(column)
UPPER 文字列を大文字に変換 UPPER(column)
LOWER 文字列を小文字に変換 LOWER(column)

日付関数

関数 説明
NOW 現在の日時を取得 NOW()
CURDATE 現在の日付を取得 CURDATE()
CURTIME 現在の時刻を取得 CURTIME()
DATEDIFF 2 つの日付の差を日数で取得 DATEDIFF(date1, date2)
DATE_ADD 日付に時間を追加 DATE_ADD(date, INTERVAL value unit)

数学関数 (Mathematical Functions)

関数 説明
ABS 絶対値を取得する ABS(-5)
CEIL 数値を切り上げる CEIL(4.3)
FLOOR 数値を切り捨てる FLOOR(4.7)
ROUND 数値を四捨五入する ROUND(4.567, 2)
POWER 数値のべき乗を計算する POWER(2, 3)

条件付き関数 (Conditional Functions)

関数 説明
IF 条件に基づいて値を返す IF(condition, value_if_true, value_if_false)
CASE 複数の条件に基づいて値を返す CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE resultN END
COALESCE NULL以外の最初の値を返す COALESCE(column1, column2, 'default_value')
NULLIF 2つの引数が等しい場合にNULLを返す NULLIF(column1, column2)

その他の便利な関数

関数 説明
GREATEST 最大値を返す GREATEST(value1, value2, value3)
LEAST 最小値を返す LEAST(value1, value2, value3)
IFNULL NULLの場合に代替値を返す IFNULL(column, 'default_value')
CAST データ型を変換する CAST(column AS new_data_type)
CONVERT データ型を変換する CONVERT(column, new_data_type)

17. データベースオブジェクト

データベースオブジェクト(database objects)は、データベース内でデータを管理するために使用される構造化された要素です。TABLEVIEWINDEX などがあります。

オブジェクト 説明
TABLE データを格納するための構造化された形式のオブジェクト。テーブルはレコードとカラムで構成される。
VIEW 仮想的な表現を提供するオブジェクト。実際のデータを基に定義され、SQL 文を実行することで動的に結果を生成する。
SYNONYM 他のデータベースオブジェクト(通常はテーブルまたはビュー)に対する別名を提供するオブジェクト。
SEQUENCE 一意の数値を生成するためのオブジェクト。主にシーケンス(連番)を生成するために使用され、主キーの値の生成に利用されることがある。
INDEX データベースのパフォーマンス向上を目的として、特定のカラムや組み合わせに対する高速なデータアクセスを提供するために使用されるオブジェクト。
TRIGGER データベース内の特定のイベント(例: レコードの挿入、更新、削除)が発生した際に自動的に実行されるプログラム。

18. データ型

データ型はデータベース内で扱うデータの形式を定義するための重要な概念です。

数値型

数値データ(Numeric Types)を表現するためのデータ型です。主に整数と浮動小数点数があります。

  • 整数型 (Integer Types)
    • INT または INTEGER: 標準的な整数型。4 バイト
    • SMALLINT: 小さい範囲の整数型。2 バイト
    • BIGINT: 大きな範囲の整数型。8 バイト
  • 浮動小数点型 (Floating-Point Types)
    • FLOAT: 単精度浮動小数点数。
    • DOUBLE: 倍精度浮動小数点数。8 バイト
    • REAL: 倍精度浮動小数点数。4 バイト

文字列型

文字列型(String Types)を表現するためのデータ型です。固定長と可変長の文字列型があります。

  • 固定長文字列型 (Fixed-Length String Types)
    • CHAR(n): n文字の固定長文字列。
  • 可変長文字列型 (Variable-Length String Types)
    • VARCHAR(n): 最大長がn文字の可変長文字列。
    • TEXT: 非常に長い可変長文字列。

日付と時刻型

日付、時刻、および日時データを表現するためのデータ型です。

  • 日付型 (Date Types)
    • DATE: 年、月、日を表す日付型。
  • 時刻型 (Time Types)
    • TIME: 時、分、秒を表す時刻型。
    • TIMESTAMP: 日付と時刻の組み合わせを表す型。

その他のデータ型

  • ブール型 (Boolean Type)
    • BOOLEAN または BOOL: 真偽値を表す型。
  • バイナリ型 (Binary Types)
    • BLOB: バイナリデータを格納する型。
  • 列挙型 (Enumerated Types)
    • ENUM: 事前に定義された値の中から1つを選択する型。

NULL 値

すべてのデータ型は NULL 値(値が存在しないことを表す)を許容することができます。

カスタム型

一部の DBMS では、ユーザーが独自のカスタムデータ型を定義することができる場合があります。

19. 制約

制約(Constraint)はデータベースの整合性を確保するために利用されます。

例えば、NOT NULL 制約は重要な情報が欠落しないように保証し、UNIQUE 制約は重複したデータの挿入を防ぎます。

制約 説明
NOT NULL NULL値を許可せず、必ず値が入力されることを強制
UNIQUE 特定のカラムで重複する値を許さない
PRIMARY KEY テーブル内の各レコードを一意に識別
FOREIGN KEY 異なるテーブル間の関連性を確立
CHECK 特定の条件を満たすデータのみを許可
DEFAULT デフォルト値

これらの制約はテーブルの作成や変更時に使用します。

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50) UNIQUE,
    nickname VARCHAR(100) DEFAULT 'Unknown',
    password VARCHAR(100)
);

複数の制約を1つの列に適用することもできます。

CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE
);

これらの制約は、データの正確性と整合性を保証し、不正なデータの挿入や変更を防ぐために非常に重要です。

20. トランザクション

トランザクション(Transaction)はデータベースにおける操作の論理的な単位を指します。一連のデータベース操作(例えば、データの挿入、更新、削除など)をまとめて 1 つの処理として扱うことができます。

例えば、銀行の ATM から現金を引き出す際には、口座残高を減らし、お金を提供するという操作が 1 つのトランザクションとして扱われ、途中でエラーが発生しても、顧客の残高が正確に反映されるように保証されます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1