2016-11-18 2 views
-1

Das Verbinden zweier Tabellen durch innere Verbindung und durch zwei gleiche Spalten gibt uns dieselbe Antwort.Unterschied zwischen innerer Verbindung und Column Join

von Inner Führen Sie Mitglied

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

durch gleiche Spalte tritt ausführen

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

Ausgabe beider Tabellen gleich sind.

Also mir bitte erklären, was es Unterschiede zwischen diesen Abfragen und wie es in den verschiedenen Fällen Vielen Dank im Voraus können !!! .....

+1

warum markiert C#, java, android, php? – Imad

+1

Man verwendet die korrekte, explizite 'JOIN'-Syntax. Der andere verwendet eine veraltete Syntax, die veraltet sein sollte. –

+1

Tipp von heute: Verwenden Sie immer moderne, explizite 'JOIN'-Syntax.Einfacher zu schreiben (ohne Fehler), einfacher zu lesen und zu pflegen und einfacher zu Outer Join zu konvertieren, wenn nötig! – jarlh

Antwort

0

in 8i beizutreten, benutzen Sie einfach eine where-Klausel :

select * from emp, dept where emp.deptno = dept.deptno; 

In 9i

und, konnte man

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

Was ist 8i und 9i? – jarlh

+0

@jarlh Oracle verisons –

2

Logischer sind diese Abfragen identisch.

Die zweite Abfrage verwendet alte Syntax. Die erste Abfrage verwendet eine Syntax, die 1992 zum Standard wurde. Sie unterstützt nicht nur INNER JOIN, sondern auch andere Arten von Joins wie LEFT JOIN und FULL JOIN, die zuvor von jedem Provider unterschiedlich implementiert oder nicht implementiert wurden überhaupt.

Meine Empfehlung ist die Verwendung des ANSI/ISO-Standards, wo immer Sie können.

  • Es ist menschlich lesbar
  • Es mehr Möglichkeiten unterstützt
  • Es sauberer ist, trennen Verbindung zwischen Bedingungen und Filterbedingungen
  • Es schützt Sie vor zu vergessen Bedingungen Putting beitreten

Und Genau wie die alte Syntax wird sie von der Mehrheit der Anbieter unterstützt, wenn nicht alle.

+0

Auch 'NATURAL JOIN' und' UNION JOIN' (obwohl letzteres ich nicht in der Wildnis gesehen habe). Apropos Abwerfen der älteren Version der Dinge, der Standard wurde ISO im Jahr 1987, nicht sicher, warum wir immer noch den älteren "ANSI" -Moniker verwenden! – onedaywhen

+0

@onedaywenn ich NATURAL JOIN und RIGHT JOIN absichtlich weggelassen habe, da ich sie nicht benutzen möchte :-) Ich habe auch LEFT SEMI JOIN weggelassen, da es immer noch nicht üblich ist und AFAIK nur HQL (Hive und seine Derivate) unterstützt –

0

Ihre Abfragen zählen die Joinsyntax auf, die zeitlich rückwärts geht. Allerdings verpassten Sie die modernere Version: 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; 

Das Problem ist, ältere Syntax nie aus dem SQL-Standard entfernt und SQL hat mit vielen semantisch äquivalente Ausdrucksweisen die gleiche Abfrage endete. Auch Anbieter nehmen die neue Syntax im Allgemeinen langsam an (z. B. SQL Server hat immer noch keine NATURAL JOIN); lange Zeit Benutzer finden es schwierig, von ihren bevorzugten Arten des Schreibens von Code (z. B. Sie sprechen von 'gefährlichen' Syntax) zu bewegen. Die Realität ist, gibt es zahlreiche Codierungsstile in freier Wildbahn mit sich vertraut zu machen.

+0

NATURAL JOIN scheint eine coole Syntax zu sein, die den Code erheblich vereinfacht ** ABER ** denke an ein Produktionsszenario, wo eines Tages eine Spalte hinzugefügt oder umbenannt wird und plötzlich der ganze Code "kaputt" ist und falsche Ergebnisse liefert. Darüber hinaus empfiehlt es sich, jeder Tabelle eine Spalte als "record_create_ts" und "record_update_ts" hinzuzufügen, wodurch NATURAL JOIN unbrauchbar wird. –

+1

'NATURAL JOIN' ist ein Fehler, der darauf wartet, passiert zu sein. Es * nie * hätte dem Standard hinzugefügt werden sollen. –

+0

@GordonLinoff: bereits behandelt, "du hörst von 'gefährlicher' Syntax reden" lol. – onedaywhen

Verwandte Themen