some, any, all

  • hi
    könnte mir bitte jemand die befehle some, any, all erklären?


    bei all kenn ich mich etwas aus und ich weiss auch, dass all die standardeinstellung ist. warum dann eigentlich hinschreiben?


    THX im vorraus

    Otto: Apes don't read philosophy. - Wanda: Yes they do, Otto, they just don't understand
    Beleidigungen sind Argumente jener, die über keine Argumente verfügen.
    «Signanz braucht keine Worte.» | «Signanz gibts nur im Traum.»


    Das neue MTB-Projekt (PO, Wiki, Mitschriften, Ausarbeitungen, Folien, ...) ist online
    http://mtb-projekt.at

  • thx, das buch hab ich! habs auch gelesen, aber zu some & any hab ich nicht viel gefunden!
    kann mir bitte wer weiterhelfen, thx


    wann benutzt man some bzw any?

    Otto: Apes don't read philosophy. - Wanda: Yes they do, Otto, they just don't understand
    Beleidigungen sind Argumente jener, die über keine Argumente verfügen.
    «Signanz braucht keine Worte.» | «Signanz gibts nur im Traum.»


    Das neue MTB-Projekt (PO, Wiki, Mitschriften, Ausarbeitungen, Folien, ...) ist online
    http://mtb-projekt.at

  • any und some sind synonym (nur deswegen "doppelt" da, weil im englischen Sprachgebrauch manchmal "any" und manchmal "some" eher passt, macht aber genau dasselbe!)


    any/some bedeutet, es gibt IRGENDEIN Element, das was erfüllt.


    Beispiel: in der Tabelle Wiener stehen alle, die in Wien gemeldet sind, in der Tab. Tiroler alle die in Tirol gemeldet sind, der Schlüssel beider Tabellen sei die SVNR (Sozialversicherungs#)
    Wenn ich jetzt alle Wiener haben will, die auch in Tirol gemeldet sind, könnte ich folgenden Query verwenden:


    select SVNR from Wiener
    where SVNR = any (select SVNR from Tiroler)


    Synomym dazu wäre auch der Query


    select SVNR from Wiener
    where SVNR in (select SVNR from Tiroler)


    Man sieht also, der any/some Quantor heißt nur, dass es IRGENDEIN Element geben muss, das die Relation (hier die '=') erfüllt, entspricht also dem mathematischen "es existiert".

  • also eigentlich vollkommen wurscht..... wenn ichs mit "in" lösen könnte dann brauch ich any net....


    was ist mit exists? kann ich das nicht auch verwenden?


    SELECT SVNR FROM Wiener
    WHERE SVNR exists (SELECT SVNR FROM Tiroler)


    geht doch auch oder?


  • nein, das geht nicht. das ist syntaktisch falsch.

    Code
    1. exists (select svnr from tiroler)


    ist entweder true oder false.
    true ist es, wenn

    Code
    1. (select svnr from tiroler)


    mindestens eine Zeile enthält;
    andernfalls ist es false.



    Code
    1. where svnr boolean-Wert


    ist natürlich syntaktisch falsch.

  • exists mit having austauschen? geht das? ich hoff ich nerv nicht allzu sehr....


    mfg, Phil.

  • having ist sowas wie ein "where" für die Gruppierung mit group by, d.h. du kannst, wenn du nach etwas groupst, noch zusätzlich mit having eine Bedingung stellen, welche Eigenschaften die Tupel haben müssen, wenn sie schon gruppiert sind, damit sie in der Ergebnisrelation aufscheinen dürfen... Du darfst in Having aber nur Gruppierungsattribute verwenden (i.e. nach denen du gruppierst), oder Aggregatfunktionen über die Nicht-Gruppierungs-Attribute


    Beispiel, worin das alles vorkommt:


    select Titel from Buch natural join Autor
    group by Titel
    having count(Nachname) > 1 and Titel like 'K%'


    Damit tätest du die Titel aller Bücher kriegen, an denen mehr als ein Autor gearbeitet hat und die mit K anfangen (wenns sowas in der websql-DB überhaupt gibt).


    Conclusion: having ist immer dann gut, wenn sowas der Art (alles, was irgendwo eine gewisse Anzahl von irgendwas zugeordnet hat)... naja, das ist zwar nicht sehr genau, but I hope you get the idea!


    nochmals zu any/some: ja, die beiden sind meistens durch "in" umgehbar, laut veith gibt es aber Fälle, wo any unumgehbar ist, nur fällt mir dazu keiner ein :)