![]() |
Datenbank: MS Access • Zugriff über: mit MS Access
Sinn und Zweck von Any??
hallo,
ich wollte mal Fragen wozu Any nun genau nützlich ist. In meinen Augen ist Any ja das selbe wie All oder irre ich mich da etwa? Nehmen wir als Beispiel mal folgendes.
SQL-Code:
Worauf genau bezieht sich bitte das Any? Es steht ja schließlich für irgendeiner. Also würde sozusagen ANY irgentein Wert von Gehalt nehmen wo das Kriterium "abtnr'Kon1'" ist und dieses mit allen anderen Vergleichen. Dann wäre das ja reiner Zufall.
SELECT Name,Gehalt
FROM Mitarb WHERE Gehalt > ANY( SELECT Gehalt FROM Mitarb WHERE abtnr'Kon1'); Schön dank schon mal für eure Hilfe. LG JumpFrog |
Re: Sinn und Zweck von Any??
Aus der Online-Hilfe von Access
Zitat:
|
Re: Sinn und Zweck von Any??
Außerdem siehe
![]() |
Re: Sinn und Zweck von Any??
Du könntest alternativ, um zum gleichen Ergebnis zu kommen, in der Unterabfrage auch immer das kleinste Gehalt als Vergleichswert selektieren (also SELECT TOP 1 Gehalt from (... where...) ORDER BY gehalt ASC) und direkt mit > vergleichen. Könnte mir sogar vorstellen, das dass performanter ist.
|
Re: Sinn und Zweck von Any??
wenn ich mein Beispiel Konkret auf die dazugehörige Datenbank anwende kommt folgendes Raus.
Von den 20 Mitarbeitern wurden 18 herrausgefiltert die 2 die nicht nicht angeziegt werden haben ein Gehalt von 1.850,50€ und 1875,00€ . Wieso bekomm ich nun von der Abfrage alle anderen auser die 2 Angezeigt? Mir bringen diese Links nicht wirklich viel... die sagen mir nur das was ich schon weiß.. aber ich will es ja auch verstehen und nicht nur auswendiglernen... :) @ Phoenix: Ja, das könnte ich tun allerdings wird das am Montag in der Klassenarbeit in der Berufsschule nicht gefragt. :) |
Re: Sinn und Zweck von Any??
Zitat:
Zitat:
Du fragst ja ab:
SQL-Code:
Also in Deutsch:
SELECT Name,Gehalt
FROM Mitarb WHERE Gehalt > ANY( SELECT Gehalt FROM Mitarb WHERE abtnr'Kon1') Liefere mir Namen und Gehalt aller Mitarbeiter deren Gehalt größer ist als irgend eines (ANY) der Gehälter eines Mitarbeiters aus der Abteilung Kon1. Das bedeutet, sobald in der Unterabfrage ein Gehalt gefunden wurde, das kleiner ist als das der abgefragten Zeile, wird diese ausgegeben. Andersrum: Für die zwei Zeilen (1850 und 1875) wurde eben KEINE Zeile in der Unterabfrage gefunden, die kleiner war. Also haben alle Mitarbeiter aus Kon1 mindestens ein Gehalt von 1.875 € |
Re: Sinn und Zweck von Any??
Nochmal zum mitschreiben.
ES wird also in der Unterabfrage ein Gehalt (sagen wir das von der Person die als erste oben steht) mit dem Gehalt der anderen (die nicht in KON1 sind) verglichen. Kommt anschließend bei Person 2 ein noch kleinerer Betrag vor wird dieser als Untergrenze angesehen. Kommt das in etwa so hin? Könnte man dafür nicht auch All nehmen? EDIT: Schon ein wenig verwirrent :) |
Re: Sinn und Zweck von Any??
Zitat:
Mal ein Beispiel: Unterabfrage liefert 1875, 1900, 1925. In der Liste der selektierten kommt nun 1900 zurück. 1900 ist nicht nicht größer als ALL (Unterabfrage), weil in der Unterabfrage ja ein 1925 drin vorkommt, was größer wäre. 1926 wäre der kleinste Wert, der bei ALL passen würde. 1900 ist aber größer als ANY (Unterabfrage), weil 1900 ja größer als irgend ein (any) Element der Unterabfrage (1875) ist. 1876 wäre der kleinste Wert, der bei ANY passen würde. |
Re: Sinn und Zweck von Any??
ahhh das macht Sinn musste es zwar ein paar mal durchlesen aber is logisch.. :)
Nur je mehr ich da jetzt drüber nachdenke desto verwirrter werden ich :) Da kommt wieder die Frage wieso gerade den kleinsten Wert? Ich begründe das jetzt einfach mit dem > :nerd: |
Re: Sinn und Zweck von Any??
Zitat:
Du kannst bei ANY ja jeden Operator nehmen. = ANY (Unterabfrage) heisst ja, dass der Wert mit irgend einem in der Unterabfrage (egal welcher) identisch übereinstimmen muss. Das ist natürlich für jeden unterschiedlichen Wert X in der Hauptabfrage ein anderer Wert in der Unterabfrage, sofern dieser überhaupt existiert. ANY > heisst eben, dass der Wert größer als irgend einer in der Unterabfrage ist. Und wie prüfst Du am einfachsten, ob viele Werte X (Hauptabfrage) größer als irgend ein Eintrag in einer anderen Liste sind? Du gehst her, und suchst Dir den kleinsten Wert aus der Liste, weil wenn Du da drüber bist, bist Du auf jeden Fall > ANY. Die Datenbank wird, sofern vorhanden, aller Wahrscheinlichkeit nach einen Index zur Suche und zum Vergleich verwenden. Je nach Größe des Index kann es also schon sehr gut sein, das für den eigentlichen Vergleich ein größerer Wert hergenommen wird. Aber für > ANY gibts halt eine untere Schranke, und die wird zwangsläufig durch den kleinsten Wert bestimmt. Bei < ANY wäre es eben der größte, bei != ANY reicht ja auch irgend ein Wert in der Unterabfrage, der anders als der Vergleichswert ist. Es kommt eben schon auf den Operator an, welcher Wert ausschlaggebend ist. Nur ein Vergleich auf einen einzelnen Wert (SELECT TOP1 value FROM ORDER BY value ASC) ist sicher schneller als der Vergleich gegen eine Menge von Werten (ANY). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz