目次
はじめに
(1)SQLとは
(2)SQLを使ってみよう
おわりに
はじめに
今回の新卒研修のまとめ記事ということで、初めてQiitaにて記事を作成しております。
内容といたしましては、研修のなかで最も理解度が高く、個人的に楽しかったデータベース研修について、その中でもSQLに焦点を当てます。
この記事の目的といたしましては、
- 全くの初心者に対して、SQLがどのようなものであるかを理解できる
- SQLの基本的な操作についてイメージができるようになる
主にこの2点です。
文章が拙い点もあるかと思いますが、何卒ご容赦くださいませ。
(1)SQLとは
Structured(構造)Query(問い合わせ)Language(言語)の略。
データベースを操作する言語です。
1.データベースって?
情報の集まりを指します。
コンピューター上においては、「データが集まっている場所」を指します。
例えでイメージしてみましょう。
とあるお店の管理において、売上データ、商品データ、在庫データ、という3つのデータをそれぞれ別の倉庫に保管していたとします。
そうすると、すべてのデータを見るためには、それぞれの倉庫に足を運ばなければならず、とても手間になります。
そこで、大きめの倉庫に3つのデータをまとめて保管したとしましょう。すると、この大きな倉庫に行くだけですべての情報が手に入り、とても効率的になります。
この大きめの倉庫がデータベースになります。
2.データベースの種類とNoSQL
データベースにも色々種類があるけれど、一般的に広く使われているものは、データを表で管理するリレーショナルデータベース(RDB)です。関係データベースとも呼ばれます。
そして、RDB以外のデータベースをNoSQL(Not Only SQL)と呼びます。NoSQLの主な具体的としてはキューバリュー型やドキュメント型などがあります。
3.DBMSについて
データの塊であるデータベースを操作するシステムが、Data Base Management System(DBMS)です。DBMSはアプリケーションソフトウェアの要求に応じてデータベースを操作し、その結果を返してくれます。
データベースは巨大な倉庫。
その倉庫に誰でも入ることができ、置き場所を変えたり物を取っていったりすることが出来たらどうなるでしょうか。
おそらく混乱が発生し、大事なデータが壊されてしまう可能性があります。このような事態を防ぐために、DBMSという管理者がいます。
その管理者に倉庫の中身についてQuery(問い合わせ)する言葉がSQLです。
(2)SQLを使ってみよう
では実際にSQLを使用して、データベースを操作してみましょう。
この記事では、基本のコマンドを3つ紹介します。
- 【SELECT文】
- 【WHERE句】
- 【INNER JOIN文】
【SELECT文】
まずは、DBに収納されているテーブルを見てみましょう。
テーブルを表示するコマンドはSELECT文です。
SELECT文の基本構造は以下の通りです。
SELECT * FROM (スキーマ名).(テーブル名);
「*」の意味は、「全ての列」、;の意味は「ここで命令は終わり」です。
このコマンドは「このスキーマのこの名前のテーブルの全ての列を見せて」という意味になります。
例題として、ownerというスキーマから「商品管理」というテーブルを表示してみよう。
SELECT * FROM owner.商品管理;
すると…
+----+--------------+--------+--------+-----------+
| id | product_name | price | stock | category |
+----+--------------+--------+--------+-----------+
| 1 | ノートPC | 120000 | 5 | パソコン |
| 2 | マウス | 1500 | 30 | 周辺機器 |
| 3 | モニター | 28000 | 12 | 周辺機器 |
| 4 | キーボード | 3200 | 18 | 周辺機器 |
| 5 | イヤホン | 2200 | 50 | オーディオ |
+----+--------------+--------+--------+-----------+
このように、テーブルが表示されます。
また、*の場所に特定の列名を入れれば、その列だけが表示されます。
例えば…
SELECT product_name FROM owner.商品管理;
+--------------+
| product_name |
+--------------+
| ノートPC |
| マウス |
| モニター |
| キーボード |
| イヤホン |
+--------------+
このようにproduct_nameの列だけが表示されます。
【WHERE句】
商品管理のテーブルにて、product_nameのみを抜き出すことが出来ましたが、特定の条件を満たしたproduct_nameのみを抜き出したい…そのような事もあるでしょう。
これは、先程紹介したSELECT文にWHERE句を加えると可能になります。
WHERE句の基本構造は以下の通りです。
WHERE (演算式を適応する列名)(演算式)(値);
例えば、先程の商品管理のテーブルにて、
categoryが「周辺機器」の product_nameを表示したい場合は、
SELECT product_name
FROM owner.商品管理
WHERE category = '周辺機器';
(「周辺機器」は文字列なので'で囲みます)
と打つと…
+--------------+
| product_name |
+--------------+
| マウス |
| モニター |
| キーボード |
+--------------+
このように、categoryが「周辺機器」のもののみが表示されます。
【INNER JOIN文】
最後に、テーブル同士を結合させるINNER JOIN文を紹介します。
SELECT文にて表示した商品管理のテーブルに、注文管理のテーブルを結合してみます。
ここでの結合は両方に存在するデータだけを取り出す結合方法になります。
商品管理テーブル↓
| id | product_name | price | stock | category |
|---|---|---|---|---|
| 1 | ノートPC | 120000 | 5 | パソコン |
| 2 | マウス | 1500 | 30 | 周辺機器 |
| 3 | モニター | 28000 | 12 | 周辺機器 |
| 4 | キーボード | 3200 | 18 | 周辺機器 |
| 5 | イヤホン | 2200 | 50 | オーディオ |
注文管理テーブル↓
| order_number | id | amount | order_date |
|---|---|---|---|
| 1 | 1 | 1 | 2024-04-01 |
| 2 | 2 | 2 | 2024-04-03 |
| 3 | 1 | 1 | 2024-04-05 |
| 4 | 4 | 3 | 2024-04-10 |
両方のテーブルに"id"の列がありますね。
この部分を結び付けて結合をしてみましょう。
INNER JOIN文の基本構造は以下の通りです。
SELECT 列名
FROM (基本となるテーブルA)
INNER JOIN (テーブルB)
ON (テーブルAの共通列) = (テーブルBの共通列);
今回の場合、商品管理テーブルの"id"列と、注文管理テーブルの"id"列が共通列なので、命令文は以下になります。
SELECT *
FROM products
INNER JOIN orders
ON products.id = orders.id;
命令全体の意味としては、
「商品管理テーブルのid列と注文管理テーブルのid列を共通部分として結合したテーブルの(INNER JOIN部分)、全ての列を見せて欲しい(SELECT部分)」になります。
+----+--------------+--------+-------+-----------+----------+------------+--------+-------------+
| id | product_name | price | stock | category | order_id | id | amount | order_date |
+----+--------------+--------+-------+-----------+----------+------------+--------+-------------+
| 1 | ノートPC | 120000 | 5 | パソコン | 1 | 1 | 1 | 2024-04-01 |
| 1 | ノートPC | 120000 | 5 | パソコン | 3 | 1 | 1 | 2024-04-05 |
| 2 | マウス | 1500 | 30 | 周辺機器 | 2 | 2 | 2 | 2024-04-03 |
| 4 | キーボード | 3200 | 18 | 周辺機器 | 4 | 4 | 3 | 2024-04-10 |
+----+--------------+--------+-------+-----------+----------+------------+--------+-------------+
このような結果が帰ってきます。
ここで注文したい点は、商品管理テーブルにあった「イヤホン」が無くなっていることです。
何故「イヤホン」が消えてしまったのか、その理由は注文管理テーブルに「イヤホン」のid番号が無かったからです。
INNER JOINは「両方のテーブルに共通して存在するデータだけを結合する」命令文なので、「イヤホン」は結合先のテーブルに含まれなかったのです。
おわりに
以上、SQLについてまとめて参りました。
研修内ではテーブルの結合や射影を中心に行いましたが、思った通りのテーブルが完成した時の達成感たるや…脳汁が溢れましたね。
とても楽しかったです。
今後も、エンジニアの卵として励んで参る所存です。
温かく見守っていただければ幸いです。
何卒よろしくお願い申し上げます。