| |

Visual-Basic EinsteigerRe: Brauche Hilfe bei einer SQL Anweisung !!!!!?!?!?!?! | |  | Autor: Backslash | Datum: 03.05.03 15:33 |
| Hi,
das könnte mit einer verschachtelten Select-Abfrage oder UnterSQL-Anweisungen möglich sein.
Auszug:
Eine Unterabfrage ist eine SELECT-Anweisung, die entweder innerhalb einer SELECT-, SELECT...INTO-, INSERT...INTO-, DELETE- oder UPDATE-Anweisung oder innerhalb einer anderen Unterabfrage verschachtelt ist.
Syntax
Eine Unterabfrage kann in drei Syntaxvarianten formuliert werden:
Vergleich [ANY | ALL | SOME] (SQLAnweisung)
Ausdruck [NOT] IN (SQLAnweisung)
[NOT] EXISTS (SQLAnweisung)
Eine Unterabfrage besteht aus folgenden Teilen:
Teil Beschreibung
Vergleich Ein Ausdruck und ein Vergleichsoperator, der den Ausdruck mit den jeweiligen Ergebnissen der Unterabfrage vergleicht.
Ausdruck Ein Ausdruck, nach dem innerhalb der Ergebnismenge der Abfrage gesucht wird.
SQLAnweisung Eine SELECT-Anweisung, die dasselbe Format hat und nach denselben Regeln aufgebaut ist wie jede andere SELECT-Anweisung. Diese Anweisung muß in runde Klammern eingeschlossen sein.
Bemerkungen
Sie können in der Feldliste einer SELECT-Anweisung oder in einem WHERE- oder HAVING-Abschnitt anstelle eines Ausdrucks eine Unterabfrage verwenden. Indem Sie in einer Unterabfrage eine SELECT-Anweisung einsetzen, stellen Sie einen oder mehrere bestimmte Werte bereit, die dann im Ausdruck des zugehörigen WHERE- oder HAVING-Abschnitts ausgewertet werden.
Verwenden Sie das Prädikat ANY oder SOME (bedeutungsgleich), wenn Sie Datensätze aus der Hauptabfrage abrufen möchten, die den Vergleich mit mindestens einem der von der Unterabfrage zurückgegebenen Datensätze erfüllen. Im folgenden Beispiel werden alle Artikel zurückgegeben, deren Einzelpreis ("Einzelpreis") höher ist als der Einzelpreis irgendeines der Artikel, die mit einem Rabatt von 25 Prozent oder mehr verkauft werden:
SELECT * FROM Artikel
WHERE Einzelpreis > ANY
(SELECT Einzelpreis FROM Bestelldetails
WHERE Rabatt >= .25);
Verwenden Sie das Prädikat ALL, wenn Sie nur die Datensätze der Hauptabfrage abrufen möchten, die den Vergleich mit allen von der Unterabfrage abgerufenen Datensätzen erfüllen. Würden Sie im vorangegangenen Beispiel ANY durch ALL ersetzen, so würde die Abfrage nur diejenigen Artikel zurückgeben, deren jeweiliger Einzelpreis höher ist als der aller (auch der teuersten) Produkte, die mit einem Rabatt von 25 Prozent oder mehr verkauft werden. Damit ist diese Abfrage deutlich restriktiver.
Mit dem Prädikat IN rufen Sie nur diejenigen Datensätze der Hauptabfrage ab, für die einige Datensätze der Unterabfrage einen gleichen Wert enthalten. Im folgenden Beispiel werden alle Artikel zurückgegeben, die mit einem Rabatt von 25 Prozent oder mehr verkauft werden:
SELECT * FROM Artikel
WHERE [Artikel-Nr] IN
(SELECT [Artikel-Nr] FROM Bestelldetails
WHERE Rabatt >= .25);
Umgekehrt können Sie NOT IN verwenden, um Datensätze der Hauptabfrage abzurufen, für die kein Datensatz der Unterabfrage einen gleichen Wert enthält.
Mit dem Prädikat EXISTS (und dem optionalen reservierten Wort NOT) in True/False-Vergleichen können Sie herausfinden, ob die jeweilige Abfrage überhaupt Datensätze zurückgibt.
Außerdem können Sie in einer Unterabfrage Alias-Bezeichnungen für Tabellennamen verwenden, um auf Tabellen zu verweisen, die in einem FROM-Abschnitt außerhalb der Unterabfrage angegeben wurden. Das folgende Beispiel liefert die Namen der Angestellten, deren Gehalt größer oder gleich dem Durchschnittsgehalt aller Angestellten ist, die dieselbe Position bekleiden. Die Tabelle "Personal" erhält die Alias-Bezeichnung "T1":
SELECT Nachname,
Vorname, Position, Gehalt
FROM Personal AS T1
WHERE Gehalt >=
(SELECT Avg(Gehalt)
FROM Personal
WHERE T1.Position = Personal.Position) Order by Position;
In diesem Beispiel ist das reservierte Wort AS optional.
Manche Unterabfragen sind in Kreuztabellenabfragen erlaubt (insbesondere als Prädikate im WHERE-Abschnitt). Unterabfragen als Ausgabe (d.h. in der SELECT-Liste angegeben) sind in Kreuztabellenabfragen nicht erlaubt.
|  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevEingabe 3.0 
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) TOP Entwickler-Paket 
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR...
Jetzt nur 979,00 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|