手順
shpファイルを追加後に、上のメニューバーのレイヤ → レイヤを作成 → 新規仮想レイヤ… を選択します。
※今回は、AED設置事業所_室蘭市_ というポイントデータのshpファイルを入れております。
レイヤ名を入力して、クエリにSQLを入力します。
例:SELECT * FROM AED設置事業所_室蘭市_
shpファイルの全属性を抽出するクエリになります。
testをクリックすると、エラーがあるかの確認ができます。
追加をクリックすると、新たなレイヤが追加されます。
新たにポイントデータが追加されています。
これは一時的なレイヤになりますので、改めてshpファイルなどで保存したい場合は、レイヤを右クリック → エクスポート → 新規ファイルに地物を保存 から、新たに保存します。
SELECT *では、すべての属性が抽出されます。
以下に簡単なSQLの例文の一覧を載せておきます。
用途に合わせてご使用ください。
筆者は、属性のデータ量が多いときやプロセシングツールボックスがうまく動かないときに、SQLを使用して、データを加工しています。
データ取得
SELECT
テーブルからデータを取得する基本構文。
SELECT カラム名 FROM テーブル名;
例:SELECT name, age FROM users WHERE age > 20 ORDER BY age DESC;
DISTINCT
重複を排除してデータを取得。
SELECT DISTINCT カラム名 FROM テーブル名;
WHERE
条件を指定してデータをフィルタリング。
SELECT * FROM テーブル名 WHERE 条件;
演算子:
-
- = 等しい
- != または <> 等しくない
- > / < 大なり / 小なり
- LIKE 部分一致(%や_を使う)
- IN リストの中に含まれる
データの操作
INSERT
データを挿入。
INSERT INTO テーブル名 (カラム1, カラム2) VALUES (値1, 値2);
UPDATE
データを更新。
UPDATE テーブル名 SET カラム名 = 新しい値 WHERE 条件;
DELETE
データを削除。
DELETE FROM テーブル名 WHERE 条件;
集計
GROUP BY
データをグループ化。
SELECT カラム名, COUNT(*) FROM テーブル名 GROUP BY カラム名;
HAVING
グループ化した後の条件指定。
SELECT カラム名, COUNT(*) FROM テーブル名 GROUP BY カラム名 HAVING COUNT(*) > 1;
ORDER BY
データを並び替え。
SELECT * FROM テーブル名 ORDER BY カラム名 ASC; — DESCで降順
LIMIT
データの取得数を制限。
SELECT * FROM テーブル名 LIMIT 数値 OFFSET 数値; — OFFSETで開始位置指定
結合
INNER JOIN
2つのテーブルを結合。
SELECT * FROM テーブルA
INNER JOIN テーブルB ON テーブルA.id = テーブルB.a_id;
LEFT JOIN / RIGHT JOIN
一方のテーブルに必ずデータを残す結合。
SELECT * FROM テーブルA
LEFT JOIN テーブルB ON テーブルA.id = テーブルB.a_id;
FULL OUTER JOIN
両方のテーブルの全データを取得。
SELECT * FROM テーブルA
FULL OUTER JOIN テーブルB ON テーブルA.id = テーブルB.a_id;
サブクエリ
サブクエリ
クエリの中にクエリを記述。
SELECT name FROM users WHERE id IN (SELECT user_id FROM orders WHERE amount > 1000);
WITH句(CTE: 共通テーブル式)
サブクエリを簡潔に管理。
WITH RecentOrders AS (
SELECT * FROM orders WHERE order_date > ‘2024-01-01’
)
SELECT * FROM RecentOrders;
条件分岐
CASE文
条件に応じて値を変える。
SELECT
name,
CASE
WHEN age < 20 THEN ‘未成年’
WHEN age BETWEEN 20 AND 65 THEN ‘成人’
ELSE ‘高齢者’
END AS category
FROM users;
データベース操作
CREATE TABLE
テーブルを作成。
CREATE TABLE テーブル名 (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT
);
ALTER TABLE
テーブル構造を変更。
ALTER TABLE テーブル名 ADD COLUMN address VARCHAR(255);
DROP TABLE
テーブルを削除。
DROP TABLE テーブル名;
パフォーマンス
インデックス作成
パフォーマンス向上のためインデックスを作成。
CREATE INDEX idx_name ON テーブル名(カラム名);