Oracleテーブルは、研究ノートに参加します

テーブル型コネクタ

「SQLの最適化よりも多くの収穫、」本を見て、参加アウター、インナーが参加し、ノートを作っ:表の接続タイプを分けることができます

1.1接続内

接続:接続は、結果表にはレコードだけが参加条件を満たして備えています。ここでは例を見て、ここでは、例を挙げれ、内部結合について学ぶ2つのテーブルを作成し、その後、内部接続を照会します:

SQL>select * from t1;
id   col1
---- ----
  A    A1
  B    B1
  C    C1
  D    D1
SQL>select * from t2;
id    col2
---- ----
  A    A2
  C    B2
  D    C2
  E    D2
SQL>select * from t1,t2 where t1.id=t2.id;
id   col1 col2
---- ---- ----
 A    A1    A2
 C    C1    C2
 D    D1    D2

基準:SQLは、外部ジョイン、右ジョインをコネクタの外部で定義されていない完全な外側の外部結合左、およびコネクタ内のSQL均一と呼ばれている(+)コンプライアンス、のでSQL SQLの外側が特定できない参加、または全体SQL外部接続になってきました

オラクル(+)記号の使用法:

Oracleの接続が左右(+)、+記号は、左と右の外部結合を示しているが、右の外側左の接続を示して使用することができます

例としては、以下のSQL接続の範囲内にあります。

T1、T2法

select * from t1,t2 where t1.id = t2.id;

インナーは、上の参加方法

select * from t1 inner join t2 on t1.id = t2.id

内側のキーワードを省略することができます

select * from t1 join t2 on (t1.id=t2.id);

使用して参加する方法

select * from t1 join t2 using(id);

1.2外コネクタ

外部接続:外部接続の拡大が内部で接続され、それが外に完全に準拠してレコードを参照するだけでなく、すべての接続されているドライブのテーブルのレコードが含まれている条件を満たしていません

接続したままの状況

SQL>select * from t1;
id   col1
---- ----
  A    A1
  B    B1
  C    C1
  D    D1
SQL>select * from t2;
id    col2
---- ----
  A    A2
  C    B2
  D    C2
  E    D2
SQL>select * from t1 left join t2 on t1.id=t2.id;
id   col1 col2
---- ---- ----
 A    A1    A2
 B    B1    
 C    C1    C2
 D    D1    D2

右の接続は、今度は、テーブルT2を優先するように駆動される、完全外部ジョインすべてのチェックアウト駆動テーブルテーブルT1にT2を駆動するか、であるにかかわらず、接続状態かどうかの、構文がオン参加満杯であるかどうか、あります

接続テーブルの第二に、方法

表2.1分類接続方法

ソートマージを持つ2つのテーブル間のテーブルの接続方法は、ネストされたループは、ハッシュ結合、デカルト接続加入、参加します

  • (参加マージソート)参加ソートマージ

  • ネストされたループ結合(ネストされたループ結合)

  • ハッシュ結合(ハッシュ結合)

  • デカルトの接続(クロス・ジョイン)

接続方法の違いの表2.2特徴

(1)テーブルの数との差がアクセス

ヒントの構文はNLを強制使用します

select /*+ leading(t1) use_nl(t2)*/ * from t1,t2
where t1.id = t2.id
and t1.id in (17,19);

実行計画を見ます

SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

PLAN_TABLE_OUTPUT

SQL_ID  245z7n1cxaf3m, child number 0
-------------------------------------
SELECT /*+ leading(t1) use_nl(t2)*/ * FROM t1, t2 WHERE t1.id = t2.t1_id

Plan hash value: 1967407726

--------------------------------------------------------------------------------
-----
| Id  | Operation          | Name | Starts | E-Rows | A-Rows |   A-Time   | Buff
ers |
--------------------------------------------------------------------------------
-----
|   0 | SELECT STATEMENT   |      |      1 |        |    300 |00:00:00.25 |   29
747 |
|   1 |  NESTED LOOPS      |      |      1 |    300 |    300 |00:00:00.25 |   29
747 |
|   2 |   TABLE ACCESS FULL| T1   |      1 |    300 |    300 |00:00:00.01 |
 27 |
|*  3 |   TABLE ACCESS FULL| T2   |    300 |      1 |    300 |00:00:00.25 |   29
720 |
--------------------------------------------------------------------------------
-----

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter("T1"."ID"="T2"."T1_ID")

Note

PLAN_TABLE_OUTPUT

   - dynamic sampling used for this statement (level=2)


已选择24行。

参加ソートネスト、駆動テーブルは、0又は1をアクセスし、テーブルを駆動0又はn回アクセスされ、nはテーブルを駆動さは、多数の結果セットを返します

その後もハッシュ結合実施することができる、* /ハッシュ/ * +リーディング(T1)USE_HASH(T2)との結合、マージ結合

駆動テーブルは、0または1にアクセスされるハッシュ結合、同じテーブルが駆動されます

ソートマージ駆動テーブルが同じテーブルを駆動させ、0または1にアクセスされるジョイン

(2)接続の順序の影響を

T1は、駆動上記テーブル、今注文変更の場合と

SQL>SELECT /*+ leading(t2) use_nl(t1)*/ * FROM t1, t2 WHERE t1.id = t2.t1_id;
SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

PLAN_TABLE_OUTPUT

SQL_ID  fgw5v7y16yn4m, child number 0
-------------------------------------
SELECT /*+ leading(t2) use_nl(t1)*/ * FROM t1, t2 WHERE t1.id = t2.t1_id

Plan hash value: 4016936828

--------------------------------------------------------------------------------
-----
| Id  | Operation          | Name | Starts | E-Rows | A-Rows |   A-Time   | Buff
ers |
--------------------------------------------------------------------------------
-----
|   0 | SELECT STATEMENT   |      |      1 |        |    300 |00:00:00.30 |   70
139 |
|   1 |  NESTED LOOPS      |      |      1 |    300 |    300 |00:00:00.30 |   70
139 |
|   2 |   TABLE ACCESS FULL| T2   |      1 |   9485 |  10000 |00:00:00.01 |
119 |
|*  3 |   TABLE ACCESS FULL| T1   |  10000 |      1 |    300 |00:00:00.29 |   70
020 |
--------------------------------------------------------------------------------
-----

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter("T1"."ID"="T2"."T1_ID")

Note

PLAN_TABLE_OUTPUT

   - dynamic sampling used for this statement (level=2)


已选择24行。

接続順序テーブルNL接続は影響力のある見ることができるように、実験的には同様に、それはハッシュで見ることができ、それは影響力のある、しかし、合併、参加には影響しません参加

(3)接続テーブルを順序付けます

参加するテーブルのこれらのタイプのために、あなたが途中で設定した自動トレースと種類のプロパティを表示することができ、我々は唯一のマージ結合を描くことができますソートされ、N1を接続し、ハッシュは順不同です参加

(4)ここで、結合テーブルの失敗を

それは、限定されるものではなく、サポート「<、>」の状況、およびNLが接続されている「のような、> <」サポートされていない状態をハッシュ結合「>、<、<>、のように」接続、サポートされていない状態をマージ結合テーブルの区別は、接続のいくつかの方法の一つであります

おすすめ

転載: blog.csdn.net/u014427391/article/details/93461506