ChatGPT×SQL ではじめるデータ取得入門

ChatGPT×SQLではじめる、データ取得入門

こんにちは、キカガクでエンジニアをしている高橋です。

エンジニアではなくても SQL が使えるとビジネスに便利というのを聞いたことがあるけど、なんだか難しそうで手をつけられていない…そんな方も多いのではないでしょうか?

私は普段 SQL を書いていますが ChatGPT をはじめとした生成 AI の発展により、SQL が非常に扱いやすくなりました。また、これから SQL を学びたいという方も、ある一定 ChatGPT を SQL を書けば仕組みなどが理解しやすいようになったと感じています。

この記事では ChatGPT を活用して SQL でデータ取得する方法を紹介します!

SQL とは

SQL はデータベースを操作するための言語です。データの検索、追加、更新、削除などができますが、今回はデータの検索をメインに紹介します。

SQL についての基礎知識は以下もご覧いただくとスムーズです。

SQL 入門 【永久保存版】手を動かしながら SQL 入門!(学習サンプル付)

データ取得してみる

今回はデータベースが顧客テーブル、売上テーブルと分かれている前提で進めていきます。

例:顧客テーブル

idnamegenderbirthday
1AliceF1990-01-01
2BobM1985-05-12
3CarolF1992-07-23

例:売上テーブル

iduser_idamountdate
111002023-01-01
211502023-02-01
322002023-03-01

顧客情報を取得する

まずは User というテーブルから name, gender, birthday を取得する SQL 文を書くようにお願いしてみましょう。理解を進めるために解説しながら進めてもらうようにします。

ChatGPT に送信

Prompt
SQLを書いてください。
私はSQLが始めてなので書いてくれたものを解説しながら進めてください。

Userテーブルから
名前、性別、誕生日を取得したい。

ChatGPT からの返答

SQL の基本的な SELECT 文を使って、User テーブルから名前、性別、誕生日を取得する方法を説明します。

以下がその SQL 文です:

SQL
SELECT name, gender, birthday
FROM User;

では、文を一行ずつ解説します。

  1. SELECT:
    • これは SQL クエリの中で、取得したい列を指定する部分です。この場合、namegenderbirthday の 3 つの列を選択しています。
  2. name, gender, birthday:
    • これは SELECT の後に続く部分で、取得したい具体的な列の名前をカンマで区切って列挙しています。これにより、ユーザーテーブルからこれらの列のデータを取得します。
  3. FROM User:
    • これはデータを取得するテーブルの名前を指定します。この場合、User テーブルからデータを取得しています。

この SQL 文を実行すると、User テーブルの中から、名前、性別、誕生日の列のデータが返されます。

例として、User テーブルのデータが以下のようになっているとします:

idnamegenderbirthday
1AliceF1990-01-01
2BobM1985-05-12
3CarolF1992-07-23

この SQL 文を実行すると、以下のような結果が返されます:

namegenderbirthday
AliceF1990-01-01
BobM1985-05-12
CarolF1992-07-23

できましたね!SELECT と FROM の意味についてもなんとなくわかったのではないでしょうか。

ただ、これだけだと活用できている気がしないと思います。次のステップに進みましょう!

売上情報とそれに紐づく顧客情報を取得する

次は売上情報を取得します。売上情報を売上テーブルから取得するだけでは、「誰が」というのがわからないので、先ほどの顧客テーブルと結合します。

ChatGPT に送信

Prompt
Userに紐づいているSalesを取得したいです。それぞれをidで結合してください。

ChatGPT からの返答

Sales テーブルが User テーブルと user_id で紐づいていると仮定して、User テーブルの情報とそれに紐づく Sales テーブルの情報を取得する SQL 文を書いてみましょう。ここでは、User テーブルの名前、性別、誕生日と、それに関連する Sales テーブルのすべての列を取得する方法を説明します。

SQL
SELECT
    User.name,
    User.gender,
    User.birthday,
    Sales.*
FROM
    User
INNER JOIN
    Sales
ON
    User.id = Sales.user_id;

この SQL 文を一行ずつ解説します。

  1. SELECT User.name, User.gender, User.birthday, Sales.*:
    • これは SELECT の後に、取得したい列を指定します。ここでは User テーブルの namegenderbirthday 列と、Sales テーブルのすべての列 (Sales.*) を選択しています。
  2. FROM User:
    • データを取得するテーブルの名前を指定します。ここでは、User テーブルを基にしています。
  3. INNER JOIN Sales ON User.id = Sales.user_id:
    • INNER JOIN は 2 つのテーブルを結合するための句です。この場合、User テーブルと Sales テーブルを結合しています。
    • ON User.id = Sales.user_id は、結合条件を指定します。ここでは、User テーブルの id 列と Sales テーブルの user_id 列が一致する行を結合しています。

例として、User テーブルと Sales テーブルが以下のようになっているとします:

User テーブル:

idnamegenderbirthday
1AliceF1990-01-01
2BobM1985-05-12
3CarolF1992-07-23

Sales テーブル:

iduser_idamountdate
111002023-01-01
211502023-02-01
322002023-03-01

この SQL 文を実行すると、以下のような結果が返されます:

namegenderbirthdayiduser_idamountdate
AliceF1990-01-01111002023-01-01
AliceF1990-01-01211502023-02-01
BobM1985-05-12322002023-03-01

このようにして、User テーブルと Sales テーブルを iduser_id で結合し、両方のテーブルの情報を取得できます。質問があればどうぞ!


かなりそれっぽくなってきましたね。JOIN を活用して売上データと顧客データを紐づけることができました。次は支払金額が一定以上のものだけ取得するようにしましょう。

条件を指定して取得する

次は条件を指定してみましょう。売上金額が一定以上の場合のみ取得するようにします。

ChatGPT に送信

Prompt
では次は支払金額が130以上のものだけ取得してください。

ChatGPT からの返答

支払金額(amount)が 130 以上のものだけを取得するためには、先ほどのクエリに WHERE 句を追加します。以下の SQL 文では、User テーブルと Sales テーブルを結合し、支払金額が 130 以上のレコードだけを取得します。

SQL
SELECT
    User.name,
    User.gender,
    User.birthday,
    Sales.*
FROM
    User
INNER JOIN
    Sales
ON
    User.id = Sales.user_id
WHERE
    Sales.amount >= 130;

この SQL 文を一行ずつ解説します。

  1. SELECT User.name, User.gender, User.birthday, Sales.*:
    • 取得したい列を指定しています。ここでは、User テーブルの namegenderbirthday 列と、Sales テーブルのすべての列 (Sales.*) を選択しています。
  2. FROM User:
    • データを取得する基となるテーブルを指定します。ここでは、User テーブルです。
  3. INNER JOIN Sales ON User.id = Sales.user_id:
    • INNER JOIN 句で User テーブルと Sales テーブルを結合しています。結合条件は、User テーブルの id 列と Sales テーブルの user_id 列が一致する行を結合しています。
  4. WHERE Sales.amount >= 130:
    • WHERE 句でフィルタ条件を指定しています。ここでは、Sales テーブルの amount 列が 130 以上のレコードだけを取得しています。

例として、User テーブルと Sales テーブルが以下のようになっているとします:

User テーブル:

idnamegenderbirthday
1AliceF1990-01-01
2BobM1985-05-12
3CarolF1992-07-23

Sales テーブル:

iduser_idamountdate
111002023-01-01
211502023-02-01
322002023-03-01

この SQL 文を実行すると、以下のような結果が返されます:

namegenderbirthdayiduser_idamountdate
AliceF1990-01-01211502023-02-01
BobM1985-05-12322002023-03-01

このようにして、支払金額が 130 以上のレコードだけを取得できます。質問があればどうぞ!


条件指定には WHERE を使うことがわかったかと思います。これと同じ原理で年齢が何歳以上の人、といった条件でもデータを取得できますね。

このような感じで一つ一つ ChatGPT に聞くことで SQL について理解を深めながらデータを取得できます。

まとめ:ChatGPT と試行錯誤しながら SQL を習得しませんか?

ChatGPT を活用することで SQL でのデータ取得ができることを紹介しました。

ただ、この記事を読んで SQL について完全に理解できた!とはならないでしょう。ぜひ、ご自身でも ChatGPT と試行錯誤しながら SQL を実践してみてください。

それによって一つ一つ理解が進み、実践につながっていきます。もし SQL を実行できる環境があればそちらを活用いただくのがいいですね。

SQL と一緒に Python を学ぶのもおすすめです。キカガクラーニングでは Python を基礎から学べるコースがあります。ぜひこちらもご活用ください!