Announcement

Collapse
No announcement yet.

Wann Variablen deklarieren, wann nicht ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wann Variablen deklarieren, wann nicht ?

    Hallo zusammen,
    1)
    Das Programm unten funktioniert ohne Problem.
    Trotzdem habe ich ein paar Fragen dazu:
    Mit
    DECLARE cnt INT DEFAULT 0;
    muß ich eine Variable deklarieren. Soweit ok.
    Aber warum muß ich unten im Programm _nicht_ die Variablen
    a1, a2, a3
    deklarieren, sondern kann die einfach so verwenden ?

    2)
    Wo kann ich das nachlesen ? (Link?)

    3)
    Soll man reservierte Worte wie z.B: SELECT groß schreiben ?
    Was empfehlt ihr ?

    mfg
    Bh

    ================================================== =========
    SHOW databases;
    USE dbAtoms;

    DELIMITER $$

    DROP PROCEDURE IF EXISTS insert_atom_n $$

    CREATE PROCEDURE insert_atom_n (p_n integer)
    BEGIN
    DECLARE cnt INT DEFAULT 0;
    WHILE cnt < p_n DO
    INSERT INTO Atoms
    SELECT DISTINCT(a1.atom+a2.atom)
    FROM Atoms a1
    INNER JOIN Atoms a2 ON a1.atom != a2.atom
    WHERE NOT EXISTS (SELECT atom FROM Atoms a3 WHERE a3.atom = (a1.atom + a2.atom));
    SET cnt = cnt + 1;
    END WHILE;
    END $$
    DELIMITER ;

    DELETE FROM Atoms WHERE Atom>0;
    INSERT INTO Atoms(atom) VALUES (3);
    INSERT INTO Atoms(atom) VALUES (5);
    call insert_atom_n (5);
    SELECT * FROM Atoms;
    ================================================== =========

  • #2
    1)
    a1, a2, a3 sind keine Variablen, sondern Aliase für die Tabellen. Da gibt es nichts zu deklarieren.

    2)
    Wie gesagt, Variablen sind etwas vollkommen anderes als Aliase - zu beiden solltest du etwas in der MySQL Dokumentation finden.

    3)
    Das kannst du halten wie ein Dachdecker. Viele Editoren setzen reservierte Wörter (und manchmal auch Namen von Tabellen und Views) in Grossbuchstaben. Der Grund dafür ist vermutlich historisch bedingt. SQL wurde 1970 entwickelt, da gab es noch keine farbigen Editoren und ähnlich wie im BASIC wurde alles gross geschrieben.

    Gruss

    Comment


    • #3
      a1-a3 sind Teil des Select Statements. Sie sind (praktische) Platzhalter für den Tabellennamen, in Deinem Fall (Dein Statement) übernehmen sie eine weitere Funktion, nämlich Platzhalter für die jeweils gleiche Menge mit unterschiedlichen Selektionskriterien zu sein. Das nennt man Alias und wird sowohl für Tabellennamen (oder Views) und Feldnamen verwendet.
      Doku gibt es bei mysql für verschiedene Versionen.
      Z.B. schnell gegooglet
      https://downloads.mysql.com/docs/refman-5.1-de.a4.pdf

      Groß/Kleinschreibung ist m.E. Ansichtssache. Moderne SQL editoren beherrschen automatisches highlighting der Schlüsselwörter uvam. Kann also ruhig klein sein, Fokus dann eher auf Variabelen-, Feld, - Tabellennamen und deren Schreibweise. Z.b. Camel Case..
      Gruß, defo

      Comment


      • #4
        Originally posted by defo View Post
        a1-a3 sind Teil des Select Statements. Sie sind (praktische) Platzhalter für den Tabellennamen, in Deinem Fall (Dein Statement) übernehmen sie eine weitere Funktion, nämlich Platzhalter für die jeweils gleiche Menge mit unterschiedlichen Selektionskriterien zu sein. Das nennt man Alias und wird sowohl für Tabellennamen (oder Views) und Feldnamen verwendet.
        Doku gibt es bei mysql für verschiedene Versionen.
        Z.B. schnell gegooglet
        https://downloads.mysql.com/docs/refman-5.1-de.a4.pdf
        Danke für eure Antworten,
        1)
        In der Referenz habe ich gefunden (S. 800)
        "Das Schlüsselwort AS ist beim Zuweisen eines Alias zu select_expr optional."
        Als Anfänger würde ich geren das AS immer verwenden.
        Wie müsste ich dann meine Mysql-Anweisung im letzten Posting formulieren?
        Wo kann ich AS verwenden ? (gibt es dafür eine Regel?)

        2)
        Du schreibst :
        "a1-a3 sind Platzhalter und alias-Namen".
        Das "und" habe ich nicht verstanden.
        Wo wird das in der Referenz abgehandelt?

        mfg
        Bh

        Comment


        • #5
          Originally posted by bernhart View Post
          Danke für eure Antworten,
          1)
          In der Referenz habe ich gefunden (S. 800)
          "Das Schlüsselwort AS ist beim Zuweisen eines Alias zu select_expr optional."
          Als Anfänger würde ich geren das AS immer verwenden.
          Wie müsste ich dann meine Mysql-Anweisung im letzten Posting formulieren?
          Wo kann ich AS verwenden ? (gibt es dafür eine Regel?)
          Das "AS" muss vor dem ALIAS stehen, also dem, was Du irrtümlich als Variable verstanden hast.
          Soweit mir bekannt ist das bei Tabellennamen, Viewnamen, Feldnamen (Spalten) und Expressions möglich, also "berechneten" Ausdrücken, die Formeln, Konkatenierung usw. verwenden. Im letzten Fall ist es naheliegent, dass eine auf diese Art erzeugte Spalte im Select Statement per se erstmal keinen Namen hat. Die Engines der DB bilden dann selbst einen solchen Namen für die Ausgabe und verwenden dafür den Ausdruck selbst. Das Ergebnis ist meist hässlich und mehr oder weniger kryptisch.
          Es ist gute Praxis das 'AS' immer zu verwenden, da so ein verschludertes Komma in der Feldliste weniger Unheil anrichtet.
          Probier es einfach aus, wo Du es einsetzen kannst, ist nicht so schwer.

          Originally posted by bernhart View Post
          2)
          Du schreibst :
          "a1-a3 sind Platzhalter und alias-Namen".
          Das "und" habe ich nicht verstanden.
          Wo wird das in der Referenz abgehandelt?
          Das war eine blöde Formulierung, weil ich schon 2 Einsatzmöglichkeiten irgendwie im Kopf hatte. Vergiß den "Platzhalter".
          Der Alias ist praktische Abkürzung für lange Tabellennamen, Differenzierungsmöglichkeit für mehrfach verwendete Tabellen und namengebend für Ausdrücke.
          Der Einsatz ist m.E. ziemlich intuitiv, obwohl sich Feld- und Table Aliase naturgemäß in der Nutzung etwas unterscheiden.

          Ich empfehle Dir, mal ein oder mehr Anfänger Tutorial für SQL durchzuarbeiten. Wo Du was in der Referenz findest geht mir als Frage ehrlich zu weit. Ich empfehle das Inhaltsverzeichnis, STRNG F und gezielte Internet Recherche.
          Mit den entsprechenden Suchworten findest Du mit Sicherheit auch speziell ein Tutorial für ALIAS.
          Die müssen auch gar nicht mySQL spezifisch sein, da vieles im Bereich SQL standardisiert ist.

          Apropos: Noch eine Empfehlung für Deine "verrückten" Demoprogramme. Schau Dir mal PostgreSQL an. Es ist m.E. robuster und leistungsfähiger, sowohl was die SQL Funktion angeht, als auch die Programmierbarkeit. Im Zweifel ist es auch kostenloser als mySQL.
          Gruß, defo

          Comment

          Working...
          X