簡単なクエリの書き方

公開: 2022-03-21

SQLについて聞いたことがありますか? あなたはデータ分析の文脈でそれについて聞いたことがあるかもしれませんが、それがマーケターとしてあなたに当てはまるとは思っていませんでした。 または、「これは高度なデータユーザー向けです。 そんなことはできませんでした。」

まあ、あなたはもっと間違っているはずがありません! 最も成功しているマーケターはデータ駆動型であり、データ駆動型であることの最も重要な部分の1つは、データベースからデータを迅速に収集することです。 SQLは、まさにそれを行うための最も人気のあるツールです。

会社がすでにデータをデータベースに保存している場合は、データにアクセスするためにSQLを学習する必要があります。 しかし、心配しないでください。あなたは始めるのに適切な場所にいます。 すぐに飛び込みましょう。

マーケター向けの10個のExcelテンプレートをダウンロード[無料キット]

SQLを使用する理由

SQL(多くの場合「続編」のように発音されます)はStructured Query Languageの略で、企業が操作したい大量のデータを持っている場合に使用されます。 SQLの優れている点は、リレーショナルデータベースにデータを格納している会社で働いている人なら誰でもSQLを使用できることです。 (そして、チャンスはそうです、あなたはそうします。)

たとえば、ソフトウェア会社で働いていて、顧客の使用状況データを取得したい場合は、SQLを使用してそれを行うことができます。 顧客の購入に関するデータを持っているeコマース会社のWebサイトの開発を支援している場合は、SQLを使用して、どの顧客がどの製品を購入しているかを調べることができます。 もちろん、これらは多くの可能なアプリケーションのほんの一部です。

このように考えてみてください。コンピュータがフリーズしたり、シャットダウンしたりするためだけに、Excelで非常に大きなデータセットを開いたことがありますか。 SQLを使用すると、一度にデータの特定の部分にのみアクセスできるため、すべてのデータをCSVにダウンロードして操作したり、Excelに過負荷をかけたりする必要はありません。 つまり、SQLは、Excelで行うことに慣れている可能性のあるデータ分析を処理します。

簡単なSQLクエリの書き方

始める前に、データベースからデータをプルできるデータベース管理アプリケーションがあることを確認してください。 一部のオプションには、MySQLまたはSequelProが含まれます。

これらのオプションの1つをダウンロードすることから始めて、データベースへの接続方法について会社のIT部門に相談してください。 選択するオプションは製品のバックエンドによって異なるため、製品チームに問い合わせて、正しいものを選択していることを確認してください。

データベースの階層を理解する

次に、データベースとその階層に慣れることが重要です。 データのデータベースが複数ある場合は、操作するデータの場所に焦点を当てる必要があります。

たとえば、米国の人々に関する複数のデータベースを使用しているとしましょう。 クエリ「SHOWDATABASES;」を入力します。 結果は、ニューイングランドのデータベースを含む、さまざまな場所のデータベースがいくつかあることを示している可能性があります。

データベース内には、操作するデータを含むさまざまなテーブルがあります。 上記と同じ例を使用して、データベースの1つに含まれている情報を調べたいとします。 クエリ「SHOWTABLESinNewEngland;」を使用すると、ニューイングランドの各州のテーブルがあります:people_connecticut、people_maine、people_massachusetts、people_newhampshire、people_rhodeisland、およびpeople_vermont。

最後に、テーブルにあるフィールドを見つける必要があります。 フィールドは、データベースから取得できる特定のデータです。 たとえば、誰かの住所を取得する場合、フィールド名は単に「address」ではなく、address_city、address_state、address_zipに分けることができます。 これを理解するには、クエリ「Describepeople_massachusetts;」を使用します。 これにより、SQLを使用してプルできるすべてのデータのリストが提供されます。

ニューイングランドの例を使用して、階層を簡単に確認してみましょう。

  • 私たちのデータベースはNewEnglandです。
  • そのデータベース内のテーブルは、people_connecticut、people_maine、people_massachusetts、people_newhampshire、people_rhodeisland、およびpeople_vermontです。
  • people_massachusettsテーブル内のフィールドには、address_city、address_state、address_zip、hair_color、age、first_name、およびlast_nameが含まれます。

それでは、NewEnglandデータベースからデータをプルするための簡単なSQLクエリをいくつか書いてみましょう。

基本的なSQLクエリ

SQLクエリの記述方法を学ぶために、次の例を使用してみましょう。

マサチューセッツ州で赤い髪をしていて、2003年に生まれた人はアルファベット順に整理されていますか?

選択する

SELECTは、チャートに表示するフィールドを選択します。 これは、データベースから取得する特定の情報です。 上記の例では、残りの基準に適合するを見つけたいと思います。

SQLクエリは次のとおりです。

選択する

ファーストネーム、

苗字

;

から

FROMは、データをプルするテーブルを正確に示します。 前のセクションでは、ニューイングランドの6つの州(people_connecticut、people_maine、people_massachusetts、people_newhampshire、people_rhodeisland、およびpeople_vermont)のそれぞれに6つのテーブルがあることを学びました。 特にマサチューセッツ州の人々を探しているので、その特定のテーブルからデータを取得します。

SQLクエリは次のとおりです。

選択する

ファーストネーム、

苗字

から

people_massachusetts

;

どこ

WHEREを使用すると、クエリをフィルタリングしてより具体的にすることができます。 この例では、クエリをフィルタリングして、2003年に生まれた赤毛の人だけを含めるようにします。赤毛フィルターから始めましょう。

SQLクエリは次のとおりです。

選択する

ファーストネーム、

苗字

から

people_massachusetts

どこ

hair_color =” red”

;

マサチューセッツ州のすべての人々を髪の色と一緒に見たい場合は、hair_colorを最初のSELECTステートメントの一部にすることができます。 ただし、赤毛の人だけを表示するようにフィルタリングする場合は、WHEREステートメントを使用して行うことができます。

の間に

equals(=)に加えて、BETWEENは条件付きクエリに使用できるもう1つの演算子です。 BETWEENステートメントは、指定された最小値と最大値の間にある値に当てはまります。

この場合、BETWEENを使用して、2003などの特定の年からレコードをプルできます。クエリは次のとおりです。

選択する

ファーストネーム、

苗字

から

people_massachusetts

どこ

'2003-01-01'と'2003-12-31'の間のbirth_date

;

ANDを使用すると、WHEREステートメントに基準を追加できます。 2003年に生まれた人に加えて、赤毛の人でフィルタリングしたいことを忘れないでください。WHEREステートメントは赤毛の基準で取り上げられているので、特定の出生年でフィルタリングするにはどうすればよいでしょうか。

そこで、ANDステートメントが登場します。この場合、ANDステートメントは日付プロパティですが、必ずしもそうである必要はありません。 (注:日付の形式を製品チームに確認して、正しい形式であることを確認してください。)

SQLクエリは次のとおりです。

選択する

ファーストネーム、

苗字

から

people_massachusetts

どこ

hair_color =” red”

'2003-01-01'と'2003-12-31'の間のbirth_date

;

また

ORは、WHEREステートメントと一緒に使用することもできます。 ANDを使用すると、結果に表示されるように両方の条件が真である必要があります(たとえば、髪の色は赤で、2003年に生まれる必要があります)。 ORを使用すると、結果に表示される条件がtrueである必要があります(たとえば、髪の色が赤である、2003年に生まれている必要があります)。

ORステートメントの動作は次のとおりです。

選択する

ファーストネーム、

苗字

から

people_massachusetts

どこ

hair_color='赤'

また

'2003-01-01'と'2003-12-31'の間のbirth_date

;

いいえ

NOTは、指定された条件が真でない値を表示するためにWHEREステートメントで使用されます。 マサチューセッツ州のすべての住民を赤毛なしで引き上げたい場合は、次のクエリを使用できます。

選択する

ファーストネーム、

苗字

から

people_massachusetts

どこにもない

hair_color='赤'

;

注文者

計算と編成もクエリ内で実行できます。 そこで、ORDERBY関数とGROUPBY関数が登場します。最初に、ORDER BY関数を使用したSQLクエリを確認し、次にGROUPBY関数を使用します。 次に、この2つの違いについて簡単に説明します。

ORDER BY句を使用すると、SELECTステートメントで指定した任意のフィールドで並べ替えることができます。 この場合、名前で並べ替えましょう。

SQLクエリは次のとおりです。

選択する

ファーストネーム、

苗字

から

people_massachusetts

どこ

hair_color='赤'

'2003-01-01'と'2003-12-31'の間のbirth_date

注文者

苗字

;

GROUP BY

GROUPBYはORDERBYに似ていますが、類似性のあるデータを集約します。 たとえば、データに重複がある場合は、GROUPBYを使用してフィールド内の重複の数をカウントできます。

SQLクエリは次のとおりです。

選択する

ファーストネーム、

苗字

から

people_massachusetts

どこ

hair_color='赤'

'2003-01-01'と'2003-12-31'の間のbirth_date

GROUP BY

苗字

;

VSによる注文GROUP BY

ORDERBYステートメントとGROUPBYステートメントの違いを示すために、マサチューセッツの例の外に出て、非常に単純なデータセットを見てみましょう。 以下は、4人の従業員のID番号と名前のリストです。

a table of four names and IDs as a result of sql queries

このリストでORDERBYステートメントを使用すると、従業員の名前がアルファベット順に並べ替えられます。 結果は次のようになります。

a table of four names and IDs as a result of sql queries with the name Peter appearing twice at the bottom

代わりにGROUPBYステートメントを使用する場合、従業員は最初のテーブルに表示された回数に基づいてカウントされます。 Peterは最初のテーブルに2回表示されたため、結果は次のようになります。

sql query examples: a table of three names and IDs

これまで私と一緒に? では、2003年に生まれたマサチューセッツ州の赤毛の人々について作成してきたSQLクエリに戻りましょう。

制限

データベースにあるデータの量によっては、クエリの実行に長い時間がかかる場合があります。 これは、特にクエリでエラーが発生し、続行する前に待機する必要がある場合は、イライラする可能性があります。 クエリをテストする場合は、LIMIT関数を使用して、取得する結果の数を制限できます。

たとえば、マサチューセッツ州に赤毛の人が何千人もいると思われる場合は、必要な情報を取得していることを確認するために、完全に実行する前にLIMITを使用してクエリをテストすることをお勧めします。 たとえば、結果の最初の100人だけを表示したいとします。

SQLクエリは次のとおりです。

選択する

ファーストネーム、

苗字

から

people_massachusetts

どこ

hair_color='赤'

'2003-01-01'と'2003-12-31'の間のbirth_date

注文者

苗字

制限

100

;

挿入する

リレーショナルデータベースから情報を取得するだけでなく、SQLを使用してデータベースの内容を変更することもできます。 もちろん、会社のデータを変更するには権限が必要です。 ただし、データベースのコンテンツの管理を担当している場合に備えて、知っておくべきいくつかのクエリを共有します。

1つ目はINSERTINTOステートメントです。これは、データベースに新しい値を追加するためのものです。 マサチューセッツテーブルに新しい人を追加する場合は、最初に変更するテーブルの名前と、追加するテーブル内のフィールドを指定することで追加できます。 次に、追加したいそれぞれの値でVALUEを記述します。

そのクエリは次のようになります。

挿入する

people_massachusetts(address_city、address_state、address_zip、hair_color、age、first_name、last_name)

(ケンブリッジ、マサチューセッツ、02139、ブロンド、32、ジェーン、ドー)

;

または、テーブル内のすべてのフィールドに値を追加する場合は、フィールドを指定する必要はありません。 値は、クエリにリストされている順序で列に追加されます。

挿入する

people_massachusetts

(ケンブリッジ、マサチューセッツ、02139、ブロンド、32、ジェーン、ドー)

;

特定のフィールドにのみ値を追加する場合は、これらのフィールドを指定する必要があります。 first_name、last_name、address_stateのレコードのみを挿入したいとします—次のクエリを使用できます。

挿入する

people_massachusetts(first_name、last_name、address_state)

(ジェーン、ドー、マサチューセッツ)

;

アップデート

データベース内の既存の値を別の値に置き換える場合は、UPDATEを使用できます。 たとえば、誰かが実際に茶色の髪をしているのに赤い髪をしているとデータベースに記録されている場合はどうなりますか? このレコードは、UPDATEおよびWHEREステートメントで更新できます。

アップデート

people_massachusetts

設定

hair_color='茶色'

どこ

first_name='ジェーン'

last_name ='Doe'

;

または、「address_state」の一部の値が「Massachusetts」として表示され、他の値が「MA」として表示されるという問題がテーブルにあるとします。 「MA」のすべてのインスタンスを「マサチューセッツ」に変更するには、単純なクエリを使用して、一度に複数のレコードを更新できます。

アップデート

people_massachusetts

設定

address_state='マサチューセッツ'

どこ

address_state = MA

;

UPDATEを使用するときは注意してください。 WHEREステートメントで変更するレコードを指定しない場合は、テーブル内のすべての値を変更します。

消去

DELETEは、テーブルからレコードを削除します。 UPDATEの場合と同様に、テーブル全体を誤って削除しないように、必ずWHEREステートメントを含めてください。

または、実際にメイン州に住んでいたpeople_massachusettsテーブルで複数のレコードが見つかった場合は、次のように、address_stateフィールドをターゲットにすることでこれらのエントリをすばやく削除できます。

削除元

people_massachusetts

どこ

address_state='メイン'

;

ボーナス:高度なSQLのヒント

簡単なSQLクエリを作成する方法を学習したので、アスタリスクから始めて、クエリをワンランク上に上げるために使用できる他のいくつかのトリックについて説明しましょう。

*(アスタリスク)

SQLクエリにアスタリスク文字を追加すると、結果にデータのすべての列を含めることをクエリに通知します。

これまで使用してきたマサチューセッツの例では、first_nameとlast_nameの2つの列名しかありませんでした。 しかし、結果に表示したい15列のデータがあるとしましょう。SELECTステートメントに15列の名前すべてを入力するのは面倒です。 代わりに、これらの列の名前をアスタリスクに置き換えると、クエリはすべての列を結果にプルすることを認識します。

SQLクエリは次のようになります。

選択する

*

から

people_massachusetts

どこ

hair_color =” red”

'2003-01-01'と'2003-12-31'の間のbirth_date

注文者

苗字

制限

100

;

%(パーセント記号)

パーセント記号はワイルドカード文字です。つまり、データベース値の1つ以上の文字を表すことができます。 ワイルドカード文字は、共通の文字を共有するレコードを見つけるのに役立ちます。 これらは通常、データ内のパターンを見つけるためにLIKE演算子とともに使用されます。

たとえば、郵便番号が「02」で始まるテーブル内のすべての人の名前を取得したい場合は、次のクエリを記述できます。

選択する

ファーストネーム、

苗字

どこ

address_zip LIKE '02%'

;

ここで、「%」は「02」に続く数字のグループを表すため、このクエリは、「02」で始まるaddress_zipの値を持つすべてのレコードを検索します。

過去30日間

SQLを定期的に使用し始めると、私の頼りになるクエリの1つに、過去30日以内にアクションを実行したか特定の基準を満たした人を見つけようとすることが含まれていることがわかりました。

今日が2021年12月1日であるとしましょう。これらのパラメーターは、birth_dateを2021年11月1日から2021年11月30日までの間に作成することで作成できます。SQLクエリは次のようになります。

選択する

ファーストネーム、

苗字

から

people_massachusetts

どこ

hair_color =” red”

'2021-11-01'と'2021-11-30'の間のbirth_date

注文者

苗字

制限

100

;

ただし、これには過去30日間をカバーする日付を検討する必要があり、このクエリを常に更新する必要があります。

代わりに、日付がどの日であっても、日付が過去30日間に自動的に及ぶようにするには、次のように入力します。birth_date> =(DATE_SUB(CURDATE()、INTERVAL 30))

(注:この構文は、SQLクエリのプルに使用するソフトウェアによって異なる場合があるため、製品チームに再確認することをお勧めします。)

したがって、完全なSQLクエリは次のようになります。

選択する

ファーストネーム、

苗字

から

people_massachusetts

どこ

hair_color =” red”

birth_date> =(DATE_SUB(CURDATE()、INTERVAL 30))

注文者

苗字

制限

100

;

カウント

場合によっては、フィールドの基準が表示される回数をカウントしたいことがあります。 たとえば、マサチューセッツ州から集計している人々のさまざまな髪の色が表示される回数を数えたいとします。 この場合、COUNTが便利なので、髪の色が異なる人の数を手動で合計したり、その情報をExcelにエクスポートしたりする必要はありません。

そのSQLクエリは次のようになります。

選択する

髪の色、

COUNT(hair_color)

から

people_massachusetts

'2003-01-01'と'2003-12-31'の間のbirth_date

GROUP BY

髪の色

;

AVG

AVGは、NULL値(空)を除いて、クエリの結果の属性の平均を計算します。 この例では、AVGを使用して、クエリでマサチューセッツ州の居住者の平均年齢を計算できます。

SQLクエリは次のようになります。

選択する

AVG(年齢)

から

people_massachusetts

;

SUMは、SQLで実行できるもう1つの簡単な計算です。 クエリからすべての属性の合計値を計算します。 したがって、マサチューセッツ州の住民のすべての年齢を合計したい場合は、次のクエリを使用できます。

選択する

SUM(年齢)

から

people_massachusetts

;

最小および最大

MINとMAXは、特定のフィールドの最小値と最大値を提供する2つのSQL関数です。 これを使用して、マサチューセッツテーブルの最も古いメンバーと最も若いメンバーを識別できます。

このクエリは、最も古いレコードを提供します。

選択する

MIN(年齢)

から

people_massachusetts

;

そして、このクエリは私たちに最も古いものを与えます:

選択する

MAX(年齢)

から

people_massachusetts

;

加入

1つのSQLクエリで2つの異なるテーブルの情報にアクセスする必要がある場合があります。 SQLでは、JOIN句を使用してこれを行うことができます。

(Excelの数式に精通している場合、これは、Excelで2つの異なるシートの情報を組み合わせる必要がある場合にVLOOKUP数式を使用するのと似ています。)

マサチューセッツ州のすべての居住者のユーザーIDとその生年月日のデータを含む1つのテーブルがあるとします。 さらに、マサチューセッツ州のすべての居住者のユーザーIDと髪の色を含む完全に別のテーブルがあります。

2003年に生まれたマサチューセッツ州の住民の髪の色を知りたい場合は、両方のテーブルの情報にアクセスして、それらを組み合わせる必要があります。 これは、両方のテーブルが一致する列(ユーザーID)を共有しているために機能します。

2つの異なるテーブルからフィールドを呼び出すため、SELECTステートメントもわずかに変更されます。 結果に含めるフィールドをリストするだけでなく、それらがどのテーブルからのものであるかを指定する必要があります。 (注:ここではアスタリスク関数が役立つ場合があるため、クエリには両方のテーブルが結果に含まれます。)

特定のテーブルからフィールドを指定するには、テーブルの名前とフィールドの名前を組み合わせるだけです。 たとえば、SELECTステートメントは「table.field」と言います—テーブル名とフィールド名をピリオドで区切ります。

この場合、いくつかのことも想定しています。

  1. マサチューセッツ州の誕生日テーブルには、first_name、last_name、user_id、birthdateのフィールドが含まれています。
  2. マサチューセッツのヘアカラーテーブルには、user_id、hair_colorのフィールドが含まれています。

したがって、SQLクエリは次のようになります。

選択する

birthdate_massachusetts.first_name、

birthdate_massachusetts.last_name

から

birthdate_massachusetts JOIN haircolor_massachusetts USING(user_id)

どこ

hair_color =” red”

'2003-01-01'と'2003-12-31'の間のbirth_date

注文者

苗字

;

このクエリは、birthdate_massachusettsテーブルとhaircolor_massachusettsテーブルの両方に表示されるフィールド「user_id」を使用して2つのテーブルを結合します。 その後、2003年に生まれた赤い髪の人々のテーブルを見ることができます。

場合

満たされている条件に基づいてクエリに異なる結果を返す場合は、CASEステートメントを使用します。 条件は順番に評価されます。 条件が満たされると、対応する結果が返され、以降のすべての条件がスキップされます。

条件が満たされない場合に備えて、最後にELSE条件を含めることができます。 ELSEがない場合、条件が満たされない場合、クエリはNULLを返します。

CASEを使用して、クエリに基づいて文字列を返す例を次に示します。

選択する

ファーストネーム、

苗字

から

people_massachusetts

場合

WHEN hair_color ='brown'THEN'この人は茶色の髪をしています。

WHEN hair_color ='blonde'THEN'この人はブロンドの髪をしています。

WHEN hair_color ='red'THEN'この人は赤い髪をしています。

ELSE「髪の色は不明です。」

終わり

;

マーケターが知っておくべき基本的なSQLクエリ

おめでとう。 独自のSQLクエリを実行する準備が整いました。 SQLでできることは他にもたくさんありますが、この基本の概要がお役に立てば幸いです。 基本の強力な基盤により、SQLをより適切にナビゲートし、より複雑な例のいくつかに取り組むことができます。

編集者注:この投稿は元々3月25日に公開され、包括的に更新されました。

優れたマーケティングテンプレート