.png%3Fw%3D1110&w=3840&q=75)
こんにちは、キカガクでエンジニアをしている高橋です。
エンジニアではなくても SQL が使えるとビジネスに便利というのを聞いたことがあるけど、なんだか難しそうで手をつけられていない…そんな方も多いのではないでしょうか?
私は普段 SQL を書いていますが ChatGPT をはじめとした生成 AI の発展により、SQL が非常に扱いやすくなりました。また、これから SQL を学びたいという方も、ある一定 ChatGPT を SQL を書けば仕組みなどが理解しやすいようになったと感じています。
この記事では ChatGPT を活用して 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 | 2 | 150 | 2023-02-01 |
3 | 3 | 200 | 2023-03-01 |
まずは User というテーブルから name, gender, birthday を取得する SQL 文を書くようにお願いしてみましょう。理解を進めるために解説しながら進めてもらうようにします。
SQLを書いてください。 私はSQLが始めてなので書いてくれたものを解説しながら進めてください。 Userテーブルから 名前、性別、誕生日を取得したい。
SQL の基本的な SELECT 文を使って、User テーブルから名前、性別、誕生日を取得する方法を説明します。
以下がその SQL 文です:
SELECT name, gender, birthday FROM User;
では、文を一行ずつ解説します。
これは SQL クエリの中で、取得したい列を指定する部分です。この場合、name、gender、birthday の 3 つの列を選択しています。
これは SELECT の後に続く部分で、取得したい具体的な列の名前をカンマで区切って列挙しています。これにより、ユーザーテーブルからこれらの列のデータを取得します。
これはデータを取得するテーブルの名前を指定します。この場合、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 の意味についてもなんとなくわかったのではないでしょうか。
ただ、これだけだと活用できている気がしないと思います。次のステップに進みましょう!
次は売上情報を取得します。売上情報を売上テーブルから取得するだけでは、「誰が」というのがわからないので、先ほどの顧客テーブルと結合します。
Userに紐づいているSalesを取得したいです。それぞれをidで結合してください。
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、gender、birthday 列と、Sales テーブルのすべての列 (Sales.*) を選択しています。
データを取得するテーブルの名前を指定します。ここでは、User テーブルを基にしています。
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 | 1 | 1 | 150 | 2023-02-01 |
Bob | M | 1985-05-12 | 3 | 2 | 200 | 2023-03-01 |
このようにして、User テーブルと Sales テーブルを id と user_id で結合し、両方のテーブルの情報を取得できます。
かなりそれっぽくなってきましたね。JOIN を活用して売上データと顧客データを紐づけることができました。次は支払金額が一定以上のものだけ取得するようにしましょう。
次は条件を指定してみましょう。売上金額が一定以上の場合のみ取得するようにします。
では次は支払金額が130以上のものだけ取得してください。
支払金額(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;
SELECT User.name, User.gender, User.birthday, Sales.*:
取得したい列を指定しています。ここでは、User テーブルの name、gender、birthday 列と、Sales テーブルのすべての列 (Sales.*) を選択しています。
データを取得する基となるテーブルを指定します。ここでは、User テーブルです。
INNER JOIN 句で User テーブルと Sales テーブルを結合しています。結合条件は、User テーブルの id 列と Sales テーブルの user_id 列が一致する行を結合しています。
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 でのデータ取得ができることを紹介しました。
ただ、この記事を読んで SQL について完全に理解できた!とはならないでしょう。ぜひ、ご自身でも ChatGPT と試行錯誤しながら SQL を実践してみてください。
それによって一つ一つ理解が進み、実践につながっていきます。もし SQL を実行できる環境があればそちらを活用いただくのがいいですね。
SQL と一緒に Python を学ぶのもおすすめです。キカガクラーニングでは Python を基礎から学べるコースがあります。ぜひこちらもご活用ください!
SHARE
AI/データサイエンス学びはじめの方におすすめの記事
コース一覧
注目記事
新着記事