PHP+SQLite:カラムの演算

(1/1)
SQLでは、カラムに対して演算を行うことができる。四則演算や論理演算はもちろん、一部の数学関数も用意されている。

(2022年11月19日)PHP8対応,他.

目次

サンプル・プログラムの実行例 (1)

PHP+SQLite:算術演算

サンプル・プログラム

圧縮ファイルの内容
calc1.phpサンプル・プログラム本体 (1)。
calc2.phpサンプル・プログラム本体 (2)。
calc3.phpサンプル・プログラム本体 (3)。

サンプル・プログラム:算術演算

このプログラムは、1580年(天正8年)時点の満年齢を一覧表示するプログラムである。

解説:算術演算

  51: //実行するSQL
  52: define('SQL', 'SELECT *,(1580-birth) AS age FROM chronologic WHERE 1 ORDER BY birth;');

SELECT文の直後にはカラム名を書くと説明したが、演算結果を指定することもできる。
1560年(永禄3年)時点の満年齢を計算し、その結果を取得するには下記のようなSQL文になる。
SELECT *,(1580-birth) AS age FROM chronologic WHERE 1;
ここでは、演算結果を取り出しやすいように、(1580-birth)の計算結果を age という仮想カラムに割り当てた。AS句を使うことで、演算結果を仮想的なカラム名に割り当てることができる。

サンプル・プログラムの実行例 (2)

PHP+SQLite:1算術演算と条件式

プログラムを実行する:算術演算と条件式

上述のサンプル・プログラムでは、1580年(天正8年)時点で死亡している者や、まだ産まれていない者も計算、表示してしまった。そこで、1580年(天正8年)時点で生存している者の満年齢を一覧表示するプログラムを作ってみた。

解説:算術演算と条件式

  51: //実行するSQL
  52: define('SQL', 'SELECT *,(1580-birth) AS age FROM chronologic WHERE (birth <= 1580) and (death > 1580) ORDER BY birth;');

算術演算と WHERE条件式を組み合わせることによって目的は達成できる。
SELECT *,(1580-birth) AS age FROM chronologic WHERE (birth <= 1580) and (death > 1580);
(1580-birth)の結果を仮想カラム ageに代入することは同じだが、WHERE句に "(birth <= 1580) and (death > 1580)" を記述することで、「生年が1580以下」かつ「没年が1580を超える」という条件で絞り込む。

サンプル・プログラムの実行例 (3)

PHP+SQLite:カラム同士の演算

プログラムを実行する:カラム同士の演算

このプログラムは、死亡時の満年齢を一覧表示するプログラムである。

解説:カラム同士の演算

SQLではカラム同士の演算を行うこともできる。
SELECT *, (death - birth) AS age FROM chronologic WHERE 1 ORDER BY age DESC;
死亡時の満年齢――つまり、カラム death からカラム birth を減じた値を仮想カラム age に代入する。
同時に、ORDER BY 句を使い、長寿の順(死亡時の満年齢が大きい順、昇順)に並べ替えを行う。

  51: //実行するSQL
  52: define('SQL', 'SELECT *, (death - birth) AS age FROM chronologic WHERE 1 ORDER BY age DESC;');

(この項おわり)
header