Oracleデータベース - マルチテーブルクエリ&サブクエリ共同

マルチテーブル共同問い合わせ

あなたが共同問い合わせの使用を考慮して、複数に分散したデータを取得する必要があります
1、SQL92モード
2を、SQL99の道

SQL92の道

1、デカルト積:データテーブルの複数が1に一つである、マルチテーブルのデカルト積について得られた結果。
  すべてのテーブルの数の積の結果の数。
  * EMP SELECT、部門から 
2、同等の接続フィルタの
  概念:最初のテーブル直積、その後同等の条件をスクリーニングしてスクリーニングします。
  注:条件同じ名前のフィールドの値フィールドについてスクリーニングすることが異なる場合があります
  クエリの従業員の名前、職種、給与、部門名が
  EMPから選択*、EMP.DEPTNO DEPT = DEPT.DEPTNOは、
    select句のフィールドに直接使用することができます直接データへのアクセスが、効率は比較的低いです。提案されたフィールドの前にテーブル名を持つ
    注:フィールドが公開されている場合は、テーブル名を宣言しなければならない
    選択ENAME、仕事、サル、DNAME EMPから、EMP.DEPTNO = dept.deptno-- DEPT 同等の接続はフィルタリング
    、選択EMP.ENAMEをEMP.DEPTNOがDEPT.DEPTNO = emp.job、emp.sal、dept.dname、EMP、部門からEMP.DEPTNO
    EMP E、D部門からSELECT e.ename、e.job、e.sal、d.dnameをe.deptno = d.deptnoとSAL> 2000--別名使用してテーブルに
3を、等価結合ではない
  クエリの従業員の名前、職種、給与、賃金水準を
  * SELECT、WHERE e.sal SALGRADE S> = s.losalとe.sal <= s.hisalからEのEMP
4、以降の接続は(自分自身デカルト積を行うには)
  、クエリ、従業員の名前、職種、給与、および上司名前
  SELECT e1.ename、e1.job、e1.sal、E1からe2.ename EMP、E2 EMP e1.mgr = e2.empno
5、外部接続。
  左外部結合:右のアドオンは、該当するフィールド値を残っていませんデータ
    照会従業員名、作業、給与、部門名、従業員情報でないセクタない
    EMP E、DEPT D SELECT * FROMここe.deptno = d.deptno(+)
  右外側の接続:値なしに対応する表示領域の右側に、左側に追加データ
    クエリの従業員の名前、職種、給与、部門名なしスタッフ情報部門
    選択* EMP eから、DEPT Dどこe.deptno(+)= d.deptno

SQL99の道

注1:まだテーブルエイリアスに追加される
(注2)の結果をuseringまたはフィルター上のキーは、接続テーブルを使用する必要があり、内側は、アクションテーブルを内側場所を省略することができる参加場合
注3:外部接続をキーワードに省略されてもよいです書いてはいけません
、まだグループ化を使用し続けることができ、持つ、ソート:注4
1を、デカルト積:使用してクロスキーワード加入
  テーブルクロスから選択したコンテンツに参加
  DEPT参加EMPのクロスから選択*
2、スクリーニング
  クエリ従業員名を、仕事、給料を、部署名
  1)天然接続:キーワード天然の結合を使用
    テーブルからの選択コンテンツ天然テーブル名の参加は:使用を
    1特徴:最初のデカルト積の基礎をなす、そして自動的にフィールドの値を持つ同じ名前の全てに従ってスクリーニングした輪郭。
    質問1:あなたが行う方法の結果に応じていくつかのフィールドをフィルタリングする場合は?
    質問2:あなたは別のフィールド名をフォローしたい場合は、しかし、等化を行う方法をスクリーニング同じ値はありますか?
    EMP天然にDEPT参加SELECT * FROM
    にキーワードを使用して:1を解決する
      アクション1:関節問い合わせ実施等価スクリーニングの結果に指定されたフィールドことを示す
      指示フィールドは、2つの値のフィールドを持つテーブルと同じ名前でなければならない:注
      使用:から選択したコンテンツをテーブルには、(フィールド名、フィールド名を、...)を使用して、テーブル名をインナーに参加します
      インナーEMPから選択*は、使用してDEPT参加 (DEPTNOを)
    2を解決するために:使用するフィルタへのカスタム接続基準に関するキーワード(スクリーニング同等のスクリーニングは、同じではありません)
      注:フィルタ普通のフィルターは、行為には使用しないでください。利点:SQL文の可読性が強くなります。
      用途:内部表から選択したコンテンツは、通常のフィルタが接続条件にテーブル名を参加
      インナーEMPからSELECT *はEMP.DEPTNO = DEPT.DEPTNOにDEPTに参加ところSAL> 2000
  2)外部結合:
    左外部結合:テーブルから選択したコンテンツ参加条件にテーブルを外側の左に参加した
      クエリの従業員の名前、職種、給与、部門名なし部署の従業員情報
      のemp eから選択*外側の左に参加 e.deptno = d.deptnoにDEPT Dを
    右外部結合:から選択したコンテンツを右の外側のテーブルには、条件の参加にテーブルを結合する
      クエリの従業員の名前、職種、給与、部門名なし部署の従業員情報
      を選択* EMP Eから右外部結合 e.deptno = d.deptnoにDEPT Dを
    選択したコンテンツを:完全外部結合しますテーブル完全外部からの参加条件にテーブルを結合します
      * SELECT外ONから完全EのEMPは、DEPT D = d.deptno参加e.deptno
  3)自己結合:
    クエリ従業員とその上司の名前を
    。E1 *を選択し、EMPからe2.ename E1インナーEMP e2の上e1.mgr =に参加e2.empno

3つのテーブル共同問い合わせ

SQL92は達成します

特長:読み、書きやすい困難な
欠点を:SQL文の構造92は明らかではない
使用方法:
  SELECTコンテンツ(別名、コネクタ、重複排除、Oracleの機能、論理演算)
  表1から、表2、表3 ...
  WHERE条件(接続状態、通常のフィルタ条件、where句のキーワード)
  グループグループフィールドによって
  スクリーニングマルチライン機能を有する
  ソートフィールドによってオーダー
クエリー従業員情報と部門の名前、街の名前と2000年を上回る賃金やボーナス持って
  選択Eを*、d.dname、c.cname
  EMP E、D部門、シティCから
  (e.deptno = d.deptnoとd.loc = c.cidおよびSAL> 2000)または(e.deptno = d.deptno d.loc = c.cidとCOMMとNULLではない)
  e.sal順 

SQL99は達成します

機能:読みやすい、書き込みハード
使用:
  表1から選択したコンテンツ
  内に表2に加入
  接続状態に
  内側を表3に参加する
  接続条件に
  、通常、フィルタ条件
  グループによってグループ
  スクリーニングマルチライン機能を有する
  ソート順を
クエリ従業員情報と部門名や都市の名前と2,000人以上の従業員がボーナスを繰り広げるか、持っている
  EMP EからSELECT *を
  インナーDEPT dを参加
  d.deptno e.deptno = ON
  インナー市C入会
  ON d.loc = c.cid
  e.sal> 2000 e.commはnullまたはされていない
  e.sal順

サブクエリ

ときにそれを使用するには:クエリフィルタ条件が明確でない場合は、サブクエリを使用することを検討してください。
1、単一行のサブクエリ
2、複数行サブクエリ

単一行副問合せ

それを使用するとき:クエリを実行するための明確な必要性なしにスクリーニング、およびクエリ結果は、フィールドの値と、一つだけです
注意:句は、クエリを許可した場合、クエリはサブクエリと呼ばれる
使用:テーブルからフィールド名を選択し、コンテンツ比較演算子サブクエリ
  「CLARK」高賃金の従業員情報のすべての従業員以外の問合せは
  、EMPから選択*どこSAL>( ENAME =「CLARK」EMPから選択SAL)
  クエリ名の平均賃金よりも賃金が高いと給与従業員が
  選択ENAME、SAL> EMPからSAL (EMPからAVG(SAL)を選択)
  クエリとsoctt同じ部門に所属し、彼の従業員データは、より低い賃金
  EMPからDEPTNO = *選択( ENAMEは、 'SCOTTを' = EMPからDEPTNOを選択) そして、はSAL <(EMPから選択SAL ENAME = 'SCOTT')
  同じクエリ機能のとスコットは、以前の従業員情報を雇っ
  ここで、ジョブ=(EMP SELECT * FROM EMPから選択したジョブどこENAME = 'SCOTT')とHIREDATE <( EMPから雇用開始日を選択する場所ENAME = ' SCOTT')

複数行のサブクエリ

使用:副問合せの結果だけで一つのフィールドが、フィールドには持っているのnの値は、キーワードを使用して、実際には、複数行サブクエリを使用することを検討して
キーワード1:任意に
    表から選択したコンテンツをどこ任意のサブクエリ比較演算子フィールド名
キーワード2:すべてのすべて
    のテーブルからの選択コンテンツフィールド名比較演算子のすべてのサブクエリ
キーワード3:任意の表現の存在下で、任意の同等= 
    テーブルのフィールド名サブクエリで選択したコンテンツ  
    テーブルからの選択内容どこのフィールド名ではないサブクエリで  
  クエリの賃金が高い、すべての従業員情報のCLERKのいずれよりも
  SAL>すべてのEMPから選択* (EMP仕事=「CLERK」から選択SAL)
  すべての従業員情報よりも高いクエリのセールスマンの賃金
  選択* EMPからSAL>すべて(選択 SAL EMPからジョブ=「SALESMAN」)
  情報の10人の従業員の同じ部署で同じ従業員の作業でクエリ部門20
  WHERE DEPTNO = 10 EMPからジョブを選択
  SELECT * EMPからWHERE仕事ジョブを選択(中DEPTNO = 10 EMP)とから DEPTNO = 20
  ジョブ=任意(EMPからここDEPTNO = 10ジョブを選択)EMP SELECT * FROMとDEPTNO = 20

おすすめ

転載: www.cnblogs.com/sunny-sml/p/11980388.html