【超初心者向け】データベースの基本的知識、操作コマンドまとめ

# はじめに
この記事はDB(データベース)のデータを見るために欲しい知識を簡単にまとめたものになります。

旅行先のホテルや遊園地の帰りに「アンケートにご協力ください！」とお願いされた経験はありませんか。
そのアンケートでは「あなたの性別をお答えください」「あなたの年齢をお答えください」「一番印象に残ったことは何ですか？」などの質問項目に答えていくことになると思います。
スタッフや経営者は、あなた自身が体験したことやどんな気持ちでこの施設を利用しているのか、ということにとても興味があるんです。
そして、回答された多数の情報は一元に管理されています。

一元に管理された情報のかたまり、それがDB(データベース)です。

# DBとは
DB ＝ データベース　※以下DB表記

DBとは、ある特定の条件に当てはまるデータを複数集めて、後で使いやすい形に整理した情報のかたまりです。

# DBは何が便利なの？
主に以下の3つがあげられます。

- 複数のデータをまとめて管理できる
- 目的のデータを簡単に探すことができる
- 簡単に編集して使うことができる

# DBで使う用語
<dl>
  <dt>スキーマ</dt>
  <dd>
  DBの領域を区切ったもの
  </dd>
  <dd>
  PC上だと「フォルダ」の役割
  </dd>
</dl>

<dl>
  <dt>テーブル</dt>
  <dd>データが格納されている場所</dd>
</dl>

<dl>
  <dt>カラム</dt>
  <dd>データベースにおける列のこと</dd>
</dl>

<dl>
  <dt>DBMS</dt>
  <dd>
  データベースマネジメントシステム
  </dd>
  <dd>
  コンピュータ上でDBを管理するシステム
  </dd>
  <dd>
  例：Oracle、PostgreSQL、MySQL
　</dd>
</dl>

<dl>
  <dt>SQL</dt>
  <dd>Structured Query Language</dd>
  <dd>DBを操作するための言語</dd>
</dl>

# DB内での操作、実行コマンド
例として架空の会員制ショッピングサイトを想定したDBを使います
DB内には以下のテーブルが存在します

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051397/1692794e-03c2-4247-9749-22ab8d702949.png">

## 全データの取得
◇実行内容
>会員テーブルからすべての会員情報を取得する

◆実行SQL
>SELECT * FROM (スキーマ名).会員;

## 特定列だけを取得
◇実行内容
>会員テーブルの全会員情報から氏名だけを取得する

◆実行SQL
>SELECT 姓, 名 FROM (スキーマ名).会員;

## 特定行だけを取得
◇実行内容
>会員テーブルの会員情報から男性の情報だけを取得する

◆実行SQL
>SELECT * FROM (スキーマ名).会員
WHERE 性別 = ‘男’;

:::note info
ちなみに…
等しくないときは「＝」ではなく、「**<>**」を使います
:::

## 特定行の取得について①
◇実行内容
>会員テーブルの会員情報から苗字に”田”がつく会員情報を取得する

◆実行SQL
>SELECT * FROM (スキーマ名).会員
WHERE 姓 **LIKE** ‘%田%’;

:::note info
「=」の代わりに「**LIKE**」とすることで、あいまい検索が可能になります
「%」は何の文字があってもよい、ということを示します
:::

## 特定行の取得について②
◇実行内容
>会員テーブルの会員情報から女性、または東京都町田市に住む会員情報を取得する

◆実行SQL
>SELECT * FROM (スキーマ名).会員
WHERE 性別 = ‘女’ OR 住所 = ‘東京都町田市’;

## 取得結果を並び替える
◇実行内容
>会員テーブルから男性の会員情報を取得し、生年月日が年齢の高い順に並び替える

◆実行SQL
>SELECT * FROM (スキーマ名).会員
WHERE 性別 = ‘男’
ORDER BY 生年月日 **ASC**;

:::note info
「**ASC**」を「**DESC**」に変えると降順の並び替えになります
:::

## 集計関数について①
◇実行内容
>会員テーブルから女性の会員情報の件数（レコード数）を取得する

◆実行SQL
>SELECT **COUNT(*)** FROM (スキーマ名).会員
WHERE 性別 = ‘女’;

:::note info
SELECT対象を **COUNT(*)** とすることで条件に合致したレコードの件数を取得できます
:::

## 集計関数について②
◇実行内容
>会員テーブルから全会員情報で最も若い会員の情報を取得する

◆実行SQL
>SELECT MAX(生年月日) FROM (スキーマ名).会員;

### 集計関数まとめ
| 関数 | 実行内容 |
|:-:|:-:|
|COUNT(カラム名)| 指定したカラムを基準にレコードの件数を取得する  |
|  MAX(カラム名)|  指定したカラムの中で最大値を取得する |
| MIN(カラム名)  | 指定したカラムの中で最小値を取得する  |
| SUM(カラム名)  | 指定したカラムの内容をすべて合算する  |
| AVG(カラム名)  | 指定したカラムの内容をもとに平均を取得する  |

## テーブル同士を結合する
注文明細テーブルには商品IDはあるが商品名は無い…
注文明細データを取得すると同時に商品名も取得できれば便利なのに…
→ テーブルをくっつけたら一気に情報を取得できます

↓　こんなイメージです

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051397/d672ef72-e036-40be-8de6-4390a01be352.png">

◇実行内容
>注文明細テーブルと商品テーブルを結合する

◆実行SQL
>SELECT 注文明細.注文ID, 注文明細.商品ID, 商品.商品名
FROM (スキーマ名).注文明細
**INNER JOIN (スキーマ名).商品 ON 注文明細.商品ID = 商品.商品ID**;

:::note info
FROMでテーブルを指定した後、**INNER JOIN テーブル名 ON 結合条件** と書く
→ 指定したテーブル同士を内部結合します
→ そうすると、自分のテーブルにない情報を参照することができます
:::

:::note info
結合条件はそれぞれのテーブルで共通となるカラムを**＝**で繋げる必要があります
:::

# 最後に
今回はデータベースの関する用語やデータを見るための基本的なコマンドをまとめました。
この他にも、データの挿入や更新、削除などDBを触る上では欠かせない操作もあるため、折を見てまとめる予定です。

それから同じようなデータのかたまりを見ていると目が痛くなってくるので、長時間作業をする際にはお気をつけください。
血流が良くなるので蒸しタオルで目元を温めるのがおすすめです。