こんにちは、キカガクでエンジニアをしている高橋です。
エンジニアではなくても SQL が使えるとビジネスに便利というのを聞いたことがあるけど、なんだか難しそうで手をつけられていない…そんな方も多いのではないでしょうか?
私は普段 SQL を書いていますが ChatGPT をはじめとした生成 AI の発展により、SQL が非常に扱いやすくなりました。また、これから SQL を学びたいという方も、ある一定 ChatGPT を SQL を書けば仕組みなどが理解しやすいようになったと感じています。
この記事では ChatGPT を活用して SQL でデータ取得する方法を紹介します!
ゼロから始めるプログラミング
スモールステップで Python を基礎から学べる、初学者の方向けの講座です。演習問題を通して Python の使い方を理解し、データ分析や機械学習実装のための基礎を身につけることを目指します。
SQL とは
SQL はデータベースを操作するための言語です。データの検索、追加、更新、削除などができますが、今回はデータの検索をメインに紹介します。
SQL についての基礎知識は以下もご覧いただくとスムーズです。
【永久保存版】手を動かしながら SQL 入門!(学習サンプル付)データ取得してみる
今回はデータベースが顧客テーブル、売上テーブルと分かれている前提で進めていきます。
例:顧客テーブル
id | name | gender | birthday |
---|---|---|---|
1 | Alice | F | 1990-01-01 |
2 | Bob | M | 1985-05-12 |
3 | Carol | F | 1992-07-23 |
例:売上テーブル
id | user_id | amount | date |
---|---|---|---|
1 | 1 | 100 | 2023-01-01 |
2 | 1 | 150 | 2023-02-01 |
3 | 2 | 200 | 2023-03-01 |
顧客情報を取得する
まずは User というテーブルから name
, gender
, birthday
を取得する SQL 文を書くようにお願いしてみましょう。理解を進めるために解説しながら進めてもらうようにします。
ChatGPT に送信
SQLを書いてください。
私はSQLが始めてなので書いてくれたものを解説しながら進めてください。
Userテーブルから
名前、性別、誕生日を取得したい。
ChatGPT からの返答
SQL の基本的な SELECT 文を使って、User テーブルから名前、性別、誕生日を取得する方法を説明します。
以下がその SQL 文です:
SELECT name, gender, birthday
FROM User;
では、文を一行ずつ解説します。
SELECT
:- これは SQL クエリの中で、取得したい列を指定する部分です。この場合、
name
、gender
、birthday
の 3 つの列を選択しています。
- これは SQL クエリの中で、取得したい列を指定する部分です。この場合、
name, gender, birthday
:- これは
SELECT
の後に続く部分で、取得したい具体的な列の名前をカンマで区切って列挙しています。これにより、ユーザーテーブルからこれらの列のデータを取得します。
- これは
FROM User
:- これはデータを取得するテーブルの名前を指定します。この場合、
User
テーブルからデータを取得しています。
- これはデータを取得するテーブルの名前を指定します。この場合、
この SQL 文を実行すると、User テーブルの中から、名前、性別、誕生日の列のデータが返されます。
例として、User テーブルのデータが以下のようになっているとします:
id | name | gender | birthday |
---|---|---|---|
1 | Alice | F | 1990-01-01 |
2 | Bob | M | 1985-05-12 |
3 | Carol | F | 1992-07-23 |
この SQL 文を実行すると、以下のような結果が返されます:
name | gender | birthday |
---|---|---|
Alice | F | 1990-01-01 |
Bob | M | 1985-05-12 |
Carol | F | 1992-07-23 |
できましたね!SELECT と FROM の意味についてもなんとなくわかったのではないでしょうか。
ただ、これだけだと活用できている気がしないと思います。次のステップに進みましょう!
売上情報とそれに紐づく顧客情報を取得する
次は売上情報を取得します。売上情報を売上テーブルから取得するだけでは、「誰が」というのがわからないので、先ほどの顧客テーブルと結合します。
ChatGPT に送信
Userに紐づいているSalesを取得したいです。それぞれをidで結合してください。
ChatGPT からの返答
Sales テーブルが User テーブルと user_id
で紐づいていると仮定して、User テーブルの情報とそれに紐づく Sales テーブルの情報を取得する SQL 文を書いてみましょう。ここでは、User テーブルの名前、性別、誕生日と、それに関連する Sales テーブルのすべての列を取得する方法を説明します。
SELECT
User.name,
User.gender,
User.birthday,
Sales.*
FROM
User
INNER JOIN
Sales
ON
User.id = Sales.user_id;
この SQL 文を一行ずつ解説します。
SELECT User.name, User.gender, User.birthday, Sales.*
:- これは SELECT の後に、取得したい列を指定します。ここでは User テーブルの
name
、gender
、birthday
列と、Sales テーブルのすべての列 (Sales.*
) を選択しています。
- これは SELECT の後に、取得したい列を指定します。ここでは User テーブルの
FROM User
:- データを取得するテーブルの名前を指定します。ここでは、User テーブルを基にしています。
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 テーブル:
id | name | gender | birthday |
---|---|---|---|
1 | Alice | F | 1990-01-01 |
2 | Bob | M | 1985-05-12 |
3 | Carol | F | 1992-07-23 |
Sales テーブル:
id | user_id | amount | date |
---|---|---|---|
1 | 1 | 100 | 2023-01-01 |
2 | 1 | 150 | 2023-02-01 |
3 | 2 | 200 | 2023-03-01 |
この SQL 文を実行すると、以下のような結果が返されます:
name | gender | birthday | id | user_id | amount | date |
---|---|---|---|---|---|---|
Alice | F | 1990-01-01 | 1 | 1 | 100 | 2023-01-01 |
Alice | F | 1990-01-01 | 2 | 1 | 150 | 2023-02-01 |
Bob | M | 1985-05-12 | 3 | 2 | 200 | 2023-03-01 |
このようにして、User テーブルと Sales テーブルを id
と user_id
で結合し、両方のテーブルの情報を取得できます。質問があればどうぞ!
かなりそれっぽくなってきましたね。JOIN を活用して売上データと顧客データを紐づけることができました。次は支払金額が一定以上のものだけ取得するようにしましょう。
条件を指定して取得する
次は条件を指定してみましょう。売上金額が一定以上の場合のみ取得するようにします。
ChatGPT に送信
では次は支払金額が130以上のものだけ取得してください。
ChatGPT からの返答
支払金額(amount)が 130 以上のものだけを取得するためには、先ほどのクエリに WHERE
句を追加します。以下の SQL 文では、User テーブルと Sales テーブルを結合し、支払金額が 130 以上のレコードだけを取得します。
SELECT
User.name,
User.gender,
User.birthday,
Sales.*
FROM
User
INNER JOIN
Sales
ON
User.id = Sales.user_id
WHERE
Sales.amount >= 130;
この SQL 文を一行ずつ解説します。
SELECT User.name, User.gender, User.birthday, Sales.*
:- 取得したい列を指定しています。ここでは、User テーブルの
name
、gender
、birthday
列と、Sales テーブルのすべての列 (Sales.*
) を選択しています。
- 取得したい列を指定しています。ここでは、User テーブルの
FROM User
:- データを取得する基となるテーブルを指定します。ここでは、User テーブルです。
INNER JOIN Sales ON User.id = Sales.user_id
:INNER JOIN
句で User テーブルと Sales テーブルを結合しています。結合条件は、User テーブルのid
列と Sales テーブルのuser_id
列が一致する行を結合しています。
WHERE Sales.amount >= 130
:WHERE
句でフィルタ条件を指定しています。ここでは、Sales テーブルのamount
列が 130 以上のレコードだけを取得しています。
例として、User テーブルと Sales テーブルが以下のようになっているとします:
User テーブル:
id | name | gender | birthday |
---|---|---|---|
1 | Alice | F | 1990-01-01 |
2 | Bob | M | 1985-05-12 |
3 | Carol | F | 1992-07-23 |
Sales テーブル:
id | user_id | amount | date |
---|---|---|---|
1 | 1 | 100 | 2023-01-01 |
2 | 1 | 150 | 2023-02-01 |
3 | 2 | 200 | 2023-03-01 |
この SQL 文を実行すると、以下のような結果が返されます:
name | gender | birthday | id | user_id | amount | date |
---|---|---|---|---|---|---|
Alice | F | 1990-01-01 | 2 | 1 | 150 | 2023-02-01 |
Bob | M | 1985-05-12 | 3 | 2 | 200 | 2023-03-01 |
このようにして、支払金額が 130 以上のレコードだけを取得できます。質問があればどうぞ!
条件指定には WHERE を使うことがわかったかと思います。これと同じ原理で年齢が何歳以上の人、といった条件でもデータを取得できますね。
このような感じで一つ一つ ChatGPT に聞くことで SQL について理解を深めながらデータを取得できます。
まとめ:ChatGPT と試行錯誤しながら SQL を習得しませんか?
ChatGPT を活用することで SQL でのデータ取得ができることを紹介しました。
ただ、この記事を読んで SQL について完全に理解できた!とはならないでしょう。ぜひ、ご自身でも ChatGPT と試行錯誤しながら SQL を実践してみてください。
それによって一つ一つ理解が進み、実践につながっていきます。もし SQL を実行できる環境があればそちらを活用いただくのがいいですね。
SQL と一緒に Python を学ぶのもおすすめです。キカガクラーニングでは Python を基礎から学べるコースがあります。ぜひこちらもご活用ください!
ゼロから始めるプログラミング
スモールステップで Python を基礎から学べる、初学者の方向けの講座です。演習問題を通して Python の使い方を理解し、データ分析や機械学習実装のための基礎を身につけることを目指します。