【使いこなせる?】SQLのEXISTS文の使い方を初心者向けに解説
  • facebookページ
  • twitterページ
  • 2019.09.03

    【使いこなせる?】SQLのEXISTS文の使い方を初心者向けに解説

    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ステートメントを使用するシチュエーションを見ていきましょう。

    • 社員データが格納されたテーブルから「所属IDが1の社員レコード」を出力したい
    • 店舗データが格納されたテーブルから「カテゴリーが『カレー屋』の店舗レコード」を出力したい
    • 社員データが格納されたテーブルと部署データが格納されたテーブルを合わせて確認し、「社員データのIDと部署データの『社員ID』が合致し、部署IDが2の社員レコード」を出力したい

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

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

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

    SQLunionの使い方

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

    ポテパンダの一言メモ

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

    前提条件

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

    carsテーブル

    makersテーブル

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

    出力結果:

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

    ポテパンダの一言メモ

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

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

    ということになります。

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

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

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

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

    まとめ

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

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


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!フリーエンジニアになりたい方向けのコンテンツも盛りだくさんです。

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。年収800万円以上のハイスペック転職をご希望の方は「ポテパンプロフェッショナル」もご用意しておりますのでご利用下さいませ。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料25万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテクラバナー ポテプロバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE

    ポテパンおすすめ案件