• 作成日 : 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 > 1000B列が1000より大きい
文字列一致WHERE A = ‘営業部’A列が営業部と完全一致
部分一致WHERE A CONTAINS ‘東京’A列に東京を含む
複数条件WHERE B > 100 AND C < 50AND条件
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’);

対応データベース一覧

JDBCで接続可能なデータベース
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server
  • Oracle Database(制限あり)
  • Google Cloud SQL

BigQueryとスプレッドシートを連携してSQLを実行するには?

BigQueryとスプレッドシートを連携することで、ペタバイト規模のデータに対してSQLクエリを実行し、結果を直接取り込めます。ビッグデータ分析がスプレッドシートから可能になります。

Connected Sheetsの活用

BigQuery連携の設定手順
  1. スプレッドシートのメニューから「データ」→「データコネクタ」
  2. 「BigQueryに接続」を選択
  3. プロジェクトとデータセットを選択
  4. 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)}

条件付き書式での可視化

SQLクエリ結果の視覚化
  • 売上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関数集 32選まとめブック

経理担当者の方をはじめ、ビジネスパーソンが知っておきたい便利なExcel関数集を初級~上級までギュッと網羅。新人社員の研修用などにもお使いいただけます。Google スプレッドシートならではの関数もご紹介しています。

無料ダウンロードはこちら

②勘定科目・仕訳辞典(税理士監修)

勘定科目・仕訳辞典(税理士監修)

勘定科目・仕訳に関する基本知識、および各勘定科目の仕訳例を具体的かつ網羅的にまとめた、50ページを超えるガイドを無料で提供しております。お手元における保存版としてでだけでなく、従業員への印刷・配布用としてもぜひご活用ください。

無料ダウンロードはこちら

人事労務担当者向け

①入社・退職・異動の手続きガイドブック

入社・退職・異動の手続きガイドブック

書類の回収・作成・提出など手間のかかる入社・退職・異動(昇給・昇格、転勤)の手続き。

最新の制度をもとに、よくある質問やチェックポイントを交えながら、各手続きに必要な情報をまとめた人気のガイドですす。

無料ダウンロードはこちら

②社会保険・労働保険の手続きガイド

社会保険・労働保険の手続きガイド ‐入社・退職・異動編‐

企業において社会保険および労働保険の加入・喪失手続きは必ず発生し、手続きを誤れば保険事故が発生した際に従業員が不利益を被る可能性があります。

各保険の基本的な手続き方法を入社・退職・異動のシーン別にギュッとまとめた分かりやすいガイドです。

無料ダウンロードはこちら

総務・法務担当者向け

契約書ひな形まとめ30選

契約書ひな形まとめ30選

業務委託契約書や工事請負契約書…など各種契約書や、誓約書、念書・覚書、承諾書・通知書…など、使用頻度の高い30個のテンプレートをまとめた、無料で使えるひな形パックです。

無料ダウンロードはこちら


※ 掲載している情報は記事更新時点のものです。

※本サイトは、法律的またはその他のアドバイスの提供を目的としたものではありません。当社は本サイトの記載内容(テンプレートを含む)の正確性、妥当性の確保に努めておりますが、ご利用にあたっては、個別の事情を適宜専門家にご相談いただくなど、ご自身の判断でご利用ください。

関連記事