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

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

応用することで、
 ・列データを行データとして取得(列→行の変換)
もできます!

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

1レコードの列データ
1レコードの列データ

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

行データをして取得
行データをして取得
PR

UNION演算子とは

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

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


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

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

PR

準備

以下の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
テーブルの作成/データの登録結果
PR

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
列データを行データとして取得(列→行の変換)
列データを行データとして取得(列→行の変換)
PR

注意点

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

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

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