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つ程度にすべきと思います。