皆さんは、SQLと呼ばれるデータベース言語をご存じでしょうか。現在稼働するシステムでは必ずといってよいほどデータベースが稼働しています。そのため、ITエンジニアを目指す人やデータベースを扱う人にとって、SQLは必須の知識です。
本記事ではこの「SQL」について、基礎から詳しく解説します。
SQLとは
SQLはデータを管理するソフトウェアであるデータベースを操作および制御するための言語です。膨大なデータをデータベースで一元管理し、さまざまなシステムからデータベース内のデータを用いることで、業務を効率よく行うことができます。
データベース製品には多くの種類がありますが、SQLはISO(国際標準化機構)で標準化されているため、SQLを覚えれば多くのデータベースで扱えます。たとえば、商用データベースであるOracle DatabaseやSQL Server、オープンソースデータベースのMySQLやPostgreSQLなども、SQLが使用可能です。
そのため、SQLを理解することは大変重要であり、また多くのシステム開発業務で役立ちます。
SQLの種類
SQLは多くの命令を用いてデータベースを扱います。命令は大きく3つに分類されます。
● DDL:データ定義言語
● DML:データ操作言語
● DCL:データ制御言語
DDL
DDL(Data Definition Language)はデータ定義言語と呼ばれ、テーブルや索引、シーケンスなどのデータベースオブジェクトを定義する言語です。データベースやテーブルを新規に作成(CREATE)する場合や、変更(ALTER)、削除(DROP)する際に使用します。また、テーブルに格納されているデータを一括ですべて削除するTRUNCATEも、DDLに含まれます。
DML
DML(Data Manipulation Language)はデータ操作言語と呼ばれ、データベースを操作し、格納されているデータの検索や削除などを行うための言語です。データベースを使用する中で最も使用する言語と言えます。命令文は、データの検索(SELECT)、更新(UPDATE)、挿入(INSERT)、削除(DELETE)があります。
DCL
DCL(Data Control Language)はデータ制御言語と呼ばれ、データやトランザクションを制御するための言語です。ユーザーに対してアクセス権限を付与(GRANT)する命令や、権限の取消(REVOKE)が含まれます。
データベース製品によっては、COMMITやROLLBACKなどトランザクションを制御する言語(TCL)も、DCLに含める場合があります。
SQLの構文
ここでは、SQLの命令の中で最もよく使用されるDMLにおいて、代表的な4つの命令を解説していきます。説明を分かりやすくするため、以下のテーブルがあったとします。
【商品マスタ】
SELECT(検索)
SELECT文は、テーブル内にあるデータを検索する場合に使用します。
SELECT 列1, 列2, 列3, ... FROM テーブル WHERE 条件
列はカンマ区切りで複数指定できます。たとえば、商品番号が001のデータを検索したい、という場合は以下のようなSQLとなります。
SELECT ’商品番号’, ‘商品名’, ‘価格’ FROM 商品マスタ WHERE 商品番号=’001’
なお、SELECTの後にアスタリスク「*」を指定すれば、全ての列を表示できます。
INSERT(追加)
商品マスタにデータを追加する場合は、INSERT文を実行します。
INSERT INTO テーブル名 (列1, 列2,...) VALUES (値1, 値2,...)
先ほど作成した商品マスタに、商品名「マンゴー」のデータを登録します。以下のようなSQLになります。
INSERT INTO 商品マスタ(’商品番号’, ’商品名, ’価格’, ’在庫数’) VALUES (
‘005’
,‘マンゴー’
,1000
,3
)
実行すると、商品マスタにデータが登録されます。INSERT文は、1レコードずつ値をいれて追加していくことも、他のテーブルからSELECTした結果をまとめて追加することもできます。
UPDATE(更新)
すでに登録したレコードに対して、一部のフィールドの値を更新したい、という場合は、「UPDATE」文を用います。
UPDATE テーブル名 SET 列1 = 値1 WHERE 条件
大量データから特定のデータのみ値を更新した場合は、WHERE句の後に条件を記載します。この条件に該当する全てのデータが、指定した値に更新されます。WHERE句をつけなかった場合は、該当テーブルの全データで指定した列に対して値が更新されます。
例として、商品番号001の価格を更新するには、以下のSQLを実行します。
UPDATE 商品マスタ SET 価格 = 300 WHERE 商品番号=’001’
これにより、データは以下の通りに変更されます。
DELETE(削除)
不要なデータを削除したい、という場合は、「DELETE」文を用います。
DELETE FROM テーブル名 WHERE 条件
WHERE句に条件を記載することで、該当するレコード全てが削除されます。WHERE句をつけない場合、テーブル内の全データが削除されます。たとえば、商品マスタから商品番号「003」のデータを削除する場合は、以下のようになります。
DELETE FROM 商品マスタ WHERE 商品番号=’003’
以上のように、「INSERT」「UPDATE」および「DELETE」文でデータの追加、更新、削除が実行できます。ただし、これらの文を実行しても、あくまでメモリ内で処理されるだけで、まだテーブルには反映されません。DCLの1つ「COMMIT」文の実行により、それまでの実行結果がデータベースに反映されます。逆に「ROLLBACK」文を実行すると、実行した「INSERT」「UPDATE」「DELETE」文は取り消されます。
SQLの関数
DMLでは、単純に登録されたデータを扱うだけでなく、関数を用いることで計算を行うことも可能です。ここでは、代表的な関数をご紹介します。
COUNT
COUNT関数はSELECT文において条件に当てはまる行数を出力します。COUNT(*)とすれば条件に該当するレコード件数全件、COUNT(列名)とすれば、指定した列名のNULL以外のレコード件数を出力します。
・COUNT関数
SELECT COUNT(*) FROM 商品マスタ
出力結果
MAX / MIN / AVG
MAX関数、MIN関数、AVG関数は、数値型のカラムに対してそれぞれの計算結果を出力します。MAX関数は最大値、MIN関数は最小値、AVG関数は平均値を返します。
・MAX関数
SELECT MAX(価格) FROM 商品マスタ
出力結果
・MIN関数
SELECT MIN(価格) FROM 商品マスタ
出力結果
・AVG関数
SELECT AVG(価格) FROM 商品マスタ
出力結果
4.3 UPPER / LOWER
UPPER関数、LOWER関数は、文字列型(英字)において、大文字・小文字を変換します。UPPER関数では大文字、LOWER関数では小文字を返します。たとえば、「sample_moji」テーブルの列KOMOJIに”abcdef”、列OMOJIに”ABCDEF”が格納されていた場合、以下のようになります。
・UPPER関数
SELECT KOMOJI, UPPER(KOMOJI) FROM SAMPLE_MOJI
出力結果
・LOWER関数
SELECT OMOJI, LOWER(OMOJI) FROM SAMPLE_MOJI
出力結果
まとめ
本記事では、SQLの基本的な部分について解説しました。今回ご紹介した内容の中でも、DMLの部分だけでも理解すれば、データベースからデータを検索、更新することができます。
SQLはシンプルですが奥が深いです。テーブルの結合や複雑な関数、条件を指定することでさまざまなデータを返すことができます。逆に、同じ結果を返すSQLでもパフォーマンスが大きく異なる場合もあります。
SQLは、データベースの基本です。今回の内容を参考にSQLを理解して、使いこなせるようになりましょう。
- カテゴリ:
- キーワード: