エンジニアとしてのキャリアが短く、データベース・SQLについて疎い自分がデータベースとSQLについて基本から学びながら、データベースとは何か、SQLとは何かを分かりやすいように説明していきます。
【初心者用】Pythonが何なのかメリット・デメリットの面からまとめてみた
1. データベースとは?
データの保管場所。よく、電話帳や辞書などに例えられます。
データベースにデータが無く、バラバラにデータが保管されていた場合、必要な情報を得るために膨大な時間と労力を浪費してしまいます。
ですが、データベースであれば必要なデータは後述するSQLを使用して、保管されているデータを参照したり取り出したり、さらには当該データの削除や追加などもできます。
データベースには種類があり、おおまかに以下の通りに分けられます。
・階層型
・ネットワーク型
・リレーショナル型
・NoSQL
普段よく使われるデータベースはリレーショナル型で、有名なところではPostgleSQLやMySQL、Oracle、SQLServerなどが挙げられます。
ここではこのリレーショナルデータベースについて説明していきます。
データベースに以下のようなデータが用意されていたとします。
ユーザー情報
職業情報
このようなデータを格納する表をテーブルと言い、これらのテーブルにはユーザーの情報と、職業の情報が管理されています。
横のデータの並びを行やレコードと呼び、縦のデータの並びを列やカラム、フィールドと呼びます。
リレーショナルデータベースの特徴として複数のテーブルを組み合わせてデータを表すことが可能で、上の2つのテーブルではユーザー情報のjob_idと職業情報のidの行が関連(リレーション)しています。
ユーザーの情報のjob_idには数字しか入っていませんが、職業の情報にあるidと関連している事でユーザーがどのような職業なのかがわかります。
また、リレーショナルデータベースは表形式であるため、視覚的にも見やすく理解しやすいのが長所と言えます。
これにより、ユーザーが新規登録したり今後職業が増えたとしてもデータが複雑になることはなく、他のテーブルに影響を及ぼすことなくデータを追加することが可能となります。
データベースにデータが無く、バラバラにデータが保管されていた場合、必要な情報を得るために膨大な時間と労力を浪費してしまいます。
ですが、データベースであれば必要なデータは後述するSQLを使用して、保管されているデータを参照したり取り出したり、さらには当該データの削除や追加などもできます。
データベースには種類があり、おおまかに以下の通りに分けられます。
・階層型
・ネットワーク型
・リレーショナル型
・NoSQL
普段よく使われるデータベースはリレーショナル型で、有名なところではPostgleSQLやMySQL、Oracle、SQLServerなどが挙げられます。
ここではこのリレーショナルデータベースについて説明していきます。
データベースに以下のようなデータが用意されていたとします。
ユーザー情報
職業情報
このようなデータを格納する表をテーブルと言い、これらのテーブルにはユーザーの情報と、職業の情報が管理されています。
横のデータの並びを行やレコードと呼び、縦のデータの並びを列やカラム、フィールドと呼びます。
リレーショナルデータベースの特徴として複数のテーブルを組み合わせてデータを表すことが可能で、上の2つのテーブルではユーザー情報のjob_idと職業情報のidの行が関連(リレーション)しています。
ユーザーの情報のjob_idには数字しか入っていませんが、職業の情報にあるidと関連している事でユーザーがどのような職業なのかがわかります。
また、リレーショナルデータベースは表形式であるため、視覚的にも見やすく理解しやすいのが長所と言えます。
これにより、ユーザーが新規登録したり今後職業が増えたとしてもデータが複雑になることはなく、他のテーブルに影響を及ぼすことなくデータを追加することが可能となります。
2. SQLとは?
データベースとやり取りする際に使われる言葉のひとつ。
エスキューエルやシークェルと呼ばれます。
また、SQLはデータベース言語の中で最も普及している言語です。
新しくデータを追加したり、保存されているデータに対して検索をかけたり更新、削除などを簡単に行う事ができます。
エスキューエルやシークェルと呼ばれます。
また、SQLはデータベース言語の中で最も普及している言語です。
新しくデータを追加したり、保存されているデータに対して検索をかけたり更新、削除などを簡単に行う事ができます。
3. 実際にデータを作成してみる
今回はphpMyAdminというアプリでユーザーの情報を管理するテーブルと、職業を管理するテーブルのデータベースを作成していきます。
まずは、ユーザーのテーブルを作成します。
CREATE TABLE色 users (
`id色` INT NOT NULL PRIMARY KEY,
`name色` VARCHAR(8),
`level色` INT,
`job_id色` INT
);
CREATE TABLE色 でusersというテーブルを作成しました。
次にユーザーの一覧に必要な情報を追加していきます。
id色 ではINT型を使用しており、整数を格納する事ができます。
PRIMARY KEYは主キーと呼ばれ、▽データベースとは?で説明した、関連させているデータとなります。
name色 ではVARCHAR型を使用しており、文字列をカッコ内にて指定した文字数で格納する事ができます。
level色 とjob_id色 ではid色 とおなじくINT型を使用しており、こちらも整数を格納する事ができます。
このように、続いて職業のテーブルを作成します。
CREATE TABLE jobs (
`id色` INT NOT NULL PRIMARY KEY,
`job_name` VARCHAR(10),
`hitpoint` INT,
`power` INT,
`vitality` INT,
`speed` INT,
`intelligence` INT,
`dexterity` INT
);
id色ではusersで作成したid色カラムと同じようにPRIMARY KEYが指定されており、usersのid色 とjobsのid色が関連付けられていることを表します。
この2つのコードを実行するとusersとjobsのテーブルが完成します。
これでusersとjobsのテーブルが完成したので、次は作成したテーブルに値を入れていきます。
INSERT色
INTO色 users(id,name,level,job_id)
VALUES
(1,"ひろし",32,2),
(2,"たかし",78,1),
まずは、ユーザーのテーブルを作成します。
CREATE TABLE色 users (
`id色` INT NOT NULL PRIMARY KEY,
`name色` VARCHAR(8),
`level色` INT,
`job_id色` INT
);
CREATE TABLE色 でusersというテーブルを作成しました。
次にユーザーの一覧に必要な情報を追加していきます。
id色 ではINT型を使用しており、整数を格納する事ができます。
PRIMARY KEYは主キーと呼ばれ、▽データベースとは?で説明した、関連させているデータとなります。
name色 ではVARCHAR型を使用しており、文字列をカッコ内にて指定した文字数で格納する事ができます。
level色 とjob_id色 ではid色 とおなじくINT型を使用しており、こちらも整数を格納する事ができます。
このように、続いて職業のテーブルを作成します。
CREATE TABLE jobs (
`id色` INT NOT NULL PRIMARY KEY,
`job_name` VARCHAR(10),
`hitpoint` INT,
`power` INT,
`vitality` INT,
`speed` INT,
`intelligence` INT,
`dexterity` INT
);
id色ではusersで作成したid色カラムと同じようにPRIMARY KEYが指定されており、usersのid色 とjobsのid色が関連付けられていることを表します。
この2つのコードを実行するとusersとjobsのテーブルが完成します。
これでusersとjobsのテーブルが完成したので、次は作成したテーブルに値を入れていきます。
INSERT色
INTO色 users(id,name,level,job_id)
VALUES
(1,"ひろし",32,2),
(2,"たかし",78,1),
4. 作成したデータベースからデータを抽出してみる
では、データベースが完成したのでデータを検索し、抽出してみます。
データを検索するにはSELECT文を使用します。
まずは、usersテーブルにある全てのデータを検索するSQL文を作成します。
SELECT * FROM users;
SELECTは、データベースからデータを取り出すための命令です。
SELECT文では、どこからデータを取ってくるかを指定をすると、指定された場所からデータを取り出すことが可能です。
そして、指定した場所から何を取ってくるかを指定して検索結果として表示します。
今回指定した場所はusersテーブルで、指定したデータは全て(*)なので、usersテーブルの全ての情報を抽出します。
このSQL文を実行すると、画像のようになります。
usersテーブルのid、name、level、job_idの全ての情報が抽出されました。
続いては、usersテーブルから名前とレベルだけを抽出するSQL文を作成します。
名前とレベルだけを抽出するためには、SELECTに続く文に、どのカラム(列)を抽出するかを記入する必要があります。
ここではnameとlevelなので、次のようなSQL文になります。
SELECT name, level FROM users;
このSQL文を実行すると、画像のようになります。
このように、idとjob_idは表示されず、nameとlevelのみが抽出されました。
続いては、usersテーブルからレベルが50以上のプレイヤーを抽出するSQL文を作成します。
それには、SELECTにWHEREという命令を追加し、レベルの値が50以上という条件を追加します。
SELECT * FROM users WHERE level >= 50;
このSQLを実行すると、画像のようになります。
このように、levelが50を超えているプレイヤーのみが抽出されました。
WHEREを使うと、指定した条件に一致する行のみを抽出することができます。
WHEREで使える基本的な演算子には、以下のものがあります。
= 等しい
> 大きい
>= 以上
< 小さい
<= 以下
!= 等しくない
その他にも、応用としてANDやORなどがあります。
データを検索するにはSELECT文を使用します。
まずは、usersテーブルにある全てのデータを検索するSQL文を作成します。
SELECT * FROM users;
SELECTは、データベースからデータを取り出すための命令です。
SELECT文では、どこからデータを取ってくるかを指定をすると、指定された場所からデータを取り出すことが可能です。
そして、指定した場所から何を取ってくるかを指定して検索結果として表示します。
今回指定した場所はusersテーブルで、指定したデータは全て(*)なので、usersテーブルの全ての情報を抽出します。
このSQL文を実行すると、画像のようになります。
usersテーブルのid、name、level、job_idの全ての情報が抽出されました。
続いては、usersテーブルから名前とレベルだけを抽出するSQL文を作成します。
名前とレベルだけを抽出するためには、SELECTに続く文に、どのカラム(列)を抽出するかを記入する必要があります。
ここではnameとlevelなので、次のようなSQL文になります。
SELECT name, level FROM users;
このSQL文を実行すると、画像のようになります。
このように、idとjob_idは表示されず、nameとlevelのみが抽出されました。
続いては、usersテーブルからレベルが50以上のプレイヤーを抽出するSQL文を作成します。
それには、SELECTにWHEREという命令を追加し、レベルの値が50以上という条件を追加します。
SELECT * FROM users WHERE level >= 50;
このSQLを実行すると、画像のようになります。
このように、levelが50を超えているプレイヤーのみが抽出されました。
WHEREを使うと、指定した条件に一致する行のみを抽出することができます。
WHEREで使える基本的な演算子には、以下のものがあります。
= 等しい
> 大きい
>= 以上
< 小さい
<= 以下
!= 等しくない
その他にも、応用としてANDやORなどがあります。
5. データベースにデータを追加してみる
データの抽出ができたので、データベースにデータを追加してみます。
データを追加するには、データベースを作成した際に使用した、INSERT文を使用してデータを追加します。
ここでは、usersテーブルにやまぎしという新たなユーザーを1名追加するSQL文を作成します。
INSERT INTO users(id,name,level,job_id) VALUES(6,”やまぎし”,1,5);
INSERT INTOでテーブル、カラム名を指定してVALUESで値を指定しています。
また、INSERT INTOで指定するカラム名とVALUESで指定する値は順番と数を合わせなければなりません。
このSQL文を実行すると、画像のようになります。
このようにidが6、名前がやまぎし、レベルが1、job_idが5のユーザーが作成されました。
データを追加するには、データベースを作成した際に使用した、INSERT文を使用してデータを追加します。
ここでは、usersテーブルにやまぎしという新たなユーザーを1名追加するSQL文を作成します。
INSERT INTO users(id,name,level,job_id) VALUES(6,”やまぎし”,1,5);
INSERT INTOでテーブル、カラム名を指定してVALUESで値を指定しています。
また、INSERT INTOで指定するカラム名とVALUESで指定する値は順番と数を合わせなければなりません。
このSQL文を実行すると、画像のようになります。
このようにidが6、名前がやまぎし、レベルが1、job_idが5のユーザーが作成されました。