Oracleのシリーズ5マルチテーブルクエリ

デカルトを設定し
、以下の条件の下で生産さデカルトラリーを:

  • 省略した接続条件
  • 条件が無効である参加
  • すべてのテーブルのすべての行が相互接続されています


デカルトのセットを回避するために、WHERE効果的な接続状態で添加してもよいです。


 

Oracleは、接続された

複数のテーブルの接続クエリデータを使用します。

SELECT     TABLE1。、表2。カラム
FROM     TABLE1、table2の
 WHERE     table1.column1 = table2.column2。
  • WHERE句での接続状態を記述します。
  • 場合は、列名の前にテーブル名接頭辞を持つテーブル内の同じ列、

等価結合

の例

SELECT 
    employees.employee_id、
    employees.last_name、
    のemployees.department_id、
    departments.department_id、
    departments.location_id 
FROM 
    従業員、
    部署

    のemployees.department_id = departments.department_idを。

 

  • 接続条件AND演算子の複数


重複したカラム名を区別する

  • 複数のテーブルに同じ列を区別するために、テーブルの接頭辞を使用します。
  • 異なるテーブルに同じ列名を持つ列は、表の別名によって識別することができます。



エイリアステーブル

  • エイリアスを使用して、クエリを簡素化します。
  • 効率を向上させることができ、テーブルの接頭辞を使用します。
SELECT 
    e.employee_id、
    e.last_name、
    e.department_id、
    d.department_id、
    d.location_idを
FROM 
    従業員E、
    部門は、D 
WHERE 
    e.department_id = d.department_id。


複数のテーブルを接続します

  • N-テーブル、少なくともn-1個の接続状態を接続します。たとえば、次の3つの接続テーブル、少なくとも二つの接続条件。

非等価結合の
EMPLOYEES表の列給与は最低賃金とJOB_GRADESテーブルの最高賃金の間であるべきである

SELECT 
    e.last_name、
    e.salary、
    j.grade_level 
FROM 
    従業員E、
    job_grades J 
WHERE 
    e.salary BETWEEN j.lowest_sal  j.highest_sal。

 

内側と外側の加入します

  • エン:テーブルの同じ列の2行以上と組み合わせて、結果セットが一致していないテーブルと別のテーブルの行が含まれていません
  • 外部接続の2つのテーブルが付加戻りラインに結合条件を満足し、また、左を返す(または右)テーブル行状態で接続中に満たされず、この接続は左(または右)と呼ばれる外部結合します。句条件は、内部接続を結ぶ外側に類似しているが、リストの背面に接続されている該当する行、対応する結果表が空(NULL)が。すなわち、外部接続ライン演算子を増加させるための条件と一致しません、カッコ内のプラス記号(+)を持ちます。
  • SQLでは:1999、コネクタが結合条件を満たすデータのみを返します
  • 戻りラインに加えて、接続二つのテーブル間にさらにテーブルの行の条件を満たしていない、この接続は左(または右)と呼ばれ、左(または右)を返すように結合条件を満足する外部結合。
  • 接続時には戻りラインに加えて、2つの表は、さらに戻りライン状態で結合条件を満たして満足して二つのテーブルではありません、この接続は、完全な外部接続と呼ばれています。

 
外側には結合構文

  • 参加条件を満たしていないクエリデータを外部結合を使用します。
  • これは、外側の記号(+)に接続されています。
右外连接
 SELECT     TABLE1を。、表2。コラム
FROM     table1の、table2の
 WHERE     TABLE1。カラム+が=表2を。コラム; 
左外连接
SELECTの     TABLE1。、表2。コラム
FROM     table1の、table2の
 WHERE     TABLE1。 =表2。カラム+)。

SELECT 
    e.last_name、
    e.department_id、
    d.department_name 
FROM 
    従業員E、
    部門は、D 
WHERE 
    e.department_id(+= d.department_id。



接続以来の

SELECT 
    worker.last_name 
    ||  のために働く
    || manager.last_name
 FROM 
    従業員、
    従業員のマネージャ

    worker.manager_id = manager.employee_id。



1999文法の接続

SELECT     TABLE1。、表2。コラム
FROM     TABLE1
 [ CROSSは、表2のJOIN ]  | 
[ NATURALは、表2のJOIN ]  | 
[ (COLUMN_NAME)を使用して、表2に参加]  | 
[ 表2 JOIN 
  (table1.column_name = table2.column_name)ON ]を | 
[ LEFT | RIGHT | FULL OUTERは表2をJOIN 
  (table1.column_name = table2.column_name)ON ]

接続を作成するにはON句

 

  • 天然の結合条件は、同じ名前の接続として表示されます。
  • ON句を追加接続条件を指定することができます。
  • 接続条件は他の条件から分離されています。
  • ON句の文高く読みやすさを作ります

SELECT 
    e.employee_id、
    e.last_name、
    e.department_id、
    d.department_id、
    d.location_idを
FROM 
    従業員E 
    JOIN部門は、D ON(e.department_id = d.department_id)。


マルチテーブルを作成するための句が加入ON

SELECT 
    EMPLOYEE_ID、
    都市、
    DEPARTMENT_NAME 
FROM 
    従業員Eが
    JOIN部門は、D ON d.department_id = e.department_id
     JOIN位置LをON d.location_id = l.location_idと、









左外側の
模範的な

SELECT 
    e.last_name、
    e.department_id、
    d.department_name 
FROM 
    従業員は、E 
    LEFT  OUTERが JOIN部門は、D ON(e.department_id = d.department_id)。





外部結合右の
例を

SELECT 
    e.last_name、
    e.department_id、
    d.department_name 
FROM 
    従業員は、E 
    RIGHT  OUTERが JOIN部門は、D ON(e.department_id = d.department_id)。


完全外部結合します

SELECT 
    e.last_name、
    e.department_id、
    d.department_name 
FROM 
    従業員は、E 
    FULL  OUTERが JOIN部門は、D ON(e.department_id = d.department_id)。




おすすめ

転載: www.cnblogs.com/loaderman/p/11733202.html