「仕事でデータベースを扱うことになった」
「SQLの勉強をしたいと思っている」
この記事にたどり着いた人は、上記のような目的や意志があるのではないでしょうか。
いきなり「データベース」や「SQL」と言われても、小難しくて何だかよくわからないですよね。
そこでこの記事では、データベースやSQLの使い方について基本を解説します。
ぜひ参考に、SQLの使い方を理解してくださいね。
目次
【基本】データベースとSQLについて
まずは、基本であるデータベースとSQLについて解説します。
データベースと一言で言っても、その種類には次のようにさまざまなものがあります。
- 階層型データベース
- ネットワーク型データベース
- リレーショナルデータベース
この記事では、上記の「リレーショナルデータベース管理システム(RDBMS)」の使い方について解説しましょう。
なぜなら、MySQLやOracleといったいわゆる一般的なデータベースの多くが、リレーショナルデータベースを採用しているからです。
リレーショナルデータベースは、表形式のデータベースで「行」と「列」で構成されています。
行には各データ・レコードが格納され、列に「ID」や「名前」「年齢」「住所」といった重複のない各項目を設定可能です。
リレーショナルデータベースは、データベース内の「テーブル(表)」に格納しているレコード・データを「SQL(Structured English Query Language)」というプログラミング言語を使って操作します。
SQLを使うと、具体的に次のようなデータの操作が可能です。
- 取得:テーブル内に存在するデータを検索して取得する
- 追加・登録:テーブルにデータを追加・登録する
- 更新:テーブル内に存在するデータを書き換える
- 削除:テーブル内に存在するデータを削除する
SQLでは上記以外の操作もあり、これらの操作を組み合わせてより複雑な処理を施すこともできます。
この記事では、上記4つの基本操作に加えて、より細かい操作についても解説しますね。
【関連記事】
▶︎SQLとはどういうもの? 独自拡張と標準SQLの大きな違いって、何?
テーブルの概要
前の章では、データベースとSQLの基本について解説しました。
ここでは、テーブル(表)についてもう少し詳しく見ていきましょう。
SQLを使用するリレーショナルデータベースでは、テーブル(表)を使ってデータ・レコードを管理しています。
具体的には、次のような形になります。
mysql> SELECT * FROM sample_table; +------+----------+-------+-------+------------+ | id | name | class | score | dt | +------+----------+-------+-------+------------+ | 1 | Ikeda | 1 | 138 | 2020-10-01 | | 2 | Hayakawa | 2 | 156 | 2020-10-01 | | 3 | Kosaka | 3 | 162 | 2020-10-01 | | 4 | Tanaka | 1 | 169 | 2020-10-01 | | 5 | Yusa | 2 | 187 | 2020-10-15 | | 6 | Onoda | 3 | 175 | 2020-10-15 | | 7 | Hayashi | 1 | 159 | 2020-10-15 | | 9 | Onoda | 3 | 148 | 2020-10-15 | | 8 | Yusa | 2 | 187 | 2020-10-20 | +------+----------+-------+-------+------------+ 9 rows in set (0.00 sec)
上記のテーブルを見てみると、Excelでよく見る表に近い形になっていますよね。
行と列があり、セルに値が入力されているイメージです。
Excelの場合はマウス操作でコピーや移動が簡単にできますが、リレーショナルデータベースにあるテーブルはそうはいきません。
なぜなら、リレーショナルデータベースはサーバー上に置かれており、SQLを使ってのみデータ操作ができるようになっているからです。
このように、テーブルはExcelの表に近いものではありますが、その操作には特殊な言語を使う必要があります。
また、リレーショナルデータベースのテーブルには次の特徴があります。
- 1行が1件のデータを表している
- 列ごとに決められた意味の項目を持つ
- 列には「データ型」が決められている(数値や文字列など)
- 決められた型以外の値を列に格納できない
- 行は格納されている状態では順序の概念はない
先ほど紹介したテーブルで言うと、列ごとに「id」や「name」など意味のある項目が並んでいます。
また、列にはデータ型が指定でき、例えばidの列であれば数値以外のデータは格納できません。
では、次に先ほど紹介した「取得」「追加・登録」「更新」「削除」の使い方について見ていきましょう。
【超基本】SQLの使い方
この章では、SQLでよく使われる基本的な構文を使ってみましょう。
先ほど紹介した sample_tableテーブル を例に使い方を見てみます。
データを取得する使い方【SELECT】
テーブルのデータを取得するには SELECT文 を使います。
SQLの中でも基本中の基本と言える構文です。
使わないことはまずないので、しっかり覚えておくことをおすすめします!
基本構文は次の通りです。
SELECT カラム名 FROM テーブル名;
SELECT の後ろに 取得したいカラム名(列名)を記述しましょう。
そして、FROM の後ろに取得したいテーブル名を記述します。
とてもシンプルな構文なので覚えやすいかと思います。
では、実際にデータを取得してみましょう。
先ほど紹介したテーブルの scoreカラム を取得してみます。
記述方法は次の通りです。
SELECT score FROM sample_table;
上記のSQL文を実行すると、次のようにデータを取得できます。
mysql> SELECT score FROM sample_table; +-------+ | score | +-------+ | 138 | | 156 | | 162 | | 169 | | 187 | | 175 | | 159 | | 148 | | 187 | +-------+ 9 rows in set (0.00 sec)
scoreカラムのデータが取得できました!
このように、SELECT文はデータを取得可能です。
カラムごとではなく、カラム・テーブル全部のデータを取得したい場合もあるでしょう。
そんな時は、カラム名のところを「*(アスタリスク)」にすればOKです。
次のように記述できます。
SELECT * FROM sample_table;
実行すると次の通りです。
mysql> SELECT * FROM sample_table; +------+----------+-------+-------+------------+ | id | name | class | score | dt | +------+----------+-------+-------+------------+ | 1 | Ikeda | 1 | 138 | 2020-10-01 | | 2 | Hayakawa | 2 | 156 | 2020-10-01 | | 3 | Kosaka | 3 | 162 | 2020-10-01 | | 4 | Tanaka | 1 | 169 | 2020-10-01 | | 5 | Yusa | 2 | 187 | 2020-10-15 | | 6 | Onoda | 3 | 175 | 2020-10-15 | | 7 | Hayashi | 1 | 159 | 2020-10-15 | | 9 | Onoda | 3 | 148 | 2020-10-15 | | 8 | Yusa | 2 | 187 | 2020-10-20 | +------+----------+-------+-------+------------+ 9 rows in set (0.00 sec)
全てのカラムとデータが取得できているのがわかります。
【関連記事】
▶︎【初心者向け】SQLの検索処理 SELECT文の基本的な使い方を理解しよう!
データを追加・登録する使い方【INSERT】
テーブルにデータを追加・登録するには INSERT文 を使います。
基本構文は次の通りです。
INSERT INTO テーブル名 VALUES(カラム1の値, カラム2の値, カラム3の値, …);
INSERT INTO の後ろに、データを追加したいテーブル名を記述します。
そして、VALUESのカッコの中に追加したいデータの値を、カンマ区切りで入力します。
では実際に、データを追加・登録してみましょう。
次のように記述します。
INSERT INTO sample_table VALUES(10, 'Suzuki',1, 111, '2020-10-31');
上記のSQL文を実行すると、次のように表示されるはずです。
mysql> INSERT INTO sample_table VALUES(10, 'Suzuki',1, 111, '2020-10-31'); Query OK, 1 row affected (0.03 sec)
この状態でテーブル内のデータを取得してみると、次のように表示されるでしょう。
mysql> SELECT * FROM sample_table; +------+----------+-------+-------+------------+ | id | name | class | score | dt | +------+----------+-------+-------+------------+ | 1 | Ikeda | 1 | 138 | 2020-10-01 | | 2 | Hayakawa | 2 | 156 | 2020-10-01 | | 3 | Kosaka | 3 | 162 | 2020-10-01 | | 4 | Tanaka | 1 | 169 | 2020-10-01 | | 5 | Yusa | 2 | 187 | 2020-10-15 | | 6 | Onoda | 3 | 175 | 2020-10-15 | | 7 | Hayashi | 1 | 159 | 2020-10-15 | | 9 | Onoda | 3 | 148 | 2020-10-15 | | 8 | Yusa | 2 | 187 | 2020-10-20 | | 10 | Suzuki | 1 | 111 | 2020-10-31 | +------+----------+-------+-------+------------+ 10 rows in set (0.00 sec)
テーブルの最後に追加したデータが表示されていますね。
このように、テーブルにデータを登録したい場合は INSERT文 を使いましょう!
【関連記事】
▶︎SQLのインサート(INSERT)でデータを簡単に追加するやり方まとめ
データを更新する使い方【UPDATE】
テーブルにデータを更新するには UPDATE文 を使います。
基本構文は次の通りです。
UPDATE テーブル名 SET カラム名 = カラム値;
UPDATE の後ろにテーブル名を記述し、 SET の後ろに 更新したいカラム名、カラムの値を記述しましょう。
では、実際にデータの更新をしてみます。
dtカラム の値を「2020-10-31」に更新しましょう。
次のように記述します。
UPDATE sample_table SET dt= '2020-10-31';
上記のSQL文を実行すると、次のようになるはずです。
mysql> UPDATE sample_table SET dt= '2020-10-31'; Query OK, 9 rows affected (0.01 sec) Rows matched: 10 Changed: 9 Warnings: 0
では、テーブルを SELECT文 で確認してみましょう。
mysql> SELECT * FROM sample_table; +------+----------+-------+-------+------------+ | id | name | class | score | dt | +------+----------+-------+-------+------------+ | 1 | Ikeda | 1 | 138 | 2020-10-31 | | 2 | Hayakawa | 2 | 156 | 2020-10-31 | | 3 | Kosaka | 3 | 162 | 2020-10-31 | | 4 | Tanaka | 1 | 169 | 2020-10-31 | | 5 | Yusa | 2 | 187 | 2020-10-31 | | 6 | Onoda | 3 | 175 | 2020-10-31 | | 7 | Hayashi | 1 | 159 | 2020-10-31 | | 9 | Onoda | 3 | 148 | 2020-10-31 | | 8 | Yusa | 2 | 187 | 2020-10-31 | | 10 | Suzuki | 1 | 111 | 2020-10-31 | +------+----------+-------+-------+------------+ 10 rows in set (0.00 sec)
このように全てのデータの dtカラム の値が更新されました!
【関連記事】
▶︎【実例で学ぶ】SQL「UPDATE」文の使い方 基礎・応用編
データを削除する使い方【DELETE】
テーブルにデータを削除するには DELETE文 を使います。
基本構文は次の通りです。
DELETE FROM テーブル名;
上記のSQL文を実行することで、指定したテーブルのデータ・レコードを削除できます。
実際に sample_tableテーブル のデータを削除してみましょう。
次のように記述し、テーブル内を確認してみるとデータが削除できているはずです。
mysql> DELETE FROM sample_table; Query OK, 10 rows affected (0.00 sec) mysql> SELECT * FROM sample_table; Empty set (0.00 sec)
【関連記事】
▶︎SQL DELETEで、データベース・テーブルの行を削除する方法
SQLの使い方【検索の絞込】
SQLには、先ほど紹介した4つの構文以外にも使えるさまざまな構文があるのです。
当サイトでも、各構文の使い方について詳しく解説した記事がたくさんあります。
ぜひ、あなたの使いたい目的に合わせて参考にしていただければ幸いです。
ここでは、SQLの中でもデータの検索結果を絞り込むために使われる構文を紹介します。
WHERE句
WHERE句は、データ検索の際に条件を設定する構文です。
【関連記事】
▶︎【SQL】基本だけど重要!条件式の設定”WHERE句”について解説。
比較演算子
比較演算子は、変数と数値、または変数と別の変数などで大小関係や一致・不一致の関係を調べる記号のことです。
【関連記事】
ANDとOR演算子
ANDとORは、WHERE句などで条件を複数設定したい場合に用いる演算子です。
【関連記事】
▶︎SQL andのサンプルSQL 複数条件の記述例と、優先順位
▶︎SQLで複数条件を指定するにはwhere節でandやorを使う inでの置き換えも可能
NULL判定
SQLでNULL値を取得・判定したい場合は IS NULL演算子 を使います!
【関連記事】
▶︎SQLのNULL比較にはIS NULL演算子を使う ストアドファンクションでも同様
LIKE文
LIKE文は、ワイルドカード指定であいまい検索をおこなう際に条件を指定できます。
【関連記事】
▶︎SQLの「含む」条件指定はlikeを使用 特定の月を含む条件指定も可能
BETWEEN演算子
BETWEEN演算子は、検索時に範囲指定する場合に便利な演算子です。
【関連記事】
▶︎SQL betweenで範囲指定するサンプルコード 速度アップにもつながる?
IN / NOT IN演算子
INやNOT IN演算子は、指定したリストにデータが含まれているかどうかを判定できます。
【関連記事】
▶︎SQL in句のサンプルコード集 複数カラムの指定方法とは?
▶︎SQLの含まない条件指定にはNOT IN。サブクエリの組み合わせも可能
SQLの使い方【検索結果の加工】
ここでは、SQLの中でもデータの検索結果を加工するために使われる構文を紹介します。
DISITINCT句
DISITINCT句を使うと、重複行までまとめてデータを取得可能です。
【関連記事】
▶︎SQL distinctのサンプルコード集 group byよりも700倍速い?
ORDER BY句
ORDER BY句は、検索結果を並べる順番を変えたいときに使います。
【関連記事】
▶︎SQLでソートするのはダメ?データ並び替えの基本とORDER BYの使い方を解説
LIMIT句
LIMIT句は、取得するデータ数を制限する際に使用可能です。
【関連記事】
▶︎SQLでデータの取得件数を指定する方法!LIMIT句の使い方を確認しよう【MySQL】
UNION句
UNION句は、複数の取得結果を結合した上で表示してくれる句です。
【関連記事】
▶︎【意外と知らない?】SQL unionの使い方をわかりやすく説明
EXCEPT演算子
EXCEPT演算子は、差分集合を取得する演算子です、
【関連記事】
▶︎SQLのexceptは差分集合を作る 標準SQLなのにサポートされないDBもあり
SQLの使い方【演算子と関数】
ここでは、SQLで使われる演算子と関数の使い方を紹介します。
代表的な演算子
SQLで使用する演算子は、数値の計算や比較などを行うときに使える記号のことです。
【関連記事】
CASE演算子
CASE演算子は、場合分けした条件分岐を行いたい場合に使える演算子です。
【関連記事】
▶︎【SQL】複雑な条件にも対応できるCASE式について解説。
LENGTH関数
LENGTH関数は、文字列の文字数を取得できます。
【関連記事】
▶︎SQLで桁数を取得してみよう!LENGTH関数とCHAR_LENGTH関数の使い方とは【MySQL】
TRIM関数
TRIM関数は、スペース(空白)や指定した文字を文字列の前後から削除します。
【関連記事】
▶︎【SQL】文字列からスペース(空白)を削除するには?過去と現在、二通りの方法について解説
REPLACE関数
REPLACE関数は、文字列を置換したい場合に使える関数です。
【関連記事】
▶︎SQLで文字列の置換をするにはreplace関数使用。 複数置換をするサンプルコード
SUBSTRING関数
SUBSTRING関数は、指定した一部を切り取った上で値を返します。
【関連記事】
▶︎【SQL】文字列を扱う。SUBSTRING関数とRIGHT関数/LEFT関数について解説
ROUND関数
ROUND関数は、指定した値の四捨五入、切捨て・切り上げなどを行った値を取得する関数です。
【関連記事】
▶︎SQLのROUND関数をRDBごとに解説!SQLで四捨五入をする
TRUNC関数
TRUNC関数は、指定した数値や日時の切り捨てができます。
【関連記事】
▶︎SQLのTRUNC関数で数値や日付、時間を切り捨てる方法を教えます!
CURDATE関数
CURDATE関数は、今日の日付を取得できる関数です。
【関連記事】
▶︎SQLで今日の日付を取得、WHERE句・INSERT文で使う方法を解説!
CAST関数
CAST関数は、指定した値のデータ型を変換します。
【関連記事】
▶︎SQLでデータ型を変換する方法とは!?CAST/CONVERT関数の使い方
SQLの使い方【集計とグループ化】
ここでは、SQLで集計とグループ化の使い方を紹介します。
SUM関数
SUM関数は、数値の合計を求める関数です。
【関連記事】
▶︎SQL sumのサンプルコード集 基本の小計出力から、NULL対策まで
MAX / MIN関数
MAX関数・MIN関数は、指定したカラムの最大値・最小値を取得します。
【関連記事】
▶︎【超便利!】SQLのMAX関数・MIN関数の使い方をわかりやすく解説
AVG関数
AVG関数は、値の平均値を取得できる関数です。
【関連記事】
COUNT関数
COUNT関数は、テーブルの行数を取得して返す関数です。
【関連記事】
GROUP BY句
GROUP BY句は、指定したカラムの値を基準にしたデータをグループ化できます。
【関連記事】
▶︎【SQL】GROUP BY句についてのあれこれ。条件指定をしながらグループ化をするための方法についても解説。
副問合せ(サブクエリ)
副問い合わせは、特定の条件式の中にSELECT文を埋め込むことにより、そのSELECTの結果を条件として利用する事を指します。
【関連記事】
▶︎【SQL】初心者向け。副問い合わせ(サブクエリ)についての基本的な部分を解説。
テーブルの結合
テーブル結合にはいくつかの種類があります。
テーブルの結合することで、複数のテーブルに格納されたデータを集めて取得できるのです。
【関連記事】