Wie die INTERSECT verwenden und AUSSER Operationen in SQL

Das UNION Betrieb erzeugt eine Ergebnistabelle alle Zeilen enthalten, die erscheinen in irgendein der Source-SQL-Tabellen. Wenn Sie nur die Zeilen, die in erscheinen alle die Quellentabellen, können Sie mit dem SCHNEIDEN Operation, die die SQL-Implementierung der relationalen Algebra der intersect Betrieb ist. SCHNEIDEN in denen Bob Turley den Dodgers in midseason gehandelt kann durch Rückkehr in die Fantasy-Welt dargestellt werden:

SELECT * FROM NATIONAL-Vorname Name CompleteGames --------- -------- ------------- Sal Maglie 11Don Newcombe9SandyKoufax 13Don Drysdale12Bob Turley 8Wählen * FROM American- FIRST_NAME LAST_NAME COMPLETE_GAMES ---------- --------- -------------- Whitey Ford 12Don Larson 10Bob Turley 8AllieReynolds14

Nur Zeilen, die in allen Quell Tabellen erscheinen erscheinen in der SCHNEIDEN Betrieb der Ergebnistabelle:

SELECT * FROM NATIONALINTERSECTSELECT * FROM AMERICAN-Vorname Name CompleteGames --------- -------- ------------- Bob Turley 8

Die Ergebnistabelle sagt Ihnen, dass Bob Turley der einzige Krug war die gleiche Anzahl von kompletten Spiele in beiden Ligen (eine ziemlich unklare Unterscheidung für alte Kugel Bob) zu werfen. Hinweis: Wie es der Fall mit UNION, INTERSECT DISTINCT erzeugt das gleiche Ergebnis wie die SCHNEIDEN Betreiber allein verwendet werden. In diesem Beispiel, mit nur einer der identischen Reihen Bob Turley zurückgegeben.

Das ALLE und ENTSPRECHEND Schlüsselwörter Funktion in einem SCHNEIDEN Betrieb die gleiche Art, wie sie in ein tun UNION Betrieb. Wenn du benutzt ALLE, Duplikate werden in der Ergebnistabelle erhalten. Wenn du benutzt ENTSPRECHEND, die durchschnittene Tabellen müssen nicht union-kompatibel zu sein, obwohl die entsprechenden Spalten passende Typen und Längen aufweisen müssen.

Hier ist, was Sie bekommen mit INTERSECT ALL:

SELECT * FROM NATIONALINTERSECT ALLSELECT * FROM AMERICAN-Vorname Name CompleteGames --------- -------- ------------- Bob Turley 8Bob Turley 8

Betrachten wir ein anderes Beispiel: Eine Gemeinde Spur der Handys von Polizisten, Feuerwehrleute, Straßenkehrer und andere Mitarbeiter der Stadt durchhält. Eine Datenbanktabelle namens PHONES enthält Daten auf allen Telefonen im aktiven Einsatz. Eine weitere Tabelle namens OUT, mit einer identischen Struktur, enthält Daten zu allen Handys, die außer Betrieb genommen wurden.

Keine Handys sollten immer in beiden Tabellen existieren. Mit einem SCHNEIDEN Betrieb können Sie testen, um zu sehen, ob eine solche unerwünschte Vervielfältigung aufgetreten ist:

SELECT * FROM PHONESINTERSECT KORRESPONDIERENDES (PhoneID) SELECT * FROM OUT -

Wenn dieser Vorgang Sie eine Ergebnistabelle alle Zeilen enthält, gibt überhaupt, wissen Sie, Sie haben ein Problem. Sie sollten jede untersuchen PhoneID Einträge, die in der Ergebnistabelle erscheinen. Das entsprechende Telefon ist entweder aktiv oder aus service- es nicht beides sein kann. Nachdem Sie das Problem erkennt, können Sie eine durchführen LÖSCHEN Betrieb auf einer der beiden Tabellen Datenbankintegrität wiederherzustellen.

Das UNION Betrieb wirkt auf zwei Quellentabellen und gibt alle Zeilen, die entweder in der Tabelle angezeigt. Das SCHNEIDEN Operation liefert alle Zeilen, die sowohl in der ersten und der zweiten Tabellen erscheinen. Im Gegensatz dazu ist das AUSSER (oder AUSSER DISTINCT) Operation liefert alle Zeilen, die in der ersten Tabelle erscheinen, aber das unterlassen Sie auch erscheinen in der zweiten Tabelle.

Zurückkommend auf die städtische Telefondatenbank Beispiel, sagen, dass eine Gruppe von Telefonen, die nun behoben wurden für Reparaturen außer Betrieb und kehrte an den Anbieter erklärt worden war und wieder in Betrieb nehmen. Die PHONES Tabelle wurde aktualisiert, um die zurück Telefone zu reflektieren, aber die zurückgegebenen Handys wurden nicht von der OUT-Tabelle entfernt, wie sie hätte sein sollen.

Sie können die Anzeige PhoneID Nummern der Telefone in der OUT-Tabelle, wobei die reaktivierte diejenigen eliminiert, indem ein AUSSER Betrieb:

SELECT * FROM OUTEXCEPT KORRESPONDIERENDES (PhoneID) SELECT * FROM PHONES-

Diese Abfrage gibt alle Zeilen in der Tabelle, deren OUT PhoneID ist in der PHONES Tabelle nicht anwesend.

Menü