わかりやすく SQL とは
表がぎっしり詰まったデータベースの前に立ったとしましょう。その中から、ほしいものだけを取り出すにはどうすればよいでしょうか。人に尋ねるように、データベースにもきちんと尋ねればよいのです。どの列を見るかを選び、どの行だけを残すかの条件を伝えます。このように尋ねるための言葉が、SQLです。
データベースに尋ねる
前に、データベースは表が集まった倉庫だと見ました。表の中には、行と列がきちんと並んでいます。でも、そのたくさんの行の中から、ほしいものだけをどうやって取り出すのでしょうか。
人に尋ねるように尋ねればよいのです。ただし、言い方は前もって決めておきます。「二十歳以上の人の名前を教えて」のような人の言葉を、決まった言い方に直して送ると、データベースが理解して答えてくれます。
人の言葉のかけらを順に押して、問いの言葉に変えてみましょう。見たい列と条件を選ぶと、決まった言い方ができあがります。
人の言葉が問いの言葉に変わりました。よく見ると、二つの部分に分かれています。一つはどの列を見るか、もう一つはどの行だけを残すかです。
これに、どの表から取り出すかをFROMで加えれば、問いの言葉が完成します。複雑に見えても、中身は単純です。まず、列の選び方から順に見ていきましょう。
見たい列を選ぶ、SELECT
表には列がいくつもあります。名前、年齢、町のようなものです。でも、いつもすべての列が必要なわけではありません。名前だけを見たいときもあります。
そういうときは、見たい列だけを選びます。選んだ列だけが残り、ほかは隠れます。このように列を選ぶことをSELECTと呼びます。結果に何を見せるかを決める部分です。
見たい列の見出しを押してみましょう。選んだ列だけが残り、ほかの列は隠れます。もう一度押すと元に戻ります。
必要な列だけが、すっきり残りました。表がずっと見やすくなりました。でも、列を選ぶだけでは足りないときがあります。行はまだ全部残っているからです。
年齢にかかわらず、全員が見えています。私たちはふつう、「二十歳以上の人だけ」のように条件をつけて尋ねます。今度は、行を絞りこんでみましょう。
条件で行を絞る、WHERE
今度は行の番です。表のすべての行が必要なわけではありません。ほしい行には、年齢が二十歳以上であるといった共通点があります。
その共通点を条件として書きます。条件に合う行だけが残り、合わない行は外れます。このように行を絞りこむことをWHEREと呼びます。何だけを残すかを決める部分です。
条件を押して、つけてみましょう。年齢がその条件に合う行だけが残り、合わない行は薄くなって外れます。
条件に合う行だけが残り、ほかは静かに外れました。これで、列を選ぶことと行を絞ることの両方を身につけました。
でも、本当の力は二つを合わせたときに出てきます。見たい列を選びながらほしい行だけを残せば、ちょうど必要な分だけが残った表ができます。二つを一度に使ってみましょう。
二つを合わせると結果の表
では、二つの技を一度に使ってみましょう。条件で行を絞ると、条件に合う行だけが残ります。その行から見たい列だけを選ぶと、その列だけが見えます。
選んだ列と絞った行が出会うところに、小さな結果の表ができます。問いにぴったり合う答えが、表の形で出てきたのです。実際のデータベースは先に絞りこんでから列を選びますが、どちらから考えても結果は同じです。
列を選ぶことと条件で絞ることを、順に押してみましょう。二つを合わせると、条件に合う行と選んだ列だけが残った結果の表ができます。
ほしかった答えが表になって出てきました。たくさんの行と列の中から、問い一つでちょうど必要な分だけを選び出したのです。人が一つひとつ目で見ていかなくても、データベースが自分で選んでくれます。
表が百万行あっても、やり方は同じです。前に見たインデックスがあれば、データベースはそれを使って、条件に合う行をもっと速く見つけます。問いさえうまく書けば、答えはすぐに返ってきます。
まとめ
一言でまとめるとこうです。SQLは、データベースに尋ねるための言葉です。どの列を見るかを選ぶのがSELECT、どの行だけを残すかを絞るのがWHEREです。
二つを合わせると、条件にぴったり合う結果の表ができます。問い一つでほしい答えを表で受け取ること、これがSQLの基本です。
要点を順に押して振り返りましょう。(問いの言葉 SQL → 列を選ぶ SELECT → 行を絞る WHERE → 合わせると結果の表)
これで、データベースにきちんと尋ねる方法がわかりました。ほしい列を選び、行を絞りこんで、必要な答えだけを受け取る技です。
でも、ここまでは表を一つしか扱ってきませんでした。実際には、人の表と注文の表のように、情報がいくつもの表に分かれていることがよくあります。次のレッスンでは、いくつもの表をつないで尋ねる方法、結合(ジョイン)を取り上げます。