シンプルなクエリを書くのは簡単です。しかし、15個のJOINや多数のエイリアスを含む複雑なクエリになった場合、その保守は非常に煩雑になります。テーブルのエイリアスを1つ変更するだけでも、関連するすべての参照箇所を手作業で探し回さなければなりません。Navicat 18のSQLエディターは、「リファクタリング」「リアルタイムエラー検出」「コードインサイト」の3つの新機能によって、こうした手間を解消します。
リファクタリング:シンボル名の変更
ここで中心となる機能は、書き直されたSQLパーサーを基盤とする「シンボル名の変更」です。Navicat 18の他の新機能とは異なり、この機能は完全に規則に基づいて確実(決定論的)に動作します。AIを使用しないため、処理結果に曖昧さは一切ありません。パーサーがクエリの構造を正確に理解し、指定した識別子のすべての使用箇所を特定して、1回の操作で安全にまとめて更新します。
例えば、MySQLのSakilaサンプルデータベースに対して次のようなクエリを使用しているとします。
SELECT c.customer_id,
c.first_name,
c.last_name,
SUM(p.amount) AS total_spend
FROM customer c
LEFT JOIN payment p ON p.customer_id = c.customer_id
GROUP BY c.customer_id
ORDER BY total_spend DESC
LIMIT 1;
エイリアス「c」では分かりにくいと感じる場合は、そのエイリアスにカーソルを合わせて右クリック(macOSの場合は Control+クリック)し、「リファクタリング」>「シンボル名の変更...」を選択します。
「シンボル名の変更...」の末尾ににある「…」は、ダイアログが開くことを示しています。開いた「シンボル名の変更」ダイアログで新しい名前を指定します。
「OK」ボタンをクリックすると、SELECTリスト、FROM句、JOIN条件、GROUP BY句など、ステートメント全体のすべての「c」が一括更新されます。一部のみが変更されて構文エラーが発生するような心配はありません。このコマンドはエイリアスだけでなく、オブジェクト識別子のリネームにも同様に使用できます。
リアルタイムエラー検出
SQLエディターは、実行が失敗して初めて問題に気づくのではなく、入力中のスクリプトを常に解析してチェックします。タイポ、存在しない列やテーブルへの参照、複数テーブル間でのあいまいな列指定などは、実行後に分かりにくいデータベースエラーとして表示されるのではなく、エディター上にすぐに表示されます。複数のテーブルを結合するクエリでは、この機能だけでも何度も繰り返す試行錯誤を減らせます。
以下は、先ほどと同じクエリで存在しない列名を指定した例です。オレンジ色の下線が付いたテキストにマウスポインターを合わせると、警告メッセージが表示されます。
「SUM」関数の部分には赤色の下線が表示されています。ここにマウスポインターを合わせると、エラーメッセージが表示されます。
いずれのメッセージにも「AIで修正」という選択肢が表示されます。その名の通り、「AIで修正」ツールはAIを活用してクエリ内のすべての警告やエラーを自動的に修正します。提案された修正内容はダイアログで確認できます。
提案されたコードをエディターに適用する際は、次の3つのオプションから選択可能です。
- エディターに追加:既存コードの末尾に修正コードを追加します。
- エディター内をすべて置換:既存の内容を消去し、すべて新しいコードに置き換えます。
- エディター内の選択範囲を置換(デフォルト):選択中のコード範囲のみを新しいコードに置き換えます。
コードインサイト
3つ目の「コードインサイト」は、実用的で便利な3つの動作を提供します。識別子にカーソルを合わせると、エディターを離れることなくメタデータ(データ型やNULL許容など)を確認できます。識別子をクリックするとスクリプト内のすべての使用箇所が強調表示されるため、長いクリでのたどりやすさが向上します。テーブルや列をCtrl+クリックすると、対象オブジェクトのデザイナやデータエディタへ直接ジャンプできます。
積み重なる効果
これら3つの機能が組み合わさることで、日々のSQL開発のテンポが大きく向上します。手作業による名前変更の反映、事後的なタイポのデバッグ、型確認のためのコンテキスト切り替えといった無駄な時間が削減されます。日常的にクエリエディターで長時間作業するユーザーにとって、この積み重ねが大きな生産性向上をもたらします。

