DevGym_03_Database_Next_Level Flashcards
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:
- Suche nach den Zeilen in Tabelle eins, die nicht in Tabelle zwei enthalten sind, mit Minus
- Suche nach den Zeilen in Tabelle zwei, die nicht in Tabelle eins enthalten sind, mit Minus
- Kombinieren der Ergebnisse dieser beiden Operationen mit union (all)
- Ich muss Klammern verwenden, da die Operatoren alle die gleiche Priorität haben
Problem:
- Es müssen alle Zeilen aus beiden Tabellen zweimal gelesen werden.
- Zweitens geben minus und intersect unterschiedliche Werte zurück. Sie sehen also nur die Werte in einer Tabelle. Nicht alle Zeilen. Wenn Sie also einen zusätzlichen roten Würfel erhalten, haben Sie einen mehr als ich. Aber die Abfragen zeigen das nicht
- Besser ist die Version mit GROUP BY
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
- Prüfen Sie, ob jede Tabelle die gleiche Anzahl von Zeilen für jeden Satz von Werten hat.
- Sie können dies tun, indem Sie die beiden Tabellen mit ein paar zusätzlichen Spalten zusammenführen. Eine für die Zählung der Zeilen der ersten Tabelle, die andere für die zweite. Wenn Sie die Werte 1 oder 0 zurückgeben, können Sie diese addieren, um die Anzahl zu erhalten.
- Um die verschiedenen Zeilen zu sehen, geben Sie in der Having-Klausel diejenigen zurück, bei denen diese Summen nicht gleich sind.
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?
- Sie können hierarchische Abfragen verwenden, um sich entlang der Eltern-Kind-Beziehungen in Ihren Daten zu bewegen. Zum Beispiel Familienstammbäume, Computerverzeichnisstrukturen und Unternehmensorganigramme.
- Das geht mit Connect By oder Recursive With
- Die Abfragen werden sehr komplex und benötigt habe ich es bisher nicht, daher habe ich das Thema nicht detaillierter gelernt.
Was kann man mit hierarchischen Abfragen machen?
- Sie können hierarchische Abfragen verwenden, um sich entlang der Eltern-Kind-Beziehungen in Ihren Daten zu bewegen. Zum Beispiel Familienstammbäume, Computerverzeichnisstrukturen und Unternehmensorganigramme.
- Das geht mit Connect By oder Recursive With
- Die Abfragen werden sehr komplex und benötigt habe ich es bisher nicht, daher habe ich das Thema nicht detaillierter gelernt.
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?
- Dirty reads: Ein Dirty Read ist, wenn Sie nicht bestätigte (commit) Zeilen in einer anderen Transaktion sehen.
- Non-repeatable (or fuzzy) reads: Ein nicht wiederholbares Lesen liegt vor, wenn die Auswahl derselben Zeile zweimal unterschiedliche Ergebnisse liefert. Dies geschieht, wenn jemand anderes die Zeile zwischen den Abfragen aktualisiert.
- Phantom reads: Dies geschieht, wenn eine andere Sitzung Zeilen einfügt oder löscht, die mit der Where-Klausel Ihrer Abfrage übereinstimmen. Wiederholte Abfragen können also unterschiedliche Zeilen zurückgeben:
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;