UNION

Posted by muchag | MySQL | 2015-02-13 (金) 17:28:26

他の記事もそうなんだけど、この記事は特に勉強中で自信がないので、内容が間違っている可能性大。 8-X

【環境】
MySQL:5.5.27

MySQL:13.2.9.4 UNION Syntax

概要

クエリ結果が同一構成となる2つ以上のクエリ結果を合成する。
 
JOIN による結合と違って、リレーションしているわけではない。
単に2つ以上のクエリ結果を1つのテーブル上にする。
 

注意
  1. それぞれのクエリが同カラム数であること
  2. 各カラムが同じ順番に並んでいること
  3. 各カラムのデータ型が同一であること
  4. 場合によって、メイン SELECT の部分にも()が必要
  5. FROM 句サブクエリ内で利用する場合は、サブクエリ全体にエイリアスをつけること

 

基本
  1. SELECT id, name, created_at FROM table_a
  2.     UNION SELECT id, name, modified_at FROM table_b

2つの SELECT がある。
カラム数は同じく 3。
カラム名は異なっていてもよい。→メインの SELECET 文のカラム名が返る。
2015-02-13_UNION_1

 

重複

この項は勉強、実証ともに特に不十分

UNION は、そのまま使うと重複した行は無視されるらしい。

重複した行を拾いたいときは、下記のように ALL をつける。

  1. SELECT id, name, created_at FROM table_a
  2.     UNION ALL SELECT id, name, modified_at FROM table_b

 

注文

こうして合成されたクエリ結果に ORDER BY, LIMIT などの注文を付けたい場合は、更にその後ろに続ける。
そして、SELECT 文を()で括る

  1. ( SELECT id, name, created_at FROM table_a )
  2.     UNION ( SELECT id, name, modified_at FROM table_b )
  3.     ORDER BY id

 

FROM 句

FROM 句にて UNION を利用するときは、エイリアスを付ける。

  1. SELECT id, name, created_at
  2.     FROM (
  3.     SELECT id, name, created_at FROM table_a
  4.     UNION SELECT id, name, modified_at FROM table_b
  5.     ) as sub

このとき、UNION SELECT 文にエイリアスを付けてしまわないように注意。
あくまでも FROM 句全体 に()を付ける。
 
これはサブクエリのルールだから当然か~。
サブクエリ

MySQL | 2015-02-13 (金) 17:28:26 |

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment