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 テーブルのデータを増やしたり、条件を変えたりして遊んでみてください! 最後までお読みいただき、ありがとうございました。
QUERY関数で感覚をつかんだ次は、実際のデータベースに接続してSQLを書く段階になります。そこから先の開発スキルまで通しで学べる場として、私が運営するSiiDの概要をまとめました。
AIプログラミングスクール「SiiD」について
AIプログラミングスクール「SiiD」は、未経験からITエンジニア転職を目指す方向けのオンラインスクールです。
SiiDの特徴
- 現役エンジニアでYouTube登録者約13万人の「セイト先生」が代表兼主任講師
- 採用側の実務知見(2,000人以上の選考・150名以上のエンジニア採用)にもとづく指導
- 生成AIを取り入れた学習設計と、実務レベルのフルスタックWeb開発スキル
- Workship CAREER(株式会社GIG)と連携した無料の転職伴走支援
- 経済産業省認定のReスキル講座で、給付金の条件を満たせば実質105,600円〜
- 学割あり(35%オフ)
こんな方におすすめ
- 未経験・文系・社会人からITエンジニア転職を本気で目指したい方
- 独学に限界を感じている方
- 費用を抑えながら実務スキルと転職サポートを両立したい方
「未経験だから」とあきらめる必要はありません。採用する側を知り尽くしたプロが、給付金で負担を抑えながら内定まで伴走します。