SQLを学びます。番外編

# 初めに
こんにちはiwanagaです。

今までやってきたSQLの学習で個人的に漏れがあった内容について番外編でまとめさせていただきます。

# ORDER BY文
前回ちょろっと触れたものではありますが、他にも紹介したい文があるので説明させていただきます。

今回は割とシンプルなテーブルを使用します。

テーブル名：class1

|出席番号(number)|名前(name)|
|:---:|:---:|
|1|アベ|
|2|イトウ|
|3|ウタダ|
|4|エンドウ|
|5|オオタ|
|6|カトウ|
|7|キタムラ|


まずはWHEREを入れたORDER BY文です。ソートするのに普段使いますが抽出も一緒に出来たら便利ですよね。上記のテーブルで出席番号が2より多い人だけ抽出し、尚且つ下順にする場合下記の様な文になります。

```
SELECT number,name FROM class1 WHERE 2 < number  ORDER BY number DESC;
```

そうすると下記のような結果が出ます。

|出席番号(number)|名前(name)|
|:---:|:---:|
|7|キタムラ|
|6|カトウ|
|5|オオタ|
|4|エンドウ|
|3|ウタダ|

割と使う機会も多いと思いますので覚えておくと良いことあると思います。

# SQLの用語
以前テーブルやカラム等基礎的な事はまとめましたが、少し応用的な内容もまとめさせていただきます。


クエリ（Query）
データベースから情報を取得、更新、削除、挿入するためのSQLコマンド。そもそもSELECT文を初め命令文はクエリの一例です。


ビュー（View）
1つ以上のテーブルから派生した仮想テーブル。ビューは実際のデータを格納せず、クエリを簡略化するために使用されます。


クエリ最適化（Query Optimization）
SQLクエリの実行速度を最適化するためのプロセス。データベースシステムにとって最適な実行計画を決定し、クエリの効率を向上させます。


インデックス（Index）
データベースのパフォーマンスを向上させるためのデータ構造。テーブルの特定の列(カラム)に対する高速なデータ検索を可能にします。


トランザクション（Transaction）
データベース内で複数の操作（INSERT、UPDATE、DELETEなど）を一つの論理的な単位として処理するプロセス。基本的に今まで紹介させていただいていたSELECT文と違い他の４大命令文はデータを更新するのでトランザクションはその際に使用します。これに関してはそのうち紹介させていただきます。


ACID（Atomicity, Consistency, Isolation, Durability）
トランザクション処理の際にデータベースが遵守すべき原則の頭字語。トランザクションの原子性、一貫性、分離性、永続性に関連します。データベースの信頼性と整合性を維持するために重要です。


RDBMS（Relational Database Management System）
リレーショナルデータベースの管理と操作を提供するデータベース管理システム。MySQL、Oracle、SQL Serverなどが一般的なRDBMSです。またRDBMSは下記の様なことが出来ます。

・データの格納と管理
データをテーブルに格納し、データの追加、更新、削除、検索等の操作が出来ます。

・データ整合性の維持
データベース内のデータが一貫性を持ち、データの整合性が維持されるようにします。プライマリキーと外部キーなどの制約を使用してデータ整合性を確保することが出来ます。

・データセキュリティ
データベースへのアクセス制御やセキュリティ設定を提供し、データの保護を行います。

・データのバックアップと復元
データベースのバックアップと復元機能を提供し、データの保護と災害からの回復を支援します。

・クエリ処理と最適化
SQLクエリの実行計画を最適化し、高速なデータ検索を実現します。クエリ処理を高速化するための機能を提供します

余談ではありますが以前紹介させていただいたpgAdmin等はRDBMSではなく、RDBMSを管理および操作するためのツールです。

pgAdminはPostgreSQLデータベースを効率的に管理するためのGUIツールであり、PostgreSQLがRDBMS、pgAdminは使用することで、PostgreSQLデータベースを簡単に操作できるツールとなります。

・データベース管理システム (DBMS) 
データベースの作成、管理、操作をサポートするソフトウェアです。この順番で紹介するのは少しおかしいかもしれませんが、そもそもRDBMSはDBMSの一種で、RDBMS同様リレーショナルデータベースを管理します。

余談になりますがRDBMSとDBMSの違いをざっくりとまとめてみましたのでご覧ください。

・データモデル
RDBMS: リレーショナルデータベース管理システムは、リレーショナルデータベースモデルを使用します。データはテーブル（表）に格納され、テーブル間の関係を定義します。
DBMS: データベース管理システムは、特定のデータモデルを要求しません。そのため、リレーショナルデータベース以外のデータモデルもサポートできます。

・クエリ言語
RDBMS: リレーショナルデータベースはSQL（Structured Query Language）を使用してデータの操作とクエリを行います。
DBMS: データベース管理システムには、SQL以外のクエリ言語を使用するものも含まれます。これにより、特定のデータモデルに特化したクエリ言語を使用できる場合があります。

・データの格納
RDBMS: リレーショナルデータベースでは、データはテーブルとして構造化され、関連付けられたテーブルに分割されます。
DBMS: データベース管理システムは、リレーショナルデータベース以外のデータモデルに基づいてデータを格納できます。たとえば、キー/値ストアでは、データはキーと値のペアとして格納されます。

・用途
RDBMS: リレーショナルデータベースは、ビジネスアプリケーション、トランザクション処理、データウェアハウス、一般的なデータベースアプリケーションなど、様々な用途で使用しています。
DBMS: データベース管理システムは、さまざまなデータモデルに基づいた用途に対応できます。

簡単に言えば、RDBMSはリレーショナルデータベースに特化しており、一方、DBMSはデータモデルに依存しない汎用的なデータベース管理システムであり、異なるデータモデルに対応します。

・Temporal Table（時系列テーブル）
時間に関連するデータを格納するためのテーブル。データの有効期間や変更履歴を管理する際に使用されます。これは以前先輩が言っていた単語なのでさっき思い出しました。普段その方はTemporal TableをTTと言っていたので最初はチョコレートプラネットが好きなのかと思ったら全然違うしなんか気まずくなるしで散々だったので皆様ご注意ください。

# 最後に
本当は今までの復習や漏れた内容を掬う回にしたかったのですがちょいちょい脱線してしまいましたね。

皆様今回もご覧いただきありがとうございました！

参照
https://www.sejuku.net/blog/72918#index_id3

エンジニアファーストの会社 株式会社CRE-CO　iwanaga