SQL select文のサンプル集 結合、ソート、別テーブル生成の記述方法は?
  • facebookページ
  • twitterページ
  • 2019.10.13

    SQL select文のサンプル集 結合、ソート、別テーブル生成の記述方法は?

    SQLのselect文を使ったサンプルを集めました。

    以下、データベースとして、MySQLのサンプルデータベースEmployeesを使っています。SQL実行結果の表示にはphpMyAdminを使用しています。

    select文の基本的な使い方

    select文の基本的な構文は以下の通りです。

    例えば、以下のSQLはemployees(社員テーブル)から、hire_date(雇用日)が1990/01/01以降のレコードの全てのカラム(*)を抽出するselect文になります。

    実行結果はこうなります。

    select文のサンプルコード集

    likeであいまい検索

    where節の条件にlikeを使うと、%(パーセント)記号をワイルドカードにして、あいまい検索を行うことが可能です。

    以下のSQLは、employees(社員テーブル)から、first_name(姓名の名)がYで始まるレコードを全て(*)抽出します。

    実行結果はこうなります。

    ワイルドカード文字は「%」以外に、「_」(アンダースコア)があり、任意の1文字にマッチします。

    DBMSによっては、あいまい表現指定に正規表現が使えます。例えば、MySQLのばあいはREGEXP演算子を使って、正規表現が使用可能です。

    【関連記事】
    sql likeを使ったサンプル集 likeは本当に遅いのか?

    重複行を除いて抽出する distinct

    select文のカラム指定の前にdistinctをつけると、重複行を除外してデータを取得します。

    以下のSQLは、社員テーブル(emplyees)のfirst_name(姓名の名)を重複を除いて抽出します。

    実行結果はこうなります。

    SQL実行結果

    countと組み合わせてデータの種類(重複除外後にcount)を取得したり、group byでの置き換えも可能です。distinct使用時には、暗黙のソートが発生するので、order byと組み合わせる場合には注意しましょう。

    【関連記事】
    SQLで重複データを扱うサンプルコード集 カウント、集計、最新のみ抽出、重複禁止

    件数をカウントするcount

    select文のカラム名指定にcount()関数を使うと、取得データの件数を取得可能です。

    以下のSQLは、employees(社員テーブル)のデータ件数を取得します。

    count(カラム名)と指定した場合、対象カラム名がNULLの場合はカウントされません。

    countは集計関数と呼ばれ、group byと組み合わせて使うことで、データ種類ごとの件数を取得することも可能です。

    【関連記事】
    SQLで重複データを扱うサンプルコード集 カウント、集計、最新のみ抽出、重複禁止

    selectした取得行を別テーブルにinsertする

    既存のテーブルにselectした取得行をinsertするには以下のようにします。

    また、selectした行で新規にテーブルを作るには、以下のようにします。

    以下のSQLは、employees(社員テーブル)から、emp_no(社員番号)が20000以下、first_name(姓名の名)がAから始まる、gender(性別)が女性(F)のデータを抽出し、新たなテーブルemployees_copyを作成するSQLです。

    実行するとemployees_copyという新しいテーブルができます。employees_copyの内容は以下のようになります。

    case式を使ったselect文

    case式を組み合わせると、select文に条件分岐を組み込むことが可能です。

    以下のSQLは、departments(部署テーブル)から、dept_no(部署番号)と、日本語の部署名をcase文で判定して取得します。

    日本語の部署名は、dept_name(部署名)がProducttionなら「製造部門」、Salesなら「営業部門」、Developmentなら「開発部門」、それ以外は「それ以外」と表示します。case式で表示するカラム名をjpnameとしています。

    実行結果はこうなります。

    SQL実行結果

    【関連記事】
    SQLのCASE式サンプル集 order byやgroup byとの組み合わせもバッチリ

    複数行をjoin(結合)してselect

    複数行を結合してデータを取得するには、select文とjoinを組み合わせます。

    以下のSQLは、employees(社員テーブル)、dept_emp(社員・部署紐付けテーブル)、departments(部署テーブル)を結合して、emp_no(社員番号)、first_name(姓名の名)、last_name(姓名の姓)、dept_name(部署名)を表示します。

    実行するとこうなります。

    結合方法には、inner join、outer joinなど複数の方法があります。また、joinの記述次第でパフォーマンスが大きく変わることがあるため、注意が必要です。

    【関連記事】
    SQL Joinサンプル集 Joinで遅いSQLの原因を調べる方法

    order byで取得行をソートする

    select文にorder byを組み合わせると、取得行をソートすることができます。

    以下のSQLは、employees(社員テーブル)を、birth_date(誕生日)順にソートして取得します。

    実行結果はこうなります。

    order by desc 指定で降順、order by asc指定で昇順ソートになります。省略してorder byのみの場合は昇順ソートになります。

    order byに複数カラムを指定するには、order by カラム名1、カラム名2…と、カンマで区切って指定します。

    なお、降順、昇順の指定はカラムごとに変えられます。

    以下のSQLは、employees(社員テーブル)をbirth_date(誕生日)で昇順、hire_date(雇用日)で降順にソートして取得します。

    まとめ

    select文の基本的な使い方を紹介しました。

    ポテパンダの一言メモ
    • likeであいまい検索
    • distinctで重複除外
    • countで件数を数える
    • select内容で別テーブル作成やinsertが可能
    • case式でselect文の条件分岐を組み込める
    • joinで、複数テーブルを結合
    • order byでソート可能

    上記以外にも、サブクエリやgroup byでの小計、平均、偏差値の計算など便利な応用応用方法があります。まずは、selectの基本部分を抑えておきましょう。


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

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

    ポテパンフリーランス

    ポテパンフリーランス

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

    ポテパンキャリア

    ポテパンキャリア

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

    ポテパンキャンプ

    ポテパンキャンプ

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



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

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

    この記事をシェア

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









    ABOUT US

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

    READ MORE