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
- コピー / 切り取り:
- 開始位置の指定: Ctrl + 6
- 範囲選択: 矢印キーで移動
- コピー: Alt + 6 / 切り取り: Ctrl + k
補足: 範囲選択しない場合、全体が範囲となる。
- 貼り付け: Ctrl + u
- カーソル移動:
- ファイル先頭: Alt + ¥
- ファイル末尾: Alt + /
- 操作の取消し: Alt + u
- 操作の取消しの取り消し: Alt + e
参考:
VirtualBoxのキーボードレイアウトの変更方法について
あけましておめでとうございます。
本年も気が向いたらブログを書いていきたいと思いますのでよろしくお願いします。
VirtualBoxのキーボード設定が日本語キーボードのレイアウトだったので、僕のキーボードのUSキーボードのレイアウトに変更しました。という小さな小さなお話しというか、、、手順です。
VirtualBoxのキーボードレイアウトを日本語キーボードからUSキーボードに変更する手順
VirtualBoxを起動し、メニューバーにあるシステムからキーボードを選択
キーボードの設定メニューからレイアウトを選択し、追加ボタンを選択
国別タブ内のメニューを以下のように設定し、追加ボタンを選択
[ 国: アメリカ合衆国 / 系列: 英語 (US) ]- レイアウトを日本語から英語(US)に変更し、閉じるを選択
うむ。
これでUSキーボード対応になったはずです。
Eclipseのショートカットが効かない...
MacでEclipseの便利なショートカットキーを有効に
OSのショートカットキーとバッティングしてEclipseの便利なショートカットキーが使えないことがあります。
バッティングしないためには、OSのショートカットキーを変更もしくは削除するか、Eclipseのショートカットキーを変更するかだと思います。
今回は例として以下のEclipseのショートカットキーを有効にする設定方法を紹介する中でOSとEclipseのショートカットキーの設定方法を紹介していきます。
有効にするEclipseのショートカットキー F3: 要素の宣言元にジャンプ ⌘space: 入力補完
Macのショートカットキーの設定方法
EclipseのF3を有効にするために、Macのショートカットキーの設定を変更します。
1, システム環境設定を開き、キーボードを選択後にキーボードというメニューを選択
2, F1、F2なでのすべてのキーを標準のファンクションキーとして使用にチェックを入れ、キーボードパネルを閉じる
3, Eclipseを開き、F3が有効になっているかを確認
以下では25行目のresultが宣言元である12行目のresultに移動します。ファイル間も移動できるのでとても便利です。
その他のOSのショートカットキーを変更するには、1で開いたキーボードメニューやショートカットメニューから変更したりします。
Eclipseのショートカットキーの設定方法
次はEclipseのショートカットキーの設定を変更して⌘spaceを有効にしていきます。
1, Eclipseを起動し、設定から一般を選択し、キーを開く
2, 変更したいショートカットを選択し、パネル配下にあるバインディングに任意のショートカットを入力
今回は以下のようにコンテンツ・アシストを変更しました。
⌘space → ⌥ space
以上、Eclipseのショートカットが効かないときに有効にする設定方法でした。
おやすみなさい