Home実験室 − No.0070


        No.0070(SQL)
        単純結合(クロス結合)で解く、順列と組み合わせ

■環境
  □OS: Windows XP Professional SP3
  □Oracle: Oracle Database 11g R2 (Standard)
  □OSログインユーザ: ORA_DBAグループ
  □Oracleユーザ: dicdic(実験用ユーザー) → 実験環境構築スクリプト

                         
次の手順を実行すると、下に掲げる結合の例題をすべて再現できます。
(このページのスクリプトで、基本的な実行環境ができていることが前提です)
※一般のdicdicユーザーの環境ではできません。下記手順を行ってください。

(手順)
 @下記ファイルをダウンロードします。
          これ
 ASQL*Plusを起動します。
 Bダウンロードしたファイルをテキストエディタで開き、1〜30行目を選択します。
 CSQL*Plusの画面でペースト(貼り付け)します。
 Dこのページで使用しているSQL文は     こちら


■実験
  0. 実験ユーザー「dicdic」でコネクトする。

SQL> conn dicdic/Oracle11g 接続されました。 SQL>



  1.今回の実験でも、「JOINTEST_SELF」表を用いる。
  「JOINTEST_SELF」表には、「BOSS」列があり、直属上司の番号が登録されている。
  このページではBOSS列は使わず、平等な一人ひとりとみなして扱う。

SQL> Select NAME_NO,NAME from JOINTEST_SELF; NAME_NO NAME ---------- ---- 1 一長 2 一郎 3 二郎 4 三郎 5 四郎 6 五郎 6行が選択されました。 SQL>



  2.【重複を許す順列】
  A当番とB当番を選出する場合(兼任可)
  重複順列は、自己結合のクロス結合(直積)の結果から、
  重複を削除していったものと言える。

SQL> --結果表示のヘッダが見難くなることを避けるため、 SQL> col "A当番" FOR a6 SQL> col "B当番" FOR a6 SQL> col "当番A" FOR a6 SQL> col "当番B" FOR a6 SQL> SQL> --SQLここから SQL> Select T1.NAME A当番,T2.NAME B当番 2 FROM JOINTEST_SELF T1, 3 JOINTEST_SELF T2; A当番 B当番 ------ ------ 一長 一長 一長 一郎 一長 二郎 一長 三郎 一長 四郎 一長 五郎 一郎 一長 一郎 一郎 一郎 二郎 一郎 三郎 一郎 四郎 一郎 五郎 二郎 一長 二郎 一郎 二郎 二郎 二郎 三郎 二郎 四郎 二郎 五郎 三郎 一長 三郎 一郎 三郎 二郎 三郎 三郎 三郎 四郎 三郎 五郎 四郎 一長 四郎 一郎 四郎 二郎 四郎 三郎 四郎 四郎 四郎 五郎 五郎 一長 五郎 一郎 五郎 二郎 五郎 三郎 五郎 四郎 五郎 五郎 36行が選択されました。 SQL>



  3.【重複しない順列】
  A当番とB当番を選出する場合(兼任不可)
  順列も、自己結合のクロス結合(直積)の結果から、
  重複を削除していったものと言える。

SQL> --結果表示のヘッダが見難くなることを避けるため、 SQL> col "A当番" FOR a6 SQL> col "B当番" FOR a6 SQL> col "当番A" FOR a6 SQL> col "当番B" FOR a6 SQL> SQL> --SQLここから SQL> Select T1.NAME A当番,T2.NAME B当番 2 FROM JOINTEST_SELF T1, 3 JOINTEST_SELF T2 4 WHERE T1.NAME_NO <> T2.NAME_NO; A当番 B当番 ------ ------ 一長 一郎 一長 二郎 一長 三郎 一長 四郎 一長 五郎 一郎 一長 一郎 二郎 一郎 三郎 一郎 四郎 一郎 五郎 二郎 一長 二郎 一郎 二郎 三郎 二郎 四郎 二郎 五郎 三郎 一長 三郎 一郎 三郎 二郎 三郎 四郎 三郎 五郎 四郎 一長 四郎 一郎 四郎 二郎 四郎 三郎 四郎 五郎 五郎 一長 五郎 一郎 五郎 二郎 五郎 三郎 五郎 四郎 30行が選択されました。 SQL>



  4.【組み合せ】
  二人組の当番を選出する場合
  組み合わせも、自己結合のクロス結合(直積)の結果から、
  重複を削除していったものと言える。

SQL> --結果表示のヘッダが見難くなることを避けるため、 SQL> col "A当番" FOR a6 SQL> col "B当番" FOR a6 SQL> col "当番A" FOR a6 SQL> col "当番B" FOR a6 SQL> SQL> --SQLここから SQL> Select T1.NAME 当番A,T2.NAME 当番B 2 FROM JOINTEST_SELF T1, 3 JOINTEST_SELF T2 4 WHERE T1.NAME_NO > T2.NAME_NO 5 ORDER BY T1.NAME_NO; 当番A 当番B ------ ------ 一郎 一長 二郎 一郎 二郎 一長 三郎 一長 三郎 一郎 三郎 二郎 四郎 一長 四郎 二郎 四郎 三郎 四郎 一郎 五郎 一郎 五郎 二郎 五郎 三郎 五郎 四郎 五郎 一長 15行が選択されました。 SQL>





    【PR】    Oracle実験室監修  『Oracleアーキテクチャ鳥瞰図』 PDF  (Oracleのアーキテクチャを一目で俯瞰できるイラスト)  


Home実験室 − No.0070

© 2011-2011   Amateur Laboratory of ORACLE
inserted by FC2 system