- 更新日 : 2026年4月28日
スプレッドシートでSQLを活用するには?QUERY関数からデータベース連携まで実践的な活用方法
GoogleスプレッドシートでSQL(Structured Query Language)を活用することで、大量なデータの分析や外部データベースとの連携が可能になります。QUERY関数によるSQL風の構文での操作から、Google Apps Script(GAS)を使った本格的なデータベース接続、BigQueryとの統合まで、様々なレベルでSQLを活用できます。
本記事では、スプレッドシートでSQLを作成・実行する方法から、実務での活用シーン、パフォーマンス最適化のテクニックまで、データ分析を効率化する実践的なノウハウを詳しく解説します。
目次
スプレッドシートでSQLは使えるの?
Googleスプレッドシートでは、QUERY関数を使ってSQL風の構文でデータ操作が可能で、さらにGoogle Apps Scriptを通じて外部データベースとSQL接続もできます。これにより、表計算ソフトの枠を超えた高度なデータ分析が実現します。
スプレッドシートにおけるSQL活用は、主に3つのレベルで実装できます。第1レベルは、QUERY関数による疑似SQL構文での操作です。SELECT、WHERE、GROUP BY、ORDER BYといった基本的なSQL句が使用でき、スプレッドシート内のデータを柔軟に抽出・集計できます。
第2レベルでは、Google Apps Script(GAS)のJDBCサービスを使えば、MySQLやPostgreSQLなどの主要データベースにSQLクエリを送信できます。ただし、Microsoft SQL Serverなど一部のデータベースではVPN接続など追加設定が必要です。
第3レベルは、BigQueryやGoogle Cloud SQLとの連携です。Google Cloudのデータ分析基盤と統合することで、ビッグデータ規模の分析をスプレッドシートから実行できます。
多くのユーザーが「グーグルスプレッドシート SQL」で検索する背景には、Excelのパワークエリに相当する機能や、データベースとの連携方法を探しているニーズがあります。スプレッドシートは、これらのニーズに対して複数のアプローチを提供しています。
QUERY関数でSQL風の構文を使う基本的な方法は?
QUERY関数は、SQLの一部構文を使ってスプレッドシート内のデータを抽出・集計できる関数です。
参考:QUERY – Google ドキュメント エディタ ヘルプ
QUERY関数の基本構文
基本的な書式:
=QUERY(データ範囲, “クエリ文字列”, [ヘッダー行数])
シンプルな例:
=QUERY(A1:D100, “SELECT A, B, C WHERE D > 100”)
この例では、A〜C列のデータを、D列が100より大きい行のみ抽出します。
SELECT句での列選択
様々な選択パターン:
// 全列選択
=QUERY(A:E, “SELECT *”)
// 特定列のみ選択
=QUERY(A:E, “SELECT A, C, E”)
// 計算列の追加
=QUERY(A:E, “SELECT A, B, B*C”)
WHERE句での条件指定
条件フィルタリングの例:
| 条件タイプ | クエリ例 | 説明 |
|---|---|---|
| 数値比較 | WHERE B > 1000 | B列が1000より大きい |
| 文字列一致 | WHERE A = ‘営業部’ | A列が営業部と完全一致 |
| 部分一致 | WHERE A CONTAINS ‘東京’ | A列に東京を含む |
| 複数条件 | WHERE B > 100 AND C < 50 | AND条件 |
| OR条件 | WHERE A = ‘東京’ OR A = ‘大阪’ | いずれかに一致 |
実用例:売上データの分析
月次売上の集計クエリ:
=QUERY(売上データ!A:E,
“SELECT A, SUM(D)
WHERE C = ‘2025年’
GROUP BY A
ORDER BY SUM(D) DESC
LABEL SUM(D) ‘売上合計'”)
このクエリは、2025年のデータを部署別に集計し、売上順に並べ替えます。
GROUP BYとAGGREGATE関数で集計処理を行うには?
QUERY関数のGROUP BY句と集計関数を組み合わせることで、複雑な集計処理をSQL風に実行できます。ピボットテーブルに頼らない柔軟な集計が可能になります。
利用可能な集計関数
QUERY関数で使える集計関数:
| 関数 | 用途 | 使用例 |
|---|---|---|
| SUM() | 合計 | SUM(B) |
| AVG() | 平均 | AVG(C) |
| COUNT() | カウント | COUNT(A) |
| MAX() | 最大値 | MAX(D) |
| MIN() | 最小値 | MIN(E) |
複数項目でのグループ化
部署×月別の集計例:
=QUERY(A:E,
“SELECT A, B, SUM(C), AVG(D)
WHERE E IS NOT NULL
GROUP BY A, B
ORDER BY A, B”)
A列に部署名、B列に月、C列・D列に数値を入れて、E列には完了時のチェックなどを入れると、C列の合計とD列の平均を部署→月の順に表示できます。
PIVOT句でクロス集計
ピボット形式での出力:
=QUERY(A:D,
“SELECT A, SUM(C)
WHERE B = 2025
GROUP BY A
PIVOT D”)
この例では、A列を行、D列を列として、C列の合計をクロス集計します。
条件付き集計の実装
CASE文の代替手法:
=QUERY(A:C,
“SELECT A,
SUM(B) AS ‘売上合計’,
COUNT(B) AS ‘件数’,
SUM(B)/COUNT(B) AS ‘平均単価’
WHERE C >= DATE ‘2025-01-01’
GROUP BY A”)
Google Apps ScriptでデータベースとSQL接続する方法は?
Google Apps Script(GAS)のJDBCサービスを使用すると、外部データベースに直接SQLクエリを送信し、結果をスプレッドシートに取り込めます。本格的なデータベース連携が実現します。
STEP1:データベース接続の設定
基本的な接続コード:
function connectToDatabase() {
// 接続情報の設定
const server = ‘your-server.com’;
const dbName = ‘your_database’;
const username = ‘your_username’;
const password = ‘your_password’;
const port = 3306;
// MySQL接続URLの構築
const url = `jdbc:mysql://${server}:${port}/${dbName}`;
// 接続の確立
const conn = Jdbc.getConnection(url, username, password);
return conn;}
STEP2:SQLクエリの実行
データ取得の実装:
function executeQuery() {
const conn = connectToDatabase();
const stmt = conn.createStatement();
// SQLクエリの実行
const query = `
SELECT
customer_name,
order_date,
total_amount
FROM orders
WHERE order_date >= ‘2025-01-01’
ORDER BY total_amount DESC
LIMIT 100`;
const rs = stmt.executeQuery(query);
// 結果の処理
const data = [];
while (rs.next()) {
data.push([
rs.getString(1),
rs.getDate(2),
rs.getDouble(3)
]);}
rs.close();
stmt.close();
conn.close();
return data;}
STEP3:スプレッドシートへの書き込み
取得データの出力:
function importDataToSheet() {
const sheet = SpreadsheetApp.getActiveSheet();
const data = executeQuery();
// ヘッダー行の設定
const headers = [‘顧客名’, ‘注文日’, ‘合計金額’];
sheet.getRange(1, 1, 1, headers.length).setValues([headers]);
// データの書き込み
if (data.length > 0) {
sheet.getRange(2, 1, data.length, data[0].length).setValues(data);}
// 書式設定
sheet.getRange(‘B:B’).setNumberFormat(‘yyyy-mm-dd’);
sheet.getRange(‘C:C’).setNumberFormat(‘¥#,##0’);
対応データベース一覧
- MySQL
- PostgreSQL
- Microsoft SQL Server
- Oracle Database(制限あり)
- Google Cloud SQL
BigQueryとスプレッドシートを連携してSQLを実行するには?
BigQueryとスプレッドシートを連携することで、ペタバイト規模のデータに対してSQLクエリを実行し、結果を直接取り込めます。ビッグデータ分析がスプレッドシートから可能になります。
Connected Sheetsの活用
- スプレッドシートのメニューから「データ」→「データコネクタ」
- 「BigQueryに接続」を選択
- プロジェクトとデータセットを選択
- SQLクエリを記述または、UIで条件設定
カスタムSQLクエリの実行
高度な分析クエリの例:
SELECT
DATE_TRUNC(order_date, MONTH) as month,
product_category,
SUM(revenue) as total_revenue,
COUNT(DISTINCT customer_id) as unique_customers,
AVG(order_value) as avg_order_value
FROM `project.dataset.sales_data`
WHERE order_date >= ‘2025-01-01’
GROUP BY month, product_category
ORDER BY month DESC, total_revenue DESC
スケジュール実行の設定
- 更新頻度:毎日、毎週、毎月
- 実行時刻の指定
- エラー通知の設定
SQLクエリ結果を活用した高度な分析テクニックは?
取得したSQLクエリ結果を、スプレッドシートの機能と組み合わせることで、より高度な分析やビジュアライゼーションが実現できます。実践的な活用方法を紹介します。
動的ダッシュボードの作成
リアルタイムダッシュボードの構築:
function createDashboard() {
const sheet = SpreadsheetApp.getActiveSheet();
// SQLでデータ取得
const salesData = executeQuery();
//書き込むデータ範囲の取得
const dataRange = sheet.getRange(1, 1, salesData.length, salesData[0].length);
dataRange.setValues(salesData);
// ピボットテーブルの作成
const pivotTableRange = sheet.getRange(“G1”);
const pivotTable = pivotTableRange.createPivotTable(dataRange);
pivotTable.addRowGroup(1) // カテゴリ別
pivotTable.addColumnGroup(2) // 月別
pivotTable.addValue(3, SpreadsheetApp.PivotTableSummarizeFunction.SUM)}
条件付き書式での可視化
- 売上TOP10をハイライト
- 前月比マイナスを赤表示
- 達成率によるグラデーション
ARRAYFORMULA関数との組み合わせ
SQLデータの拡張処理:
=ARRAYFORMULA(
IF(QUERY_RESULT > 10000,
“優良顧客”,
“一般顧客”))
パフォーマンス最適化のベストプラクティスは?
大量のデータをSQLで扱う際は、クエリの最適化とキャッシュ戦略が重要です。実行速度を改善するテクニックを解説します。
クエリ最適化のポイント
効率的なクエリ作成:
| 最適化項目 | 悪い例 | 良い例 |
|---|---|---|
| 列の選択 | SELECT * | SELECT 必要な列のみ |
| 条件指定 | WHERE後で絞込み | WHERE句を具体的に |
| 結合順序 | 大きいテーブルから | 小さいテーブルから |
| 集計 | 全データ取得後に集計 | GROUP BYで事前集計 |
キャッシュ戦略
データ更新頻度に応じた設計:
function getCachedData() {
const cache = CacheService.getScriptCache();
let data = cache.get(‘sql_data’);
if (!data) {
// キャッシュがない場合はSQL実行
data = executeQuery();
// 1時間キャッシュ
cache.put(‘sql_data’, JSON.stringify(data), 3600);
} else {
data = JSON.parse(data);}
return data;}
バッチ処理の実装
大量データの分割処理:
function batchProcess() {
const batchSize = 1000;
let offset = 0;
while (true) {
const query = `
SELECT * FROM large_table
LIMIT ${batchSize}
OFFSET ${offset}`;
const result = executeQuery(query);
if (result.length === 0) break;
processData(result);
offset += batchSize;
// 処理間隔を設ける
Utilities.sleep(1000);}}
セキュリティとエラーハンドリングの実装方法
SQLインジェクション対策やエラー処理は、安全なシステム運用に不可欠です。パラメータ化クエリの使用、入力値の検証、適切なエラーハンドリングにより、セキュアなデータベース連携を実現します。
パラメータ化クエリの実装例:
function safeQuery(customerId) {
const conn = connectToDatabase();
const stmt = conn.prepareStatement(
‘SELECT * FROM customers WHERE id = ?’);
stmt.setInt(1, customerId);
const rs = stmt.executeQuery();
// 結果処理}
また、接続情報は環境変数やプロパティサービスで管理し、コードに直接記述しないことが重要です。定期的な権限レビューとアクセスログの監視も実施しましょう。
スプレッドシートでSQLを活用して高度なデータ分析
Googleスプレッドシートでは、QUERY関数を使ったSQLのような簡易的な分析から、Google Apps Scriptを使った外部データベース接続、BigQueryとの連携まで、さまざまなレベルでSQLを活用できます。
QUERY関数は手軽に集計や抽出を行える一方、GASやBigQueryを使えば業務データベースや大規模データをリアルタイムで分析できます。さらにキャッシュやバッチ処理を活用すれば、パフォーマンスも最適化可能です。
SQLの知識を活かして、スプレッドシートをデータ分析のツールとして活用しましょう。
システム乱立を解消するためのステップとは?
多くの企業がバックオフィス業務効率化のため多様なクラウドシステムを導入するも、「便利なはずが非効率」という現実に直面しています。
その原因は、勤怠や経費など「部分最適」なシステム導入による乱立です。システム同士がつながらず、データの手入力やExcelでの突き合わせ作業が常態化。
これは「見えないコスト」を増やし、業務フローを複雑化させ、現場の負担を増大させます。システム乱立のリスクを整理し、業務アセスメントによる根本解決策をご紹介するホワイトペーパーを用意していますので、ぜひお気軽にご覧ください。
※ 掲載している情報は記事更新時点のものです。
※本サイトは、法律的またはその他のアドバイスの提供を目的としたものではありません。当社は本サイトの記載内容(テンプレートを含む)の正確性、妥当性の確保に努めておりますが、ご利用にあたっては、個別の事情を適宜専門家にご相談いただくなど、ご自身の判断でご利用ください。
スプレッドシート 関数の関連記事
新着記事
-
# 業務効率化の基本
クラウドのメリット・デメリットは?主要サービスやオンプレミスとの比較表をもとに解説
クラウドのメリット・デメリットは? クラウドは、初期費用を抑えて迅速な導入や拡張ができる点が大きなメリットですが、ネット環境への依存や長期的なコスト増といったデメリットも伴います。…
詳しくみる -
# 業務効率化の基本
社外へのファイル共有を安全に行う方法は?リスクやツール選びのポイントを徹底解説
社外へのファイル共有を安全に行う方法は? 社外へのファイル共有は、機密保持のためクラウドストレージ等の専用ツールを活用し、適切な権限管理と期限設定のもとで行うべき重要な業務プロセス…
詳しくみる -
# 業務効率化の基本
マニュアルの種類は?業務・規範・安全管理など目的別に作成する方法を解説
マニュアルの種類は? マニュアルの種類は、活用目的や対象読者に応じて「業務」「操作」「規範」「教育・訓練」「作業」「製品」「安全・危機管理」の7つに大別されます。 業務・操作: 全…
詳しくみる -
# メモ
Windowsのメモ帳で文字を検索するには?文字列を置換・ファイルを横断検索する方法も解説
Windowsのメモ帳で文字を検索するには? Windowsのメモ帳で文字を検索するには、ショートカットキー「Ctrl + F」を使用するのが効率的です。 検索・置換:Ctrl +…
詳しくみる -
# 業務効率化の基本
ノウハウを蓄積するには?組織の知識を資産に変える方法・仕組みづくり・ツール選びを解説
ノウハウの蓄積方法まとめ ノウハウの蓄積とは、個人の経験や技術(暗黙知)を文書や動画などの形式知へ変換し、組織全体で共有・再利用できる資産に変えるプロセスです。 属人化の解消: 担…
詳しくみる -
# ツール
チャットが苦手だと感じる理由は?原因・特徴・克服するためのコツを徹底解説
チャットが苦手だと感じる理由は? チャットが苦手な主な理由は、即時返信へのプレッシャーや感情が伝わりにくい不安にあり、無理に速度を追わず運用ルールを整えることが克服の鍵です。 脱・…
詳しくみる
