目次
はじめに
SQL(読み:エスキューエル)という言葉を聞いたことがあるでしょうか。
聞いたことはあるが何か知らない、または何となくデータベースを操作するための言語だとは知っているけれど、いまいち理解できていない…
この記事では、そんな方々へ向けてSQLとは何なのか?どういった使い方をするのか?を詳しく説明します。
SQLはエンジニアの必須知識ですので、ぜひこの記事を読んでしっかりと理解を深め、他の人にも教えてあげられるようになることを目指してください。
SQLとは?
SQLは1970年代にIBM社によって開発されたSEQUEL(読み:シークェル)という言語を原型とするデータベース操作言語です。
読み方は「エスキューエル」が一般的ですが、上記の理由から「シークェル」と読まれることもあります。
そもそもデータベースとは?
ここで、データベースというのは、検索や貯蓄が簡単に高速にできるように整理されたデータの集まりのことです。
例えば、紙の名刺帳を想像してください。
面倒くさがりの人は特にルールを決めずにもらった名刺を適当にファイリングするでしょう。
かたや、まめな人ならば五十音順にインデックスをつけてファイリングしていき、後から名前で探したり新たに追加したりするのが簡単にできるようにしていますね。
広義ではこの後者の名刺帳もデータベースと呼べます。データベースと聞いてピンとこない方はこれをイメージしながら考えていくと概念を掴みやすいです。
もちろん、プログラミングの世界でのデータベースは紙ではなく電子的な情報の集まりを指します。
「名刺帳」という名の電子的なデータベースを作った時、新たにもらった名刺データを追加したり、登録済みの名刺データを検索したりするには、データベースに対して追加・検索等の操作が必要ですね。
この操作をするための言語がSQLなのです。なお、SQLはリレーショナルデータベースという種別のデータベースを管理するシステム(RDBMS)でのみ使用されます。
参考:RDBMSとNoSQLの違い
ここでまた聞き慣れない言葉(RDBMS)が出てきました。
データベース管理システムは大まかに2種類:RDBMSとNoSQLに分けられ、SQLは前者のRDBMSでのみ使用されます。
ここからはRDBMSとNoSQLの違いについて簡単に説明しますので、とりあえずSQLについて先に知りたい方はこの項を読み飛ばしていただいても問題ありません。
RDBMS(Relational DataBase Management System)は、リレーショナルデータベースを管理するためのシステムのことです。
リレーショナルデータベースとは、関連性を持った複雑なデータ群を指します。
例えば先ほどの名刺帳の例ならば、個々の名刺にはその人の氏名だけでなく、会社名・所属・連絡先等が書かれていますね。
そこに載っていない情報、例えば「この会社って資本金はいくらくらいなのかな?」と疑問が沸いたとしましょう。
この時、別の「企業情報」というファイル(リレーショナルデータベースの世界ではテーブルと呼びます)に会社名ごとに創立年・社員数・資本金等のデータが揃っていれば、名刺に書いてある「会社名」をもとに辿って資本金を確認することができますね。
このように、複数のデータ群が関連性を持った形で整理されていて膨大で複雑なデータを管理できるようになっているのがリレーショナルデータベースです。
データが複雑である分、操作も複雑になるためSQLを用いて行う必要があります。
他方のNoSQL(読み:ノーエスキューエル)は、SQLを用いずにデータベースを管理するシステムの総称です。
NoSQLはRDBMSと比較しデータ構造が単純なため、操作に特別な言語が必要ありません。
例えば先ほどの名刺帳の例のように、取引先の個々の担当者情報や企業情報等を網羅的に管理しようとすればRDBMSを使わざるを得ませんが、そうではなく取引先1社につき1人の営業担当がいて、それが誰であるかのみ管理できればいいとしましょう。
この場合は名刺帳や企業情報ではなく、「取引先会社名-営業担当者氏名」という情報が1対1で紐づくデータ群さえあればいいことになります。
このように単純な構造を持つのがNoSQLであり、繰り返しになりますがSQLでの操作が必要ないのがRDBMSとの大きな違いです。
SQLの基本的な使い方
ここからは具体的にSQLがどう使われるのか見ていきましょう。
データベース用語
まずは覚えるべき用語を確認しておきましょう。
リレーショナルデータベースでは、データは表計算ソフト(Excel等)のように表の構造をしています。
例えば名刺帳の例なら下記の通りです。
氏名 | 会社名 | 所属 | 住所 | 電話番号 | メールアドレス |
山田 太郎 | (株)○○商店 | 営業課 | 東京都新宿区… | 033-209-XXXX | yamada@XXX.com |
鈴木 二郎 | △△製作所(株) | 調達課 | 大阪府東大阪市… | 064-309-YYYY | jiro-s@YYY.co.jp |
佐藤 三郎 | □□工業(株) | 企画課 | 神奈川県川崎市… | 044-200-ZZZZ | info@ZZZ.co.jp |
このそれぞれの項目について、データベースの世界では下記の用語で呼びます。
- テーブル:表そのものを指す。
- レコード:各行のこと。この例では名刺1枚のが情報が1レコードで表される。
- カラム:各列のこと。列ごとにデータの形式が定義される。(メールアドレスは@を含む英数字の文字列、等)
- フィールド:レコードの中の1項目のこと。(例:山田太郎のレコードの「所属」フィールドは「営業課」)
- フィールド名:そのフィールドの先頭列の名称を指す(氏名・会社名・所属・…)
SQLの文法種別
SQLの文法は大きく下記の三種類があります。
- データ定義言語:データベースオブジェクト(テーブルなど)の新規作成や削除を行う
- データ操作言語:テーブルへのデータ追加・更新・削除・検索を行う
- データ制御言語:データベースへのアクセス権限やトランザクション(※)管理
※トランザクション:データベースの整合性を保つために、ばらばらに実行すべきでない複数の処理をまとめて一括処理すること
以下、順番に具体例を見ていきましょう。
データ定義言語
データ本体であるテーブルや、データベースを利用するユーザ等のデータを定義するための文です。
CREATE(作成)やDROP(削除)、ALTER(定義変更)等があります。
下記はテーブルを新規作成する例です。
CREATE TABLE meibo { name varchar(20), tel int, email varchar(50) }
データ操作言語
テーブルに対するデータ操作を行うための文です。
テーブルにデータを挿入するINSERT、更新するUPDATE、削除するDELETE、検索するSELECT等があります。
下記はテーブルから条件に合うレコードを検索する例です。
SELECT * FROM meibo WHERE name = 'Yamada';
データ制御言語
データベース全体に関わる処理を制御するための文です。
ユーザーに特定の作業権限を与えるGRANT、権限を剥奪するREVOKE、トランザクションを開始するBEGIN、トランザクションを確定するCOMMIT等があります。
下記はTABLE1というテーブルに対しINSERTとSELECTを実行する権限をUSER1に与える例です。
GRANT INSERT, SELECT ON table1 TO user1;
まとめ
SQLについて、データベースの定義や用語を含めた解説および具体的な使用例の説明を行いました。
あいまいだった部分の理解が少しでも明確になれば幸いです。
さらに理解を深めたい方は、下記の講座も参考にしてみてください。
プログラミング初心者のみならず、データベースを活用したマーケティング等を見据えたビジネスマンの方にもご好評をいただいている講座なので、大変おすすめです!
SQL入門|データベースを操作する言語SQLを短期間で身につけビジネスの現場で活用しよう
動画でプログラミング入門をしよう
オンライン学習サービスProglus(プログラス)でプログラミングを学び、創れる人になろう!
プレミアムプランを2週間無料体験しよう
今すぐ詳細を確認する