【UNION演算子】【列→行の変換】レコード(集合)を使用して足し算を行い、新たな集合(足し算の結果)を取得する

UNION演算子(またはUNION ALL演算子)を使用することで、
テーブルのレコード(集合)を使用した足し算(加算)をすることが
できます!

UNION演算子(またはUNION ALL演算子)を使用することで、
列データを行データとして取得(列→行の変換)
することなどができます!

例えば以下の1レコードの列データを、

以下のように行データをして取得することができます!

UNION演算子とは

標準SQLに含まれているモノです。
よってSQL Serverを含む全てのRDBMSで使用可能です。

UNION演算子(またはUNION ALL演算子)を使用することで、
レコード(集合)を使用した足し算(加算)をすることができます。


「UNION」と「UNION ALL」の違いは以下です。

UNION・・・・・重複を除く。重複を除くためにテーブルスキャンが行われるためコストが高い。
UNION ALL・・・重複を除かない。テーブルスキャンは行われないためコストが低い。

準備

以下のSQLを実行し、テーブルの作成/データの登録をします。

--テーブルの作成
CREATE TABLE testScore(
	name         VARCHAR(10),
	englishScore INT,
	historyScore INT,
	mathScore    INT
)

--テーブルへデータの登録
INSERT testScore (name, englishScore, historyScore, mathScore) VALUES ('鈴木一郎', 60, 90,35)

--登録したデータの確認
SELECT * FROM testScore

SQL実行

列データを行データとして取得(列→行の変換)します。

--englishScore(英語の点数)を出力
SELECT 
	'英語'       AS '教科名',
	englishScore AS '鈴木一郎の点数'
FROM testScore

UNION ALL

--historyScore(歴史の点数)を出力
SELECT 
	'歴史'       AS '教科名',
	historyScore AS '鈴木一郎の点数'
FROM testScore

UNION ALL

--mathScore(数学の点数)を出力
SELECT 
	'数学'       AS '教科名',
	mathScore    AS '鈴木一郎の点数'
FROM testScore

注意点

UNION(加算)することで多くのSELECT文を実行すると、実行した分だけコストが高くなります。
またSQLが冗長になり可読性が低下します。

UNION(加算)するSELECT文の数は、3~4つ程度にすべきと思います。

タイトルとURLをコピーしました