DBeaverのAIボタン(AI Assistant)
みなさんは普段、どのデータベースクライアントを使用していますか?「HeidiSQL」、「DataGrip」、「MySQL Workbench」「Sequel Ace」など色々ありますよね👀
自分は「DBeaver」を使用しています!
いつものようにDBeaverを触っていると、AIボタンが追加されていることに気づきました。今回は、このAIボタンの機能について紹介します。

使用するための認証
今回は GitHub Copilot を使用する例をもとに説明します。
Community版では「OpenAI」も選択できます。ただし、「APIキーのみ」による認証のみです。
| 手順 | 画像 |
|---|---|
| 「AIボタン」を押す or 設定から「AI」と検索すると右の画面に入れます。 | ![]() |
| 「Authorize」ボタンを押すと、このようなポップアップが表示されます。 「Copy and Open」でブラウザのタブが開きます。 |
![]() |
| 開かれたタブで認証をしてください。 (未ログインの場合はログインが求められます) |
![]() |
| クリップボード or ポップアップ画面からコピーしたコードを入力してください。 | ![]() |
| 権限に関する確認画面が表示されるので、内容を確認して認証してください。 | ![]() |
| これで認証が完了です 🎉 | ![]() |
| お使いのGitHub Copilotで有効なモデルは使用可能です プレミアムリクエストに関する情報は表示されない点に注意してください。 |
![]() |
設定

以上のような設定があるため、それぞれの項目について解説します。
言語
「Japanese」は選択肢にないため、この中だと「English」or 「空白」になりそうです。

SQL補完(SQL Completion)
- ☑クエリコメントにソースを含める
- ON:「ユーザーのプロンプト」を出力の冒頭にコメントとして挿入
- OFF:AIからの回答のみ
- ☑SQLを即時実行
- AIボタン使用時の動作設定です。
- ON:AIから返ってきたクエリがSELECT文の時に即時実行
- OFF:エディタに表示するだけ
AIクエリ実行(AI queries execution)
@aiコマンドを実行する際の設定
- Select(SELECT クエリ)
- 即時実行
- 確認を表示
- Modify(DML クエリ: INSERT/UPDATE/DELETE)
- 即時実行
- 確認を表示
- 自動コミットを無効化
- Schema(DDL クエリ: CREATE/DROP/ALTER)
- 即時実行
- 確認を表示
データベース構造の送信(Send Database Structure)
- 列のデータ型情報を送信
- ON:
VARCHAR(100)などのデータ情報を含めて、テーブル情報を送信。 - OFF:カラム名のみを送信。
- ON:
- オブジェクトの説明を送信
- ON:DDLのコメントを含めて送信。
- OFF:含めない。
使用してみる
モデルは「GPT-5-mini」を使用します。
使用したダミーデータ
🧩 データベース構成
データベース名: ai_demo_db
-
-
customers(顧客情報)
-
CREATE TABLE customers (
customer_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL,
phone VARCHAR(20),
city VARCHAR(100),
registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-
-
products(商品情報)
-
CREATE TABLE products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
category VARCHAR(50),
price DECIMAL(10,2),
stock INT DEFAULT 0
);
-
-
orders(注文情報)
-
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT NOT NULL,
order_date DATETIME DEFAULT CURRENT_TIMESTAMP,
total_amount DECIMAL(10,2),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
-
-
order_items(注文詳細)
-
CREATE TABLE order_items (
order_item_id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2),
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
🌱 ダミーデータ挿入
- 顧客データ
INSERT INTO customers (name, email, phone, city) VALUES
('Alice Tanaka', 'alice@example.com', '080-1111-2222', 'Tokyo'),
('Bob Suzuki', 'bob@example.com', '090-3333-4444', 'Osaka'),
('Charlie Yamada', 'charlie@example.com', '070-5555-6666', 'Nagoya'),
('Diana Ito', 'diana@example.com', '080-7777-8888', 'Fukuoka'),
('Ethan Sato', 'ethan@example.com', '090-9999-0000', 'Sapporo');
- 商品データ
INSERT INTO products (name, category, price, stock) VALUES
('Wireless Mouse', 'Electronics', 2500, 100),
('Bluetooth Keyboard', 'Electronics', 4500, 80),
('Laptop Stand', 'Accessories', 3000, 50),
('Water Bottle', 'Lifestyle', 1500, 200),
('Notebook', 'Stationery', 500, 500);
- 注文データ
INSERT INTO orders (customer_id, order_date, total_amount) VALUES
(1, '2025-10-01 10:30:00', 7000),
(2, '2025-10-03 15:00:00', 4500),
(3, '2025-10-05 09:45:00', 8000),
(1, '2025-10-10 20:10:00', 9500),
(4, '2025-10-12 13:20:00', 500);
- 注文明細データ
INSERT INTO order_items (order_id, product_id, quantity, price) VALUES
(1, 1, 1, 2500),
(1, 2, 1, 4500),
(2, 3, 1, 4500),
(3, 1, 2, 5000),
(3, 5, 6, 3000),
(4, 2, 1, 4500),
(4, 3, 1, 3000),
(4, 4, 1, 2000),
(5, 5, 1, 500);
使い方
以下の2つの方法で指示を出すことができます。
- AIボタンを押す
-
@ai 自然言語の要求→クエリ実行の動作
AIボタン
ボタンを押すと以下のようなウィンドウが出現します。
カーソルが出ている部分で要求を伝えます。
※変換を確定するときのEnterキーでも送信されてしまいます。そのため、何処かに書いてコピペすると良さそうです。

①「顧客一覧を全部表示して」(単純なSELECT文)
ひとまず問題ないクエリが出ました🙆♂️
-- 顧客一覧を全部表示して
-- 以下は顧客テーブルの全行・全列を取得するSQLです。顧客IDで昇順に並べます。
SELECT `customer_id`, `name`, `email`, `phone`, `city`, `registered_at`
FROM `customers`
ORDER BY `customer_id` ASC;

②「各注文の中身を商品名と一緒に見たい」(テーブルをJOIN)
JOINの際にテーブル名にエイリアスをかけたクエリが出ました。
-- 各注文の中身を商品名と一緒に見たい
-- 注文ごとに注文行(`order_items`)と商品名(`products`.`name`)を結合して表示します。必要に応じて出力列は調整してください(顧客名を表示したい場合は`customers`をさらにJOINできます)。
SELECT
`o`.`order_id`,
`o`.`customer_id`,
`o`.`order_date`,
`oi`.`order_item_id`,
`oi`.`product_id`,
`p`.`name` AS `product_name`,
`oi`.`quantity`,
`oi`.`price`,
(`oi`.`quantity` * `oi`.`price`) AS `line_total`
FROM `orders` AS `o`
JOIN `order_items` AS `oi` ON `o`.`order_id` = `oi`.`order_id`
JOIN `products` AS `p` ON `oi`.`product_id` = `p`.`product_id`
ORDER BY `o`.`order_id`, `oi`.`order_item_id`;

③「売上金額が多い順に上位3人の顧客を出して」(集計等が必要なクエリ)
-- 売上金額が多い順に上位3人の顧客を出して
-- 顧客ごとの合計売上(金額)を集計し、多い順で上位3名を取得します。orders の total_amount を合計して表示します。
SELECT
`c`.`customer_id`,
`c`.`name`,
`c`.`email`,
`c`.`city`,
COALESCE(SUM(`o`.`total_amount`), 0) AS `total_sales`
FROM `customers` AS `c`
LEFT JOIN `orders` AS `o` ON `c`.`customer_id` = `o`.`customer_id`
GROUP BY
`c`.`customer_id`,
`c`.`name`,
`c`.`email`,
`c`.`city`
ORDER BY `total_sales` DESC
LIMIT 3;

@ai で要求
以下のような形式で入力し、いつものSQL実行と同じように実行するだけです。
@ai [自然言語の要求]
クエリ実行の待ちと同じ表示が出ます。

即時実行を無効にしている場合は、このようにプレビューを確認できます。
- AIボタンと異なり、エディタ内にはクエリが出力されません。
- 自然言語でデータベースを操作する感覚に近いと考えると分かりやすいです。
プライバシー
Community版についてはGitHub Wiki上に「AI assistance and data privacy」の名目で記載されています。
基本的には以下の点を意識すれば良いと思います。
- メタデータ送信の設定などを気をつける。
- 使用するAIプロバイダーのプライバシーポリシーを気をつける。
DBeaverをお使いの方は、ぜひご活用ください👍️







Discussion