全3回で「SQL学びの入り口」を目指す本連載。今回は、学習に先立ち、SQLとはどのようなものなのか、実際の画面を見てみることにしましょう。
基本のSELECT文
例えばこんなデータがあったとします。それぞれ「生徒マスター」テーブル、「選択コース」テーブルと呼びます。
《生徒マスター》
《選択コース》
■データを取り出してみる
SQLでデータを取得するときに使う構文をSELECT文といいます。
例えば、生徒マスターから氏名を取得しよう、という場合は、
SELECT 氏名 FROM 生徒マスター;
のように書きます。
生徒・氏名・校舎すべてであれば、
SELECT * FROM 生徒マスター;
と書きます。
▲無愛想な画面で恐縮ですが、実行画面です。自分のパソコンでSQLを試す方法については第3回でご紹介します。
■条件を加えてみる
「新宿校舎の生徒」を取り出してみましょう。先ほどのSELECT文に以下を追加します。
WHERE 校舎='新宿'
WHERE ~
では、さまざまな条件を組み合わせることができます。また、SELECTの結果には校舎がありませんが、校舎で絞り込まれていることにも注目してください。
ここでは文法や単語の意味を書いていませんが、何を指定しているかなんとなくわかるのではと思います。
これがSQLのSELECT文です。そしてこのSELECT文が学ぶべきSQLのほぼすべてです。
テーブルを組み合わせる
選択コースの方も見てみましょう。 SELECT * FROM
選択コース;です。同じですね。
選択コースには生徒番号がありますが、氏名がありません。生徒番号と氏名は生徒マスターで管理しているからです。
ですが、例えば選択コースをプリントアウトしたら「番号だけじゃわからないよ、名前も欲しいよ」と言われるに違いありません。
Excelで関数を使える人ならVLOOKUPやXLOOKUPを使いたくなる場面ですが、SQLの場合は「テーブルとテーブルを結びつける(join)」と考えます。
具体的には、次のように書きます。ちょっと長くなるので、読みやすくするために改行を入れました。
SELECT * FROM 選択コース
JOIN 生徒マスター
ON 選択コース.生徒番号 = 生徒マスター.生徒番号;
JOINの行で、結びつける相手(ここでは生徒マスター)を指定しています。ONの行で結びつけ方を指定しています。生徒番号が一致している、という指定です。
SELECTの後ろが*なので、選択コースの生徒番号とコース、生徒マスターの生徒番号と氏名と校舎が出てきてしまいました。コースと生徒番号と氏名だけになるように指定してみましょう。
SELECT
選択コース.コース,
生徒マスター.生徒番号,
生徒マスター.氏名
FROM 選択コース
JOIN 生徒マスター
ON 選択コース.生徒番号 = 生徒マスター.生徒番号;
■条件を加えてみる
「新宿校舎の生徒」に限定してみましょう。WHERE 校舎='新宿'
です。
SELECT
選択コース.コース,
生徒マスター.生徒番号,
生徒マスター.氏名
FROM 選択コース
JOIN 生徒マスター
ON 選択コース.生徒番号 = 生徒マスター.生徒番号
WHERE 校舎='新宿';
■並べ替えてみる
コース順に並べ替えてみましょう。ORDER BY
コースを追加します。
SELECT
選択コース.コース,
生徒マスター.生徒番号,
生徒マスター.氏名
FROM 選択コース
JOIN 生徒マスター
ON 選択コース.生徒番号 = 生徒マスター.生徒番号
WHERE 校舎='新宿'
ORDER BY コース;
自分が欲しい物を“どんどん指定していく”イメージが掴めたのではないでしょうか。このように、データベースに対してデータを要求するSQL文を「クエリ(問い合わせ)」と呼びます。
件数を数える
SELECT文でデータを集計することができます。ここではコース毎の件数を数えていますが、例えば、テストの点数や商品の在庫数を保存しているテーブルであれば、平均や合計を出すこともできます。
SELECT
コース,
COUNT(*) AS 人数
FROM 選択コース
GROUP BY コース;
おまけ:繰り返しデータを非表示にする
最後に少しだけ“おまけ”です。ご興味ある方はご覧ください。
選択コース、生徒番号、氏名を選択コース順に並べたとき、国語、国語、国語……と並んでしまうのを1回だけ表示するようにしてみました。
データとしては「国語 C0001、谷内 ミケ」、「国語 C0003、北川 ジョン」それぞれの組み合わせに意味があるので、各行に「国語」が出るのが“正しい”のですが、見やすくするために加工した形で取り出すこともできる、というサンプルです。
SELECT
CASE
WHEN 選択コース.コース = LAG(選択コース.コース)
OVER (ORDER BY 選択コース.コース)
THEN ""
ELSE 選択コース.コース
END AS 選択コース,
生徒マスター.生徒番号,
生徒マスター.氏名
FROM 生徒マスター
JOIN 選択コース ON 生徒マスター.生徒番号 = 選択コース.生徒番号
ORDER BY 選択コース.コース;
これはあくまで、やろうと思えばこんなこともできるというもので、いきなり挑戦する必要はありません(データベースシステムによっては、そもそも対応していない可能性があります。第3回参照)。興味がある方は、「SQL ウィンドウ関数」というキーワードで検索してみてください。
次のステップは、具体的な自習方法を知ること
次回は、どのように独学を進めるといいのか、具体的な方法をご紹介します。
▼SQL学びの入り口
1990年代、生産管理ソフトウェアの開発およびサポート業務/セミナー講師を担当。その後、書籍および雑誌での執筆、PCおよびMicrosoft Officeのeラーニング教材作成/指導、新人教育にも携わる。主な著書は『シェルの基本テクニック』(IDGジャパン)、『基本がわかるSQL入門 データベース&設計の基礎から楽しく学ぶ』『Accessではじめるデータベース超入門』 『Linux+コマンド入門 ——シェルとコマンドライン、基本の力』 (技術評論社)など。
※本記事に記載されている会社名、製品名はそれぞれ各社の商標および登録商標です。