2016-11-18 10 views
-1

2つのテーブルを内部結合と2つの同じ列に結合することで、同じ応答が得られます。内部結合と列結合の違い

同じカラムで実行

select N.newsno , N.newsArticleno , E.empid , E.empsal 
    from News N inner join tblEmployee E on (E.empid = N.newsno); 

を内部結合によって実行両方のテーブルの

select N.newsno , N.newsArticleno , E.empid , E.empsal 
    from News N , tblEmployee E 
    where (E.empid = N.newsno); 

出力が同じで参加。

したがって、このクエリとどのように異なる場合には、事前に 感謝を使用することができるとの違いが何であるかを私に説明してください!!! .....

+1

なぜタグが付けられたC#、java、android、php? – Imad

+1

1つは、正しい、明示的な 'JOIN'構文を使用します。他のものは古くなっている古い構文を使用しています。 –

+1

今日のヒント:常に最新の明示的な 'JOIN'構文を使用してください。書き込みが簡単(エラーなし)、読みやすく保守しやすく、必要に応じて外部結合に変換しやすくなりました! – jarlh

答えて

0

を8Iに参加するには、ちょうどwhere句を使用します:

9iので
select * from emp, dept where emp.deptno = dept.deptno; 

とアップ、あなたが

select ename, dname, emp.deptno, dept.deptno from SCOTT.EMP inner join  SCOTT.DEPT on emp.deptno = dept.deptno 
+0

Whats 8iと9i? – jarlh

+0

@jarlh Oracle verisons –

2

論理的にこれらのクエリが同一である可能性があります。

2番目のクエリは古い構文を使用します。

最初のクエリでは、1992年の標準となった構文が使用されます。 これは、INNER JOINだけでなく、LEFT JOINやFULL JOINなどの以前のそれとは異なる実装もサポートしています。まったく。

可能な限り、ANSI/ISO規格を使用することをお勧めします。

  • 間の分離、それはよりクリーンでより多くの可能性
  • をサポートしています
  • 人間が読める形式では、それは条件

とを結合入れて忘れてからあなたを守り条件やフィルタ条件

  • に参加します古い構文と同じように、すべてではないにしても大部分のプロバイダによってサポートされています。

  • +0

    また、NATURAL JOINとUNION JOIN(ただし、後者は野生では見られませんでしたが)。古いバージョンのものを削除すると言えば、Standardは1987年にISOになりましたが、なぜ古いANSIのモニカを使用しているのかわかりません! – onedaywhen

    +0

    @oneday私は意図的にNATUAL JOINとRIGHT JOINを省略しています。私はそれらを使用したくないので、私はLEFT SEMI JOINを省略しました。これはまだ一般的ではなく、AFAIKのみHQL(Hiveとその派生物)のみがサポートしています –

    0

    クエリは、逆方向に進む結合構文を列挙します。 NATURAL JOIN

    WITH N AS (SELECT newsno AS empid, newsArticleno FROM News), 
        E AS (SELECT empid, empsal FROM tblEmployee) 
    SELECT * 
        FROM N NATURAL JOIN E; 
    

    問題は、古い構文はSQL標準から削除されることはありませんし、SQLが同じクエリを表現する多くの意味的に等価な方法になってしまったあるしかし、あなたはより多くの現代版を逃しました。また、ベンダーは一般的に新しい構文を採用するのが遅いです(たとえば、SQL ServerにはまだNATURAL JOINはありません)。長い間、ユーザーは好きなコードを書く方法(たとえば、あなたは「危険な」構文の話を聞く)から進んでいくのは難しいです。現実には、慣れ親しんでいくために野生で多くのコーディングスタイルがあります。

    +0

    NATURAL JOINは、コードを大幅に簡素化するクールな構文のように思えます**しかし、ある日、列が追加または名前変更され、突然すべてのコードが「壊れて」誤った結果を返す生産シナリオを考えると、さらに、すべてのテーブルに「record_create_ts」と「record_update_ts」という列を追加すると、NATURAL JOINは役に立たなくなります。 –

    +1

    'NATURAL JOIN'は起こるのを待っているバグです。それは標準に追加されてはいけません。 –

    +0

    @ GordonLinoff:すでにこれをカバーしています。「あなたは「危険な」構文の話を聞いています。 – onedaywhen

    関連する問題