SQL: kurze Frage zu 'IN'

Hallo !

Ich würde gerne wissen, ob ich eine „IN“ Anweisung nur in Verbindung mit einem geschachtelten SELECT ausführen kann.

Kann mir jemand das Grundschema einmal kurz erläutern ?

Vielen Dank

mfg
Alexandro

Hi!

Ich würde gerne wissen, ob ich eine „IN“ Anweisung nur in
Verbindung mit einem geschachtelten SELECT ausführen kann.

Nein

Kann mir jemand das Grundschema einmal kurz erläutern ?

„IN“ beinhaltet immer eine Werte"menge", d.b., Du kannst auch hardcodiert Werte reinschreiben („where xyz in (‚a‘,‚b‘,‚c‘)“)

Da gibt’s so einen schönen Namen für diese Abfrageform, aber der fällt mir seit der abgelegten Prüfung nimmer ein (muß also ganz wichtig gewesen sein)

Grüße,
Tomh

Moin, Tomh,

Da gibt’s so einen schönen Namen für diese Abfrageform

fällt’s Dir wieder ein, wenn Du auf Deine Visitenkarte schaust? Chrchrchrr :smile:

Ich kenne auch keinen Ausdruck dafür, aber das ist wohl eine Domäne, die da abgefragt wird.

Gruß Ralf

„IN“ beinhaltet immer eine Werte"menge", d.b., Du kannst auch
hardcodiert Werte reinschreiben („where xyz in (‚a‘,‚b‘,‚c‘)“)

Da gibt’s so einen schönen Namen für diese Abfrageform, aber
der fällt mir seit der abgelegten Prüfung nimmer ein (muß also
ganz wichtig gewesen sein)

Grüße,
Tomh

Vieen Dank !
kann man bei in nur eine Spalte auswählen ?

Nabend, Ralf!

Da gibt’s so einen schönen Namen für diese Abfrageform

fällt’s Dir wieder ein, wenn Du auf Deine Visitenkarte
schaust? Chrchrchrr :smile:

MULTI-ROW QUERY

Ich geb’s zu, ich hab nachschaun müssen …

Grüße,
Tomh

Moin, Alexandro,

kann man bei IN nur eine Spalte auswählen ?

das liegt in der Natur der Sache: IN fragt nach einer Domäne, und die kann halt nur in einer Spalte abgebildet werden.

Wenn in zwei Domaänen zu suchen ist, schreibst Du halt zwei IN-Klauseln und verknotest sie mit und oder oder. Tomh hat ein schönes Muster in seiner Visitenkarte hinterlegt :smile:

Gruß Ralf

Hi Ralf !
Vielen Dank:smile:

Aber wie versteht man in diesem Fall Domäne ? als Spalte `?

Gruß
Alexandro

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin, Alexandro,

eine Domäne ist einfach ein Wertevorrat, zB alle gültigen Postleitzahlen oder Länderkürzel oder Währungen oder wasweißichnochalles. Manchmal wird Domäne auch als Namensraum übersetzt, das heißt nichts anderes: Eine Menge als gültig vereinbarter Zeichenketten.

Ein Wertevorrat kann durch Regeln beschrieben werden (siehe die ganzen Zahlen) oder durch eine Aufzählung, dann eignet sich zur Ablage eine Tabelle in einer Datenbank.

Gruß Ralf

kann man bei in nur eine Spalte auswählen ?

Zumindest bei Oracle XE (vermutlich auch schon deutlich eher) kann man das auch mit tupeln machen:

create table one (a varchar2(10), b varchar2(10));

insert into one values ('alpha', 'beta');
insert into one values ('gamma','zeta');

select \* from one
where (a,b) in (('eins','zwei'), ('alpha','beta'), ('alpha','zeta'));
-- liefert den Datensatz ('alpha', 'beta')

Diese Form ist natürlich ein völlig anderer logischer Ausdruck als zwei Spalten in zwei separaten IN Klauseln.

Jens

[ot] SQL und Oracle
Hi Jens,

create table one (a varchar2(10), b varchar2(10));

insert into one values (‚alpha‘, ‚beta‘);
insert into one values (‚gamma‘,‚zeta‘);

select * from one
where (a,b) in ((‚eins‘,‚zwei‘), (‚alpha‘,‚beta‘),
(‚alpha‘,‚zeta‘));
– liefert den Datensatz (‚alpha‘, ‚beta‘)

wenn das nur eine andere Schreibweise für

select a,b
from one
where a = 'eins' and b = 'zwei'
 or a = 'alpha' and b = 'beta'
 or a = 'alpha' and b = 'zeta'

ist, fände ich das zwar sehr bequem, die Verwendung des Keywords IN aber als nicht angemessen.

Gruß Ralf

Hi Jens,

create table one (a varchar2(10), b varchar2(10));

insert into one values (‚alpha‘, ‚beta‘);
insert into one values (‚gamma‘,‚zeta‘);

select * from one
where (a,b) in ((‚eins‘,‚zwei‘), (‚alpha‘,‚beta‘),
(‚alpha‘,‚zeta‘));
– liefert den Datensatz (‚alpha‘, ‚beta‘)

wenn das nur eine andere Schreibweise für

select a,b
from one
where a = ‚eins‘ and b = ‚zwei‘
or a = ‚alpha‘ and b = ‚beta‘
or a = ‚alpha‘ and b = ‚zeta‘

ist,

Ja ist es, halt exakt analog zum ‚normalen‘ IN Statement, insbesondere kann auch ein Subselect verwendet werden, der dann natürlich zwei Spalten zurückliefern muss.

Jens

Hi Ralf!

> select a,b  
> from one  
> where a = 'eins' and b = 'zwei'  
> or a = 'alpha' and b = 'beta'  
> or a = 'alpha' and b = 'zeta'

Bist Du sicher, das hier keine Klammern fehlen? Bei ORs und ANDs hab ich da immer ein ziemlich mulmiges Gefühl, wenn sie nicht kräftig eingeklammert sind …

Grüße,
Tomh

Moin, Tomh,

select a,b
from one
where a = ‚eins‘ and b = ‚zwei‘
or a = ‚alpha‘ and b = ‚beta‘
or a = ‚alpha‘ and b = ‚zeta‘

Bist Du sicher, das hier keine Klammern fehlen?

Ja, AND bindet stärker als OR. Immer und überall. Das soll Dich nicht abhalten, nach Belieben zu klammern :smile:

Gruß Ralf