Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのEXISTS文は、CREATE・DELETE・UPDATE・SELECTなどのSQL文と比較して、なかなか「理解して使いこなしている」という方が少ないのではないでしょうか。

読者のみなさんの中には、「EXISTSステートメントのことを初めて耳にした」という人もいるかもしれません。CREATE・DELETE・UPDATE・SELECTなど主だったSQLステートメントをしっかりと駆使できているのであれば、EXISTSステートメントを使用しなくてもやりくりできることが多いため、見落としがちになることも仕方がありません。

このような状況からEXISTSステートメントを使用していないという方が多いのですが、使い方に慣れると意外にも簡単なステートメントなのです。

今回の記事ではSQL EXISTSステートメントの使い方を初心者の方でも理解できるように解説していきます。SQL文の中でも意外と知られていないEXISTSステートメントを駆使して、WEBアプリケーションを思ったように開発できるようにしていきましょう。

本記事の要点
  • SQLにおける「EXISTS」の概要
  • SQL EXISTS文の使い方

SQLのステートメント「EXISTS」とは何か

SQLのステートメント「EXISTS」とは、指定した条件のレコードが存在するかどうかをテストするためのサブクエリを指定できるステートメントのことです。

普段、データベーステーブルのカラムから、複雑な条件付きでレコードを取り出そうとする際には、それぞれの条件に合わせて複数回selectステートメントを行なっているのではないでしょうか。しかし、膨大なテーブルデータを出力する際には条件付きのselectステートメントを使用したいもの。

条件付きの出力を行う際には、INNER JOINなどのステートメントを使用することもできますが、中でもEXISTSは比較的簡単に、条件付きのselectステートメントを記述できる手段なのです。

ポテパンダの一言メモ

ちなみに「サブクエリ」というのは、クエリ(問い合わせ)内にネスト(入れ子)されたもう1つのクエリのことです。IT用語として広く知られており、select文を使用する際に頻繁に用いられます。日本語では「副問い合わせ」と呼ばれており、メインの「クエリ」よりもサブ的な扱いをされていることが名前からも分かりますね。

上記の説明で「条件付きの出力」という言葉を使いましたが、膨大なテーブルデータ野中から指定した条件の出力を行うためには、この「サブクエリ」が有効です。

例えば100,000件の車に関するレコードが格納されているテーブルデータから「赤い色の車だけ出力して」と条件をつけることができるのが、「サブクエリ」のメリットでしょう。

上記でも書きましたが、もう少しSQLのEXISTSステートメントを使用するシチュエーションを見ていきましょう。

このように「条件付きでテーブルデータを格納したい」という際にEXISTSを使用することができます。他にも手段がありますが、すでに述べた通りEXISTSは複雑な条件のクエリであっても簡潔に記述することができることが魅力だと言えるでしょう。

もしかするとEXISTSという英単語自体がそこまで一般的なものではないため、EXISTSステートメントの働きが想像しづらいかもしれません。「EXISTS」という英単語には「存在する」という意味があるため「テーブルデータから指定した条件のレコードが『存在するかどうか』を確認する」という働きをイメージしておくと、EXISTSを用いて書かれたクエリの働きを理解することがより簡単になるはずです。

【関連記事】
▶︎SQL if文のサンプルコード集 NULL判定や、Switch文のような分岐をする方法
▶︎sqlコードの意味がわからない…不思議なSQLコードサンプル集

SQLunionの使い方

ここまでSQLのEXISTSステートメントの概要について説明をしました。それではここからSQLのEXISTSステートメントを使用する方法について具体的なコードを用いて解説していきましょう。

ポテパンダの一言メモ

本記事では、SQLのEXISTSステートメントを使用する環境としてMySQLというデータベース管理システムを使用します。MySQLに関する説明は割愛しますが、まだ使用したことがないという方はこれを機に導入してみてください。

前提条件

以下のようなデータが格納されているテーブルが2つあるという前提で、EXISTSステートメントの使い方をご説明していきます。

carsテーブル

+------+--------------------+
| id   | name          |
+------+--------------------+
|    1 |ヴェルファイア         |
|    2 | エスクァイア         |
|    3 | ステップワゴン       |
|    4 | セレナ              |
+------+--------------------+

makersテーブル

+------+--------------------+
| id   | maker          |
+------+--------------------+
|    1 |トヨタ                |
|    2 | トヨタ               |
|    3 | ホンダ               |
|    4 | 日産                 |
+------+--------------------+

2つのテーブルを確認して指定した条件に合致したレコードを取得する

SELECT * FROM cars WHERE EXISTS (
    SELECT * FROM makers
      WHERE users.id = makers.id AND makers.maker = "トヨタ"
  );

出力結果:

+------+--------------------+
| id   | name          |
+------+--------------------+
|    1 |ヴェルファイア        |
|    2 | エスクァイア         |
+------+--------------------+

SQL EXISTSステートメントの基礎的な使用方法の1つは2つのテーブルを確認して指定した条件に合致したレコードを取得するということです。上記のようなEXISTSステートメントをSQL文で宣言することによって複雑な条件付きの処理であっても簡単に記述することができるようになっています。

ポテパンダの一言メモ

EXISTSを使用した先ほどのSQL文を日本語に直してみると…

「carsテーブルとmakersテーブルのidが合致し、makerカラムが『トヨタ』のcarsテーブルレコードを出力してください」

ということになります。

またEXISTSの後に出てくる条件の部分で「cars.id」や「makers.maker」といった記述の仕方が登場しました。これには「carsテーブルのidカラム」「markersテーブルのmakerカラム」といった意味があります。

また、もう1点上記のコードには重要なポイントがあります。それは以下のコードです。

SELECT * FROM makers WHERE users.id = makers.id

もしこのコードが無ければ、以下のような出力結果となってしまいます。

+------+--------------------+
| id   | maker       |
+------+--------------------+
|    1 |トヨタ                |
|    2 | トヨタ               |
|    3 | ホンダ               |
|    4 | 日産                  |
+------+--------------------+

EXISTSステートメントは本来「trueかfalse(存在するかしないか)」を返すためのものなので、上記のように「idが合致するかどうか」という条件を付け加えなければ出力結果を絞ることはできません。もし出力結果を絞りたいのであれば、忘れず設定をしましょう。

まとめ

今回の記事ではSQL EXISTSステートメントの使い方を初心者の方でも理解できるように解説していきました。SQL文の中でも意外と知られていないEXISTSステートメントを駆使して、WEBアプリケーションを思ったように開発できるようにしていきましょう。

【関連記事】
▶︎【意外と知らない?】SQL unionの使い方をわかりやすく説明
▶︎SQLのgroup byサンプルコード集 count、like、join等の組み合わせ例
▶︎【こんな使い方も?】SQL insertの使用方法を徹底的に解説
▶︎【初心者向け】SQLのDELETE文の使い方を現役SE目線で解説

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。