こんにちは!セイトです。

前回は「SQL基礎」の記事で、SQLの基本的な命令文である SELECT, WHERE, ORDER BY について解説しました。
そして、最後の「つまづきやすいポイント 」で、SQLを気軽に試す方法として、Googleスプレッドシートの QUERY(クエリ)関数を少しだけご紹介しました。

そこで今回は、「スプレッドシートでSQLを体験してみよう」というテーマで、QUERY 関数の使い方を解説していきます!

1. QUERY関数って、そもそも何?

QUERY 関数は、Googleスプレッドシートの関数の一つで、シート内のデータに対して、SQLによく似た命令文で「検索」「絞り込み」「並び替え」ができる、とても強力な機能です。

前回の記事で「SQLを試すにはデータベースの環境構築が…」と書きましたが、QUERY 関数なら、Googleアカウントさえあれば(スプレッドシートが使えれば)、今すぐSQLにそっくりな体験ができます。

※残念ながら、Excelには(2025年現在)この QUERY 関数はありませんので、Googleスプレッドシートを使って試してみてください。

2. 準備:サンプルデータを用意しよう

習うより慣れろ、です!
まずは、Googleスプレッドシートを開き、前回の記事で使った「商品(products)」テーブルとまったく同じデータを入力してみましょう。

A1セルから順に、以下のように入力してみてください。

A

B

C

D

E

1

product_id

product_name

category

price

release_date

2

1001

魔法のノート

文房具

500

2023-04-01

3

1002

走るボールペン

文房具

300

2023-09-15

4

1003

よく飛ぶスニーカー

ファッション

8000

2023-05-20

5

1004

虹色Tシャツ

ファッション

3500

2024-01-10

6

1005

はじめてのSQL

書籍

2800

2023-11-01

準備はできましたか?
QUERY 関数は、A1からE6の表とは別のセル(例えば A8 セルなど、空いている場所)に入力していきます。

スプレッドシートのサンプルデータ

3. QUERY関数の基本ルール

QUERY 関数の書き方は、このようになっています。

=QUERY(データ範囲, "クエリ(命令文)", [見出しの行数])

引数1:データ範囲
どこのデータを対象にするか。例えばA列の1行目からE列の6行目までを対象とする場合は A1:E6 です。

引数2:"クエリ(命令文)"
SQLのような命令を書く場所。必ず "" (ダブルクォート) で囲みます。

引数3:[見出しの行数] (省略可)
データの先頭から何行を見出し・ヘッダーproduct_id, product_nameなどのカラム名が書かれている箇所)として扱うかを指定します。デフォルトでは1。
殆どの場合、見出し・ヘッダーは1行目に書いてあるでしょうから、この引数は実質ほぼ省略してよいです。

4. スプレッドシートでSQLを体験しよう

それでは、前回の復習をしながら QUERY 関数を書いてみましょう!

4-1. 全データを表示させたいとき (SELECT *)

前回、全データを表示するSQLはこうでした。

SELECT * FROM products;

QUERY 関数では、FROM (どのテーブルから) の部分は、すでに関数の A1:E6 で指定しています。
そのため、命令文は SELECT から書き始めます。
空いているセルに、以下のように入力してみてください。

=QUERY(A1:E6, "SELECT *")

これを入力すると、A8セル以降に、A1:E6 のデータがまるごとコピーされたように表示されれば成功です!

4-2. 特定の列だけ見たいとき (SELECT カラム名)

ここが QUERY 関数の少し特殊なところです。
QUERY 関数では、product_name や price といった列名(見出し)ではなく、A, B, C... という「列のアルファベット」を使って指定します。

  • A列: product_id
  • B列: product_name
  • C列: category
  • D列: price
  • E列: release_date

前回、「商品名 (product_name) と価格 (price) だけ見たい」というSQLを書きました。

SELECT product_name, price FROM products;

QUERY 関数では、商品名 (B列) と価格 (D列) を指定するので、こうなります。

=QUERY(A1:E6, "SELECT B, D")

4-3. 欲しいデータだけを選ぶ (WHERE句)

絞り込みも、列のアルファベットを使って命令します。
前回、「カテゴリが『文房具』の商品だけ見たい」というSQLを書きました。

SELECT * FROM products WHERE category = '文房具';

QUERY 関数では、カテゴリ (C列) が '文房具' という条件になるので、こうなります。

=QUERY(A1:E6, "SELECT * WHERE C = '文房具'")

前回と同じように「魔法のノート」と「走るボールペン」の行だけが表示されたはずです。
(もちろん、WHERE D < 1000 のような数値の比較や、WHERE E >= '2024-01-01' のような日付の比較も、前回同様に使えます!)

4-4. データを並び替える (ORDER BY句)

並び替えも、列のアルファベットを使います。
前回、「発売日が新しい順に並び替えたい」というSQLを書きました。

SELECT * FROM products ORDER BY release_date DESC;

QUERY 関数では、発売日 (E列) を基準に DESC (降順=新しい順) と指定します。

=QUERY(A1:E6, "SELECT * ORDER BY E DESC")

5. 組み合わせてみよう (WHERE と ORDER BY)

もちろん、組み合わせも可能です!
総まとめとして「『文房具』カテゴリの商品 (C列)を、価格が高い順 (D列 DESC)**に並び替えて、商品名 (B列) と価格 (D列)だけ表示」させてみましょう。
SQLで書くとこうです。

SELECT product_name, price FROM products WHERE category = '文房具' ORDER BY price DESC;

QUERY 関数で、列アルファベット (B, C, D) に置き換えると…?

=QUERY(A1:E6, "SELECT B, D WHERE C = '文房具' ORDER BY D DESC")

これを入力して、次のように表示されれば、完璧です!
データベースを一切使わずに、SQLの基本的な命令を体験できましたね!

6.同一ファイル内の異なるシートからQuery関数を実行する

さらに、同一ファイル内の「異なるシート」にあるデータを読み込んでQUERY関数を実行する方法を解説します。
これまでデータがあるシート内でQuery関数を実行する例を紹介してきましたが、実際のところ、データがあるシート内を編集して汚してしまうのはよろしくありません。

シートを分けておくことで、元のデータを誤って編集してしまうリスクを防ぎ、分析するシートでは自由に試行錯誤ができるようになります。

6-1. 準備:2つのシートを用意しよう

まずは、スプレッドシートの「シート」を2枚に分けて、1枚目のデータを含むシートは名前を「商品マスタ」に変更します。

A

B

C

D

E

1

product_id

product_name

category

price

release_date

2

1001

魔法のノート

文房具

500

2023-04-01

3

1002

走るボールペン

文房具

300

2023-09-15

4

1003

よく飛ぶスニーカー

ファッション

8000

2023-05-20

5

1004

虹色Tシャツ

ファッション

3500

2024-01-10

6

1005

はじめてのSQL

書籍

2800

2023-11-01

次に、左下の「+」ボタンで新しいシートを追加し、名前を「分析シート」に変更します。
こちらは、QUERY関数を入力するための場所なので、空っぽのままでOKです。
これで、「データを保管する場所」と「関数を実行する場所」が分かれました。

2. 別シートのデータを読み込む書き方

では、「分析シート」にいながら、「商品マスタ」シートのデータを操作するには、どうすればいいのでしょうか?
QUERY関数の第1引数(データ範囲)の書き方を、少しだけ変える必要があります。

=QUERY('シート名'!範囲, "クエリ")

A1:E6 のように範囲だけを書くのではなく、その前に 'シート名'! ('シート名'とビックリマーク)を付けるだけです。
分析シートのA1セルに、QUERY関数を書いていきましょう。

例)

=QUERY('商品マスタ'!A1:E6, "SELECT *")

いかがでしょう。これであれば、データが含まれる元のシート「商品マスタ」を汚染することなく、Queryが実行できます!
実際、スプレッドシートを用いる業務でこうした方法はよくある運用パターンなので、ぜひ取り入れてみてください。

おわりに

今回は、Googleスプレッドシートの QUERY 関数を使って、SQLの体験学習をしてみました。
QUERY 関数の良いところは、命令文(クエリ)を書き換えるたびに、即座に結果が変わることです。 「あ、ASC にしたらどうなるかな?」「WHERE の条件を変えたら?」と、試行錯誤しながら「データベースと会話する感覚」を養うことができます。

前回学んだSQLの知識が、QUERY 関数という身近なツールで実際に動かせることが伝われば幸いです。
ぜひ、ご自身でも products テーブルのデータを増やしたり、条件を変えたりして遊んでみてください! 最後までお読みいただき、ありがとうございました。

もし、

「プログラミングを体系的に学びたい」
「エンジニア転職を頑張りたい」
「独学に限界を感じてきた...」
「コミュニティで仲間と共に学びたい」

などと感じられたら、ぜひ検討してみてください。

個別面談・説明会はこちら!


まずは様子見...という方は、公式LINEにぜひご登録下さい。
学習や転職ノウハウに関する豪華特典11個を無料配布しています!
LINE紹介ページで特典を確認する


■YouTube(SiiD受講生さま実績)

■YouTube(セイト先生メイン)

■X(旧Twitter)