SQLで集合演算にトライ 〜和集合/積集合/差集合について〜

SQLの集合演算についてまとめてみた

テーブル同士の集合演算について簡単に書き留めたので投稿。 集合演算は、和集合・積集合が一般的ですが、 差集合というのもあるらしいのでそちらについても記載しときます。

サンプルデータ

以下は説明で使用するテーブルです。
PERSONテーブル

NAME ADDRESS WORK
田中みほ 東京 モデル
潮田れいこ 福岡 元スポーツ選手
伴とみこ 熊本 歌手
吉瀬みちこ 福岡 女優


TOKYO_PERSONテーブル

NAME ADDRESS WORK
田中みほ 東京 モデル
上戸あや 東京 女優
平井りお 東京 アナウンサー

UNIONで和集合を求める

和集合は、UNIONという演算子を使います。
こんな感じ。

SELECT *
FROM PERSON
UNION
SELECT *
FROM TOKYO_PERSON;
NAME ADDRESS WORK
田中みほ 東京 モデル
潮田れいこ 福岡 元スポーツ選手
伴とみこ 熊本 歌手
吉瀬みちこ 福岡 女優
上戸あや 東京 女優
平井りお 東京 アナウンサー

PERSONとTOKYO_PERSONテーブルの和集合が出力されまます。 ここでポイントなのが、"田中みほ"さんの両テーブルのデータは、すべての列で完全に同一である重複データであるということです。
UNIONは和集合のため、重複しているデータは削除します。重複を削除させたくない場合は以下のようにUNIONにALLオプションをつけます。これはこの後説明する、積集合(INTERSECT)と差集合(EXCEPT)も同様です。

SELECT *
FROM PERSON
UNION ALL
SELECT *
FROM TOKYO_PERSON;
NAME ADDRESS WORK
田中みほ 東京 モデル
潮田れいこ 福岡 元スポーツ選手
伴とみこ 熊本 歌手
吉瀬みちこ 福岡 女優
田中みほ 東京 モデル
上戸あや 東京 女優
平井りお 東京 アナウンサー

INTERSECTで積集合を求める

積集合は、INTERSECTという演算子を使います。
PERSONとTOKYO_PERSONテーブルに共通するレコードが出力されます。

SELECT *
FROM PERSON
INTERSECT
SELECT *
FROM TOKYO_PERSON;
NAME ADDRESS WORK
田中みほ 東京 モデル

EXCEPTで差集合を求める

差集合は、EXCEPTという演算子を使います。
ORACLEの場合は、EXCEPTをMINUSに置き換えて読んでください。なお、ORACLEにはALLオプションはないそうです。

SELECT *
FROM PERSON
EXCEPT
SELECT *
FROM TOKYO_PERSON;
NAME ADDRESS WORK
潮田れいこ 福岡 元スポーツ選手
伴とみこ 熊本 歌手
吉瀬みちこ 福岡 女優

UNIONとINTERSECTはテーブルの順序は関係なく同一の出力結果となりますが、 四則演算と同じで、EXCEPTはテーブルの順序で出力結果が異なるという注意点があります。

順序を変えた四則演算

  • 和集合(UNION): 4 + 3 = 7, 3 + 4 = 7
  • 積集合(INTERSECT): 4 * 3 = 12, 3 * 4 = 12
  • 差集合(EXCEPT): 4 - 3 = 1, 3 - 4 = -1



参考書籍:

Vim(テキストエディタ)の備忘録

Vimエディタの備忘録

Vimエディタの使い方

Vimは起動しただけでは文字入力を受け付けない。 この状態をノーマルモードというらしい。

ファイル編集の最低限

ノーマルモードで文字を挿入する位置まで移動して、iを入力。 これを文字入力可能状態(挿入モード)という。 文字入力が終わったらEscキーを押してノーマルモードに戻す。 ファイルの編集が完了したら:wで保存する。 編集が終了したら:qでファイル編集を終了する。 ファイルを保存せずにVimを終了したい場合には、:q!を入力する。

ファイル編集の便利操作

  • 行の末尾に文字を挿入するには、A(大文字)を入力する。
  • カーソル位置の文字を削除するにはxを入力する。
  • カーソルの左側の文字を削除するには、X(大文字)を入力する。
  • 範囲選択を行うには、v を押して範囲の先頭を選択し、矢印キーで移動する。
  • 選択範囲のコピーにはyを入力し、選択範囲の切り取りにはdを入力する。
  • コピー/切り取ったものの貼り付けには、P(大文字)を入力する。
  • 範囲選択せずにカーソル行のコピーにはyyを入力し、カーソル行の切り取りにはddを入力する。
  • ファイルの最初の行にカーソル移動するには、ggを入力する。
  • ファイルの最後の行にカーソル移動するには、G(大文字)を入力する。
  • 直前の操作の取り消しには、uを入力する。
  • 操作の取り消しの取り消しには、Ctrl + rを入力する。

参考:

nano(テキストエディタ)の備忘録

nanoエディタの備忘録

nanoエディタの使い方

  • ファイルを開く: nano hoge/hoge/sample.txt
  • 保存: Ctrl + o
  • 終了: Ctrl + x
  • 保存せずに終了: Ctrl + x + n
  • コピー / 切り取り:
    1. 開始位置の指定: Ctrl + 6
    2. 範囲選択: 矢印キーで移動
    3. コピー: Alt + 6 / 切り取り: Ctrl + k
      補足: 範囲選択しない場合、全体が範囲となる。
  • 貼り付け: Ctrl + u
  • カーソル移動:
    • ファイル先頭: Alt + ¥
    • ファイル末尾: Alt + /
  • 操作の取消し: Alt + u
  • 操作の取消しの取り消し: Alt + e

参考:

VirtualBoxのキーボードレイアウトの変更方法について

あけましておめでとうございます。
本年も気が向いたらブログを書いていきたいと思いますのでよろしくお願いします。

VirtualBoxのキーボード設定が日本語キーボードのレイアウトだったので、僕のキーボードのUSキーボードのレイアウトに変更しました。という小さな小さなお話しというか、、、手順です。

VirtualBoxのキーボードレイアウトを日本語キーボードからUSキーボードに変更する手順

  1. VirtualBoxを起動し、メニューバーにあるシステムからキーボードを選択

    f:id:yagi_suke:20150102000658p:plain

  2. キーボードの設定メニューからレイアウトを選択し、追加ボタンを選択

    f:id:yagi_suke:20150102004244p:plain

  3. 国別タブ内のメニューを以下のように設定し、追加ボタンを選択

    [ 国: アメリカ合衆国 / 系列: 英語 (US) ]

    f:id:yagi_suke:20150102004248p:plain

  4. レイアウトを日本語から英語(US)に変更し、閉じるを選択

    f:id:yagi_suke:20150102004252p:plain

うむ。
これでUSキーボード対応になったはずです。

Eclipseのショートカットが効かない...

MacEclipseの便利なショートカットキーを有効に

OSのショートカットキーとバッティングしてEclipseの便利なショートカットキーが使えないことがあります。

バッティングしないためには、OSのショートカットキーを変更もしくは削除するか、Eclipseのショートカットキーを変更するかだと思います。

今回は例として以下のEclipseのショートカットキーを有効にする設定方法を紹介する中でOSとEclipseのショートカットキーの設定方法を紹介していきます。

有効にするEclipseのショートカットキー
F3: 要素の宣言元にジャンプ
⌘space: 入力補完

Macのショートカットキーの設定方法

EclipseのF3を有効にするために、Macのショートカットキーの設定を変更します。

1, システム環境設定を開き、キーボードを選択後にキーボードというメニューを選択

2, F1、F2なでのすべてのキーを標準のファンクションキーとして使用にチェックを入れ、キーボードパネルを閉じる

f:id:yagi_suke:20141123014501p:plain

3, Eclipseを開き、F3が有効になっているかを確認
以下では25行目のresultが宣言元である12行目のresultに移動します。ファイル間も移動できるのでとても便利です。

f:id:yagi_suke:20141123020909p:plain

その他のOSのショートカットキーを変更するには、1で開いたキーボードメニューやショートカットメニューから変更したりします。

f:id:yagi_suke:20141123014439p:plain

Eclipseのショートカットキーの設定方法

次はEclipseのショートカットキーの設定を変更して⌘spaceを有効にしていきます。

1, Eclipseを起動し、設定から一般を選択し、キーを開く

f:id:yagi_suke:20141123022250p:plain

2, 変更したいショートカットを選択し、パネル配下にあるバインディングに任意のショートカットを入力
今回は以下のようにコンテンツ・アシストを変更しました。

⌘space → ⌥ space

以上、Eclipseのショートカットが効かないときに有効にする設定方法でした。
おやすみなさい