Was sind Mengenoperatoren (Set operators)?
Mit den Operatoren union, intersect und minus können Sie mehrere Tabellen zu einer einzigen kombinieren.
Wenn Sie Tabellen kombinieren, möchten Sie oft alle Zeilen sehen. Einschließlich der Duplikate. Nicht die Liste der eindeutigen Werte. Wie macht man das?
Mit UNION ALL. Wenn ich nur UNION verwende, ist da ein implizites Distinct.
select colour, shape from my_brick_collection
union all
select colour, shape from your_brick_collection;
Was macht der MINUS-Operator?
Der Oracle MINUS-Operator wird verwendet, um alle Zeilen der ersten SELECT-Anweisung zurückzugeben, die von der zweiten SELECT-Anweisung nicht zurückgegeben werden. Jede SELECT-Anweisung definiert ein Dataset. Der MINUS-Operator ruft alle Datensätze aus dem ersten Dataset ab und entfernt dann aus den Ergebnissen alle Datensätze aus dem zweiten Dataset.
select colour, shape from your_brick_collection
minus
select colour, shape from my_brick_collection;
Hinweis: Aber es gibt noch einen weiteren feinen Unterschied. Wie bei Union wird auch bei Minus ein Unterschied in der Ausgabe gemacht. In meiner Sammlung gibt es zwei grüne Pyramiden, die in deiner nicht vorkommen. Minus gibt aber nur eine von ihnen zurück: in Oracle 21c gibt es deswegen MINUS ALL.
Was macht INTERSECT?
Der Oracle INTERSECT-Operator wird verwendet, um die Ergebnisse von 2 oder mehr SELECT-Anweisungen zurückzugeben. Er gibt jedoch nur die von allen Abfragen oder Datensätzen ausgewählten Zeilen zurück. Wenn ein Datensatz in einer Abfrage vorhanden ist und in der anderen nicht, wird er in den INTERSECT-Ergebnissen nicht berücksichtigt.
select colour, shape from your_brick_collection
intersect
select colour, shape from my_brick_collection;
Symmetrische Differenz: Vergleich von zwei Tabellen, wobei eine Liste aller Werte zurückgegeben wird, die nur in einer Tabelle vorhanden sind.
Was ist der Nachteil bei der MINUS und UNION Methode?
Ablauf:
Problem:
select * from
( select colour, shape from your_brick_collection
minus
select colour, shape from my_brick_collection )
union all
( select colour, shape from my_brick_collection
minus
select colour, shape from your_brick_collection );
Symmetrische Differenz: Version mit GROUP BY
select colour, shape, sum ( your_bricks ), sum ( my_bricks )
from (
select colour, shape, 1 your_bricks, 0 my_bricks from your_brick_collection
union all
select colour, shape, 0 your_bricks, 1 my_bricks from my_brick_collection )
group by colour, shape
having sum ( your_bricks ) <> sum ( my_bricks );
Was kann man mit hierarchischen Abfragen machen?
Was kann man mit hierarchischen Abfragen machen?
Was kann ich mit MERGE machen? Was sind die Vorteile?
Wenn Sie einen Datensatz speichern, möchten Sie ihn manchmal der Datenbank hinzufügen (INSERT), wenn er noch nicht existiert. Wenn er jedoch vorhanden ist, sollten Sie stattdessen die vorhandenen Werte aktualisieren (UPDATE). Sie benötigen also eine Aktualisierungs- oder Einfügeoperation. Zum Glück gibt es eine Anweisung, die das alles kann: MERGE.
Die MERGE-Anweisung wurde in Oracle 9i eingeführt, um Daten abhängig von ihrem Vorhandensein bedingt einzufügen oder zu aktualisieren, ein Vorgang, der auch als “Upsert” bezeichnet wird. Die MERGE-Anweisung reduziert die Anzahl der Tabellenscans und kann die Operation bei Bedarf parallel durchführen.
Wenn zwei oder mehr Personen gleichzeitig Zeilen in derselben Tabelle lesen und schreiben, können Sie inkonsistente Ergebnisse erhalten. Welche Phänomene können auftreten?
Wie können die drei Phänomene der Lese-Inkonsistenzen in Oracle überwunden werden?
Keines der drei Lesephänomene ist mit serializable möglich. Sie verwenden dies in Oracle Database, um Konsistenz auf Transaktionsebene zu erreichen.
Sie können nur die Änderungen sehen, die zum Zeitpunkt des Starts Ihrer Transaktion in der Datenbank vorgenommen wurden. Alle Änderungen, die von anderen Transaktionen nach diesem Zeitpunkt vorgenommen werden, sind für Ihre Transaktion nicht sichtbar.
set transaction isolation level serializable;