MariaDBで既存の列を2で割った値を新しい列として作成する方法
MariaDBで既存の列を2で割った値を新しい列として作成する方法
例
この例では、customers
テーブルにage
という列があり、顧客の年齢が保存されていると仮定します。 新しい列half_age
を作成し、age
列の値を2で割った結果を格納します。
手順
- 以下のSQLクエリを実行します。
ALTER TABLE customers
ADD half_age INT AS (age / 2) GENERATED ALWAYS;
このクエリは以下の処理を実行します。
customers
テーブルにhalf_age
という名前の新しい列を追加します。half_age
列のデータ型はINT
です。half_age
列の値は、age
列の値を2で割った結果として自動的に生成されます。GENERATED ALWAYS
オプションを指定することで、age
列の値が変更されるたびに、half_age
列の値も自動的に更新されます。
- 上記のクエリを実行すると、
customers
テーブルに新しいhalf_age
列が追加されます。 既存のデータには、自動的にage
列の値を2で割った結果が格納されます。
補足
GENERATED COLUMN
機能は、MariaDB 10.2以降で使用できます。- 新しい列のデータ型は、元の列のデータ型と互換性のある型である必要があります。
GENERATED COLUMN
で作成された列は、インデックス化したり、外部キー制約に使用したりすることはできません。
-- customersテーブルを作成します。
CREATE TABLE customers (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
age INT NOT NULL
);
-- customersテーブルにデータを追加します。
INSERT INTO customers (name, age)
VALUES
('John Doe', 30),
('Jane Doe', 25),
('Peter Jones', 40);
-- age列を2で割った値をhalf_age列として作成します。
ALTER TABLE customers
ADD half_age INT AS (age / 2) GENERATED ALWAYS;
-- customersテーブルのすべての行を表示します。
SELECT * FROM customers;
このコードを実行すると、以下の結果が出力されます。
id | name | age | half_age
----+------------+-----+---------
1 | John Doe | 30 | 15
2 | Jane Doe | 25 | 12
3 | Peter Jones | 40 | 20
この結果から、half_age
列には、age
列の値を2で割った結果が格納されていることがわかります。
- このサンプルコードでは、
customers
テーブルを作成し、データを追加しています。 実際のアプリケーションでは、既存のテーブルを使用することになります。 age
列のデータ型はINT
ですが、サンプルコードはあくまでも例であり、実際のデータ型に合わせて変更する必要があります。
MariaDBで既存の列を2で割った値を新しい列として作成するその他の方法
サブクエリを使用する
以下のSQLクエリは、サブクエリを使用してage
列の値を2で割った結果を新しいhalf_age
列として作成します。
ALTER TABLE customers
ADD half_age INT AS (
SELECT age / 2
FROM customers
);
half_age
列の値は、customers
テーブルからage
列の値をすべて取得し、2で割った結果として計算されます。
UPDATEステートメントを使用する
ALTER TABLE customers
ADD half_age INT;
UPDATE customers
SET half_age = age / 2;
UPDATE
ステートメントを使用して、customers
テーブルのすべての行のhalf_age
列に、age
列の値を2で割った結果を格納します。
ビューを使用する
以下のSQLクエリは、age
列の値を2で割った結果を返すビューを作成します。
CREATE VIEW customers_half_age AS
SELECT id, name, age, age / 2 AS half_age
FROM customers;
- このビューは、
customers
テーブルからid
、name
、age
、age / 2
(新しいhalf_age
列) の列をすべて選択します。
このビューを使用すると、以下のクエリでhalf_age
列の値を取得することができます。
SELECT * FROM customers_half_age;
- サブクエリを使用する方法は、シンプルな方法ですが、パフォーマンスが低下する可能性があります。
UPDATE
ステートメントを使用する方法は、パフォーマンスが優れていますが、既存のデータにのみ適用されます。- ビューを使用する方法は、柔軟性が高く、パフォーマンスも良好ですが、ビューを常に更新する必要があります。
mariadb