技術備忘録

自分自身の学習記録を残し、見直した際に素早く思い出すための記事投稿です。

記入日：2020年11月20日

追記日：2020年11月25日

今回は「DB(Databese)とSQL文」についての記録を残していきます。

アプリケーションの根幹を支えるデータベースですが、
用語も多く分かりにくいことが多いことから、
私を含めた初学者の方が避けて通りたくなりがちですが、
ここでは少しでも分かりやすい書き方でお伝えできればと思います。

![database.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568321/8b3b7b3d-7906-dbc9-6610-ca411b82c7da.jpeg)

そもそもDBとは？
データの基地です。データを１箇所に集め、いつでもすぐに利用できるようにしたもので、
実はこれは抽象的な概念のことを指します。言ってしまえば、管理の仕組みのことです。

以下の特徴がデータベースを利用することの最大のメリットとなります。

その特徴とは？
①大量のデータの検索・登録・修正・削除を素早く簡単にできる　→　後述のSQLにつながります
②同時に複数の人が利用してもデータに矛盾が発生しない（同時実行制御‥排他制御とも言う）
③データが飛ばないように対策できる（耐障害性）　→　多くのデータを安全に利用・活用できる
④データが流出しない

DBには５つの種類がある
①階層型データベース
②リレーショナルデータベース　‥　Excelの表のような形でデータを管理することができる
③オブジェクト指向データベース
④XMLデータベース
⑤NoSQLデータベース　‥　SQLを使わないデータベース（処理速度を追求したもの）

上記のようなデータベースを管理するシステムをDBMS（Database Management System）とよび、
②の主流なデータベースをRDBMS(Relational Database Management System)と呼びます。

つまり抽象的な概念であるデータベースを
具体的に管理できるように実装したものがDBMSです。

それでは、「リレーショナルデータベース（RDBMS）」とは？
リレーションとは数学で「集合」を表す言葉ですが、一般的には二次元表のことを指し、
リレーショナルデータベースとは、データを二次元表を使って管理するデータベースのことを言います。

使用するメリットとしては、プログラミング言語を使わなくてもデータを操作できるため、
簡単な演算でデータを抽出できたり、SQLなどの分かりやすいDB言語あるため、
幅広いユーザーが使用することができるためです。

世の中で知られているRDBMSでは以下の４つが主流です。
①MySQL
②Oracle Database
③PostgreSQL
④Microsoft SQL Server

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
【そもそもSQLとは何か？】

SQL（Structured Query Language）のことを指し、
リレーショナルデータベースがデータを操作するために備えている言語のことです。

【SQLの特徴】

1.英語を話すかのように表からデータを操作できる
　ー　表（テーブル）
　ー　列名（項目名）
　ー　行（ロウ）　→　１行のデータのことを「レコード」と言う。
　ー　列（カラム）
2.SQL文を発行してデータを操作する。基本は４つの操作がベースとなる
　ー　検索（SELECT）
　ー　登録（INSERT）
　ー　更新（UPDATE）
　ー　削除（DELETE）

【ざっくりとした全体像】

プログラムやターミナル（クライアント）からRDBMSであるサーバー（給仕人）に対して、
「データをください！」や「データを登録してください！」と言った注文をし、
実際にデータが保管されている場所から、サーバーがデータを抜き取ったり、
登録・削除などを行い、プログラムやターミナルにデータを返します。

この時の「データをください！」というサーバー側への注文などがSQLです。
SQL文は大きく３種類に分けられます。

【３種類のSQL文】

1.データの定義　DDL(Data Definition Language)
 　ー　データベース・テーブルの作成（CREATE）
　ー　データベース・テーブルの削除（DROP）
　ー　データベース・テーブルの構成の変更（ALTER）

2.データの操作　DML(Data Manipulation Language)
　ー　テーブルから行を検索（SELECT）
　ー　テーブルから新規行を登録（INSERT）
　ー　テーブルの行を更新（UPDATE）
　ー　テーブルの行を削除（DELETE）

3.データの制御　DCL（Data Control Language）
　ー　COMIIT,ROLLBACK,GRANT,REVOKE

ざっくりと以上の３つになりますが、実際の操作の際には幾つかの基本的なルールが存在します。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

【SQL文の基本ルールについて】

1.SQL文の最後に「；（セミコロン）」をつける
2.キーワードの大文字、小文字は区別されない
　ー　ただし、大文字で書いた方が見やすいため大文字で書くと良い
　ー　テーブルに保存されているデータは大文字・小文字が区別されるので注意
3.SQL文の中で文字列を記述するときは「'」で文字列を囲む
4.単語は半角スペース/改行で区切る

例：SELECT name FROM companies WHERE establishment_date LIKE '2020年%';

仮にこれを小文字で書いた場合は、

例：select name from companies where establishment_date like '2020年％';

読みづらいと感じられたかと思いますので、日頃から大文字でしっかりと分けて書くようにしましょう。
ですが、テーブルに登録する内容については大文字でも問題ないかなど確認しましょう。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

【その他の様々なSQL文（早見表）】

COUNT...その名の通りテーブル内の指定した要素の個数を返します

SUM...指定した要素の合計を返します。SUM(COUNT)といった形で使用する事が多いです

MAX...指定した要素の中で最も値が大きいものを返します。

MIN...指定した要素の中で値が最も小さいものを返します。

ORDER BY ASC(DESC)...指定した要素を昇順（降順）で返す。アイウエオ順や値など

GROUP BY...指定したカラムを基準にグループ化させる事ができ、データの数を数えたり平均値を出す際に使用できる

LEFT(RIGHT) JOIN...外部結合。データ内をくまなく検索したい際などに使用する。
　　　　　　　　　 FROM句の後にテーブルを書くが、LEFTの場合は左のテーブルが、
　　　　　　　　　 RIGHTの場合は右のテーブルが主となり、テーブル同士に主従関係をつける事ができる。
　　　　　　　　　 ※主のテーブルにくっつける事を言います

ex. SELECT item_name,SUM(COUNT) FROM my_items LEFT JOIN carts ON my_items.id = carts.item_id GROUP BY carts.item_id;

意味：my_items.idとcarts.item_idをキーとしてmy_itemsテーブルにcartsテーブルを外部結合する。
　　　その上で、carts.item_idを基準にアイテムの名前をとり、合計する。

書いてみるとわかりますが、単純な基礎英語で読解できるような内容ではありますね。
SQLの機能などが分かれば、すんなり理解できるかも知れませんが、
反復など繰り返していくうちに私は理解する事ができました！

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

お疲れ様でした。

今後も更新すべき内容等があれば追記していくようにいたします。
MySQLを学習していく予定なので、
そちらもある程度備忘録に記載できるようになったら投稿します。

ご覧いただきありがとうございました。