catch-img

難しくないSQL文。基本を押さえデータベースを適切に操作

Javaなどをはじめとした他のプログラミング言語と比較しても、SQLは覚えやすい言語です。基本的な構文を押さえ、適切に使うことでデータベースを安全に管理できるでしょう。SQL文の基本的な使い方や、よく使われる機能を解説します。

SQL文とデータベースの関係を理解しよう

プログラムやシステムの作成を行うプログラミング言語とは異なり、データベース上の操作を行うのが目的な「データベース言語」と呼ばれるものがあります。

SQLは、データベース言語の中でも特によく使われます。実際にどのように使われているのか、まずはSQL文とデータベースの関係について解説します。

データベースを操作するのがSQL文

SQL文は、データベースに操作命令を送るための言語です。例えば、多くのデータの中から条件を絞って検索したり、指定した値でデータを挿入したりできます。

他のプログラミング言語と同様、命令文には文法の決まりがあり、そのルールにのっとってSQL文を書いていくことになります。

SQL文に限らずプログラムは少しでも間違いがあればエラーが表示されるため、正しく文法を覚えなくてはいけません。

基本的に、一つの文で完結した命令文になりますが、条件分岐などのフロー制御も可能です。SQL文をうまく使いこなせば、大量のデータを短時間でまとめて編集することもできるでしょう。

SQL文の基本命令はわずか4種類

SQL文は、基本的に4種類の命令文に分けられます。一つ目は『SELECT』文です。条件を指定してデータを検索し、その結果を表示させます。

二つ目の『INSERT』文では、指定した値でデータを挿入できます。三つ目は『UPDATE』文です。既に登録されているデータの値を変更する際に使用します。

最後は『DELETE』文になりますが、指定した条件で、保存されているデータを消去できます。

このように、4種類のSQL文を使いこなせば、簡単にデータベースを操作できるのです。他のプログラミング言語とは異なり、単語の種類が少ないため、比較的覚えやすいでしょう。

SQL文の書き方はExcelをイメージ

SQL文を作る際は、表形式のデータをExcelで操作する手順をイメージすると分かりやすくなります。例えば、SELECT文を実施することは、Excelのオートフィルタ機能とよく似ています。

フィルタリングで選別されたデータを編集すれば、SQLのUPDATE文による操作と同等の動作になるでしょう。INSERT文は、表の最後尾にデータを挿入するExecel操作をイメージしてみてください。

DELETE文の動作は、Excelでオートフィルタによるデータ選別の後、行を削除することと同様です。

基本はデータを取得する「SELECT文」

4種類あるSQL文の中でも、SELECT文はよく利用する命令文です。どのように使用するのかを紹介します。

「SELECT 列名 FROM テーブル名」が基本パターン

SELECT文は、『SELECT 列名 FROM テーブル名』が基本構造になります。列名は、テーブルの縦ラインのことであり、どの列を抽出したいかを指定します。

列名は一つではなく、複数を選択できます。その際は、『,』で列名を区切るのが文法です。例えば、『SELECT 列名A,列名B,列名C FROM テーブル名A;』というように記述します。

続いて、テーブル名には、データベースに格納されているテーブルを指定しましょう。データを保存する先がテーブルになるため、どのテーブルからデータを抽出するかを記述します。

もちろん、実在しないテーブル名や、テーブル名の誤り、SELECTで指定した列名が対象のテーブルにない場合はエラーになります。 実際の例を紹介します。次のような「社員」というテーブルがあるとします。

氏名
部署
性別
田中 一郎
人事
男性
佐藤 次郎
営業
男性
鈴木 一子
営業
女性
斎藤 仁美
総合
女性

このテーブルから、氏名だけを抽出したい場合は、次のようなSQL文を用意します。

SELECT 氏名 FROM 社員;

これで「社員というテーブルから氏名のみを抽出する」という命令文になります。

条件の絞り込みは「WHERE句」を用いる

SELECT文では、さらに絞り込みができる機能があります。それが『WHERE句』です。

WHERE句は、『FROM テーブル名』の後に付け加えることで、指定した列名のデータから、さらに条件に見合ったデータを抽出できるようになります。

使い方は、『WHERE 列名 条件式 値』です。先の社員のテーブルを使ってみましょう。例えば、「社員というテーブルから男性のデータのみを抽出したい」という場合、以下のようなSQL文を書きます。

SELECT *FROM 社員 WHERE 男性;

SELECT直後の「*(アスタリスク)」は全フィールドを意味します。この場合では「社員」の全列取得となりますが、データベースが大きくなると、全列取得は取得量が膨大になりますので注意しましょう。

WHEREには、一致する文字列以外に、「~以上、未満」といった数字や、「頭文字が〇〇で始まる単語」などを条件にすることも可能です。

データベース業務でよく使われる他の構文

SELECT文には、WHERE以外にも組み合わせて使える構文が存在します。その中でも、特に業務でよく使う構文をいくつか紹介しましょう。

「AS句」

『AS句』は、簡単に言ってしまえば「カラムに別の名前を付ける」という役割を持っています。どのように使うのか、具体的に紹介していきましょう。

例えば、「商品」というテーブルで以下のようなテーブルがあるとします。

商品名
税抜き価格
りんご
100
ピーマン
150
お肉
300

このテーブルに対し、税率10%をかけたデータを抽出するとします。

しかし、その場合「税抜き価格」というカラム名が矛盾してしまうため、AS句を使って「税込み価格」に変えてみましょう。

SELECT 商品名,税抜き価格*1.10 AS 税込み価格 FROM 商品;

この命令文を使うと、以下のような表が抽出されます。

商品名
税込み価格
りんご
110
ピーマン
165
お肉
330

AS句はこのように、カラムを変えた方がデータが見やすくなる場合に活用すると覚えておきましょう。

「ORDER BY句」

『ORDER BY句』の役割は、検索結果の並び替えです。例えば、「社員表」という以下のようなテーブルがあるとします。

社員ID
名前
部署
性別
03
田中 和一
営業
男性
01
斎藤 洋子
企画
女性
02
中村 寛
商品開発
男性

このテーブルを、次の命令文を使ってIDの昇順に整列します。

SELECT * FROM 社員表 ORDER BY ASC;

この命令文を実行すると、表は以下のようになります。

社員ID
名前
部署
性別
01
斎藤 洋子
企画
女性
02
中村 寛
商品開発
男性
03
田中 和一
営業
男性

ORDER BYの後は「ASC」「DESC」をつけるのが一般的です。ASCは昇順、DESCは降順になります。

「GROUP BY句」

『GROUP BY句』は、データをグループ化するのに用います。これは、ひとまとめにしたいデータがある場合などに有効です。 例えば、以下の「買い物の記録」というテーブルがあるとしましょう。

番号
品名
金額
日付
1
ボールペン
100
2020/08/01
2
ノート
200
2020/08/01
3
おにぎり
110
2020/08/02
4
お茶
130
2020/08/02

このデータから、「日付ごとに使った金額の合計」を知りたいとしましょう。以下のような命令文を使えば、集計することが可能です。

SELECT SUM(金額),日付 FROM 買い物の記録 GROUP BY 日付;

この命令文を記述すると、次のような結果が表示されます。

金額
日付
300
2020/08/01
240
2020/08/02

このように、ちりばめられたデータを、共通の要素に従ってグループ化する際に使う命令文だと覚えておきましょう。

他の基本命令3種類も把握しておこう

SQLではよくSELECT文が使われますが、他の命令文3種も重要です。それぞれ使い方などを見ていきましょう。

データを追加する「INSERT文」

データを追加したい場合は、INSERT文を使います。1行だけでなく、複数行まとめて追加できるため、手動でデータ入力するよりも便利です。

構文は、『INSERT INTO テーブル名(列名A,列名B,…) VALUE(値A,値B,…)』となります。

他の文と比べ、列の数だけ長くなるのが特徴です。列名を省略して記述しても、同じ命令を与えられます。その場合は、VALUE以降の値を必ず列の数だけ指定しなければなりません。

データを更新する「UPDATE文」

UPDATE文では、既存のデータを更新できますが、基本的な構文は『UPDATE テーブル名 SET 更新内容』です。更新内容には、演算子などが使われます。

例えば、『UPDATE テーブル名A SET 列名A = 100;』と記述すると、列名Aの全ての値を100に更新します。

これは、WHERE構文と組み合わせると有効に活用できます。具体例を見ていきましょう。

UPDATE 商品 SET 価格 = 110 WHERE 商品名='りんご’;

これは「商品というテーブルにある、りんごの価格を全て110にする」という命令文になります。このように、UPDATE文はデータを更新する際に重宝する命令文です。

データを削除する「DELETE文」

DELETE文で命令すれば、複数行のデータを削除してくれるだけでなく、1回の操作で全てのデータ削除もできます。

既存のテーブルを全て空にしたい場合は、『DELETE FROM テーブル名』で全てのデータを消去します。

複数行のデータを削除したい場合は、WHERE句で条件を指定しましょう。例文を書くと、『DELETE FROM テーブル名A WHERE 列名A = NULL;』とすれば、列名Aの値が空白のデータのみ削除します。

DELETEは、リスクの高い操作です。そのため、慎重に作業をしなければなりません。データを削除する前は、必ずSELECT文でこれから削除するデータの有無や内容を確認し、実行するようにしましょう。

消し漏れがないか、間違ったデータを消していないかを確認するためにも、削除後は最初に実行したSELECT文を実施します。検索できたデータがないはずです。

SQL文の基本的なルールとエラーへの対処

SQL文には演算子や記号が使われますが、文法で決められた意味を持つ記号があります。基本的なルールと、よくあるエラーへの対処方法を紹介します。

改行や「*」「;」「'」の意味

記号の中でも便利に使えるものが先ほど少しだけ触れました『*(アスタリスク)』です。これは、ワイルドカードとして利用され、『全て』という意味を持ちます。例えば、『SELECT * FROM テーブル名A;』とすれば、Aというテーブル全てのデータを検索します。

他にも『;(セミコロン)』がありますが、これは1文の終わりを示します。SQL文の最後に『;』をつけて、命令を終了するという操作です。

SQLのツールによっては省略した場合でも正確に実行されますが、エラーを返すこともあるため確実に付け加えましょう。

WHERE句などで文字や日付の値を指定する場合は、『'』で値を囲みます。数字の場合は不要です。文字や日付にこのルールを忘れてしまうとエラーを吐き出します。

よくあるエラーと対処方法

SQL文でエラーが表示された場合、「エラーコード」を確認すればエラーの原因がわかります。エラーコードはかなりの数に上り、全部を覚えるのは不可能です。 ここでは、よくあるエラーについてのみ覚えておきましょう。

  • 『Error Code: 1064』:これはスペルミスです。特に初心者のうちは、全角文字が入力されていないかに注意しましょう。
  • Error Code: 1046』:これはデータベースを指定していないエラーです。データベースの名前を「USE データベース名;」という形で指定する必要があります。

SQL文を理解しデータベースを適切に操作しよう

SQL文は、膨大なデータベースを操作するために使われる文章で、データベースエンジニアにとって、習得はほぼ必須と言えます。

他のプログラミング言語と比べるとそこまで難しいものではありません。4種類の基礎構文を中心に、条件文や細かいルールなどを覚えて、自由にデータベースを扱えるようになりましょう。

  SQLの勉強方法とは。学習時間や流れと学習ポイントを解説 | 株式会社ジョブサポート-新人研修・未経験者向けエンジニア研修(Java,JavaScript)のジョブサポート データベースを扱うエンジニアにとって、SQLの習得はほぼ必須です。データベースエンジニアになるためには、SQLを勉強する必要があります。どのようにSQLを学習すればいいのでしょうか。学習時間方法、や学習のポイントについて解説します。 株式会社ジョブサポート-新人研修・未経験者向けエンジニア研修(Java,JavaScript)のジョブサポート


プロエンジニア育成コース(Java,SQL,Spring) 短期通学講座、オンライン・リモート講座 (Java,HTML5・CSS・JavaScript)について お気軽にお問い合わせ下さい。