- 作成日 : 2025年12月8日
スプレッドシートで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の知識を活かして、スプレッドシートをデータ分析のツールとして活用しましょう。
この記事をお読みの方におすすめのガイド5選【部署別紹介】
最後に、この記事をお読みの方によく活用いただいている人気の資料・ガイドを紹介します。すべて無料ですので、ぜひお気軽にご活用ください。
経理担当者向け
①Excel関数集 32選まとめブック
経理担当者の方をはじめ、ビジネスパーソンが知っておきたい便利なExcel関数集を初級~上級までギュッと網羅。新人社員の研修用などにもお使いいただけます。Google スプレッドシートならではの関数もご紹介しています。
②勘定科目・仕訳辞典(税理士監修)
勘定科目・仕訳に関する基本知識、および各勘定科目の仕訳例を具体的かつ網羅的にまとめた、50ページを超えるガイドを無料で提供しております。お手元における保存版としてでだけでなく、従業員への印刷・配布用としてもぜひご活用ください。
人事労務担当者向け
①入社・退職・異動の手続きガイドブック
書類の回収・作成・提出など手間のかかる入社・退職・異動(昇給・昇格、転勤)の手続き。
最新の制度をもとに、よくある質問やチェックポイントを交えながら、各手続きに必要な情報をまとめた人気のガイドですす。
②社会保険・労働保険の手続きガイド
企業において社会保険および労働保険の加入・喪失手続きは必ず発生し、手続きを誤れば保険事故が発生した際に従業員が不利益を被る可能性があります。
各保険の基本的な手続き方法を入社・退職・異動のシーン別にギュッとまとめた分かりやすいガイドです。
総務・法務担当者向け
契約書ひな形まとめ30選
業務委託契約書や工事請負契約書…など各種契約書や、誓約書、念書・覚書、承諾書・通知書…など、使用頻度の高い30個のテンプレートをまとめた、無料で使えるひな形パックです。
※ 掲載している情報は記事更新時点のものです。
※本サイトは、法律的またはその他のアドバイスの提供を目的としたものではありません。当社は本サイトの記載内容(テンプレートを含む)の正確性、妥当性の確保に努めておりますが、ご利用にあたっては、個別の事情を適宜専門家にご相談いただくなど、ご自身の判断でご利用ください。
関連記事
スプレッドシートで合計を求めるには?SUM関数の基本から応用まで
Googleスプレッドシートで数値データの合計を求めることは、売上管理、経費計算、在庫管理など、あらゆるビジネスシーンで必要不可欠な作業です。単純な合計から複雑な条件付き集計まで、適切な関数を使いこなすことで、データ分析の効率と精度を高める…
詳しくみるエクセルで行列を選択するショートカットをわかりやすく解説
エクセルを活用する上で、行や列を素早く選択するショートカットを知っておくと作業効率が大幅に向上します。本記事では、エクセルにおける行や列を選択するための便利なショートカットを詳しく解説します。また、選択した行や列の解除方法や、選択ができない…
詳しくみるスプレッドシートの承認機能とは?ワークフロー構築と承認プロセスの自動化方法
スプレッドシートで承認機能を実装することで、申請から承認までのワークフローを効率的に管理できます。本記事では、Googleスプレッドシートを使った承認システムの構築方法から、承認フローの設計、Google Apps Script(GAS)に…
詳しくみるエクセルで引き算する方法と関数まとめ
エクセルはデータ処理において非常に便利なツールです。その中でも、引き算は基本的かつ重要な機能の一つと言えます。本記事では、エクセルでの引き算を行う方法や関数について詳しく解説します。また、時間や日付の引き算についても触れ、引き算がうまくでき…
詳しくみるスプレッドシートに動画を埋め込みできる?制限事項と代替案まとめ
Googleスプレッドシート(Google Sheets)に動画を直接埋め込みたいと考えるユーザーは多く、プレゼンテーション資料や教育コンテンツ、マニュアル作成などで動画を活用したいというニーズは高まっています。しかし、残念ながらスプレッド…
詳しくみるスプレッドシートで議事録を効率的に作成する方法とは?テンプレート作成から自動化まで
Googleスプレッドシート(Google Sheets)を使った議事録作成は、リアルタイムで共同編集が行えるため、従来の文書作成ソフトよりも効率的に作成でき、素早い情報共有にも適しているでしょう。 特に、定期的な会議やチームミーティングで…
詳しくみる



