#はじめに
プログラミングを学習していると、「データベース」という言葉や「SQL」といった言葉が頻繁に出てくる。
私は、なんとなくデータベースはデータの保管場所(そのままやないか)というざっくりしたイメージしかありませんでした。
ざっくりしたイメージだけだと。CRADって? SQLがわからない。といったことがあったので、データベースに関して、きちんと理解を深めたいので、この記事を書きます。
#データベースってなに?
・WEBアプリにおけるデータベース(DB)はデータを整理して格納する保存先の役割を持つものです。
・データを整理して失われない形で格納する場所のことをデータベース(DB)という。
・また、格納されたデータを効率的に取得、更新、削除するための手段を提供してくれるシステムのことを**データベース・マネジメントシステム(DBMS)**と呼ぶ。
っと、言っていますが、要はWEBアプリで必要なデータを保管するためのBOXのようなイメージですかね。(違っていたらご指摘ください)
ログインパスワードや、投稿した記事、ECサイトの商品など、すべてデータベースに保存されています。
このQiitaの記事が見れるのも、色んな記事がデータベースに保存されているからだと思います。
データベースが無いと、WEBアプリケーションとして、機能しなくなります。
#CRADってなに?
簡単に言ってしまうと
登録・変更・削除・参照機能のことです。
具体的には、上記で記述したデータベースを操作する際に必要な最低限の機能である、
・登録機能(Create)
・参照機能(Read)
・更新機能(Update)
・削除機能(Delete)
の4つの機能をあわせた表現を「CRUD」と言います。意外と簡単ですね。
#SQLってなに?
データベースとやり取りするときに使う言語です。
上記に記述したCRUDによる、登録機能や、参照機能、更新機能、削除機能を操作するための言語ということです。
#####それではデータベースを作成し、登録(Create)、参照(Read)、更新(Update)する流れを簡単にコードを書いて説明します。
#データベースの作成コマンド
$ sqlite3 db/sandbox.sqlite3
このコマンドを実行すると「sqlite>」というプロンプトが表示され、入力待ちの状態になる。
#テーブルの作成
$ sqlite> create table users(id integer, name text); #文末には;(セミコロン)をつける
この場合は、id(数字)とname(文字)をカラムに持つ、usersテーブルを作成する。
コマンドを実行すると、db/sandbox.sqlite3ファイルが作成される。
テーブルを作成するにはこのように
create table テーブル名(カラム名A 型, カラム名B 型・・・);
という構文を使用する。(Rubyは基本的にセミコロンをつけないが、SQL文では文末にセミコロンが必要なので気をつける)
###⚠操作ミスでテーブルを削除したい時は?
usersテーブルを作りたかったのにスペルミスをしたり、何らかのミスをしたままテーブルを作成してしまうこともあるかもしれません。
その場合は、一度、テーブルを削除してから新しいテーブルを再作成しましょう。
テーブルを削除するには
drop table テーブル名;
というコマンドでテーブルの削除ができます。尚、テーブルにデータがあるときは、中のデータも含めて削除されるので注意が必要です。
#SQL文の種類と概要
基本的なデータベースレコードを操作するためのSQL文を紹介します。(ほんとにざっくりしていると思います)
####1 : insert文(テーブルにレコードを作成) [Create]
insert into テーブル名(カラム名1, カラム名2,...) values(値1, 値2,...);
概要:指定したテーブルにレコードを1つ格納する。指定したカラムと値の順序が一致している必要がある。値をセットしないときはnullと書きます。
※例
$ sqlite> insert into users(id, name) values(1, '山田太郎');
$ sqlite> insert into users(id, name) values(2, '鈴木一郎');
$ sqlite> insert into users(id, name) values(3, 'タイロン・ウッズ');
これで、usersテーブルにid:1 山田太郎、id:2 鈴木一郎、id:3 タイロン・ウッズ というレコードが作成されました。
####2 : select文(テーブルに格納されたレコードを参照) [Read]
select カラム名1, カラム名2, ...from テーブル名 where 条件式;
概要:指定したテーブルに格納されているレコードのうち条件式にマッチするものを指定したカラム分取り出す。すべてのカラムを取り出す場合には*(アスタリスク)を指定します。
※例
$ sqlite> select name from users;
山田太郎
鈴木一郎
タイロン・ウッズ
これはusersテーブルのnameカラムを取り出しています。
先程、usersテーブルにidとnameカラムを追加しましたので、nameカラムを指定すると、nameカラムのすべての値を取り出す事ができます。
####3 : update文(テーブルに格納されたレコードを更新) [Update]
update テーブル名 set カラム名1 = 値1, カラム名2 = 値2, ... where条件式;
概要:指定したテーブルに格納されているレコードのうちm条件式にマッチするものを指定した値で更新する。ただし、条件式は省略可能です。複数のレコードが一致した場合には、全ての値を書き換えてしまうので注意が必要です。
※例
$ sqlite> update users set name = '山田太郎' where id = 1; #レコードの更新
$ sqlite> select * from users where id = 1; #更新したレコードの参照
$ 1|山田太郎
####4 : delete文(テーブルに格納されたレコードを削除) [Delete]
delete from テーブル名 where 条件式;
概要:指定したテーブルに格納されているレコードのうち、条件式にマッチするものを削除する。ただし条件式は省略可能。複数のレコードが一致した場合は、全てのレコードを削除してしまうので注意が必要です。
※例
$ sqlite> delete from users where id = 1; #usersテーブルのidが1のデータを削除
$ sqlite> select * from users; #usersテーブルの全てのデータを参照
↓ id1が削除されていることがわかる
2|鈴木一郎
3|タイロン・ウッズ
#最後に
データベースの基本的な理解はできたと思います。これからアプリケーションを開発する上で、データベースは重要なものになると思うので、きちんと理解し、DB設計などができるように勉強していきます。
#参考記事
SQLとは 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
CRUDとは 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
たった1日で基本が身に付く! Ruby on Rails 超入門 たった1 日で基本が身に付く!