QGISでshpファイル等の属性テーブルをSQLで編集する方法

手順

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 テーブル名(カラム名);

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

error: Content is protected !!