====== Allgemeiner SQL-Befehl ====== ⯇ Zurück zu [[mikeplus:dialog:menues_wd|Menüs und Werkzeuge Wasserversorgung]] \\ ⯇ Zurück zu [[mikeplus:dialog:menues_cs|Menüs und Werkzeuge Siedlungsentwässerung]] \\ //Menüpunkt: Werkzeuge > Allgemeiner SQL-Befehl \\ Handbuch: MIKE+ Model Manager User Guide, section 2.4.7: Tools Menu // ===== Einleitung ===== Mit dem Werkzeug "Allgemeiner SQL-Befehl" können Attribute aus der Datenbank abgefragt und bearbeitet werden. Die SQL-Syntax bietet zum Teil andere Möglichkeiten, als die Feldberechnung, beispielsweise können mehrere Tabellen miteinander verknüpft werden. Außerdem lassen sich die Befehle abspeichern und wieder aufrufen, sodass Sie bestimmte Arbeitsabläufe leicht wiederholen können, denn ein SQL-Befehl kann aus mehreren Einzelbefehlen bestehen. Allgemeine SQL-Befehle können auf alle Tabellen und Featureklassen in der MIKE+ Datenbank zugreifen. ===== Dialogfeld ===== {{ mikeplus:dialog:allgemeiner-sql-befehl.png?direct&400 |}} {{tablelayout?rowsHeaderSource=Auto&colwidth="116px"}} ^ Feld ^ Erklärung ^ | Ausführen | Führt den angezeigten SQL-Befehl/die angezeigten SQL-Befehle aus. Achtung, ist der Befehl erst einmal ausgeführt, können die Änderungen nicht mehr rückgängig gemacht werden! | | Laden | Öffnet eine Textdatei mit SQL-Befehlen. | | Speichern | Speichert den angezeigten SQL-Befehl/die angezeigten SQL-Befehle zur späteren Verwendung in eine Textdatei. | Sie schließen den Editor mit dem kleinen [x] rechts oben. ===== Grundlegende Beispiele ===== ==== Formatierung ==== * Da es sich bei SQL um eine Art Programmiersprache handelt, müssen Sie bei Dezimalzahlen immer den DezimalPUNKT verwenden. * Zeilenumbrüche, mehrere aufeinander folgende Leerzeichen oder die Unterscheidung zwischen Klein- und Großschreibung haben keine Auswirkung auf SQL-Befehle, sie dienen lediglich der besseren Lesbarkeit. ==== Operatoren für Zahlen ==== + Addition - Subtraktion, Negation * Multiplikation / Division ==== Wurzel – SQRT ==== UPDATE msm_Catchment SET ModelBLength = SQRT(Area) ==== Potenz – POWER ==== ''POWER( , )'' UPDATE msm_Catchment SET Area = POWER (ModelBLength,2) ==== Text kürzen – TRIM ==== ''TRIM( , )'' Aus dem soll entfernt werden. Es kann sich um ein einzelnes oder um mehrere Zeichen handeln. Wenn der Parameter fehlt, wird nach führenden bzw. abschließenden Leerzeichen gesucht. Sie wollen z. B.: das "J_" aus dem Namen entfernen. Mit dem Befehl ''TRIM'' können Sie die Enden einer Zeichenkette kürzen. UPDATE mw_pipe SET MUID = TRIM (MUID, "J_") ==== Werte aktualisieren – UPDATE ==== Alle Zeilen der Tabelle Rohre (mw_pipe) werden aktualisiert, indem die Rauigkeit (rcoeff) mit 1,15 multipliziert wird: UPDATE mw_pipe SET rcoeff = rcoeff * 1.15; ==== Bedingung – WHERE ==== In den Zeilen der Tabelle Schächte (msm_node), in denen der Durchmesser (diameter) 0,99 beträgt, wird der Durchmesser auf 1,00 gesetzt: UPDATE msm_node SET diameter = 1.0 WHERE diameter = 0.99; Leere Einträge, beispielsweise im Feld ms_Catchment.Area, werden mit ''WHERE ms_Catchment.Area IS NULL'' oder ''WHERE ms_Catchment.Area IS NOT NULL'' abgefragt. ==== Tabellenverknüpfung ==== Die Tabellenverknüpfung bezieht eine zusätzliche Tabellen mit ein. Im folgenden Beispiel werden Informationen aus der Haltungstabelle ''msm_Link'' in die Knotentabelle ''msm_Node'' geschrieben. Konktret wird ''CriticalLevel'' von ''msm_Node'' mit der Summe aus ''Invertlevel'' (Schachtsohle) + ''Diameter'' (Profildurchmesser) der abgehenden Haltung aus ''msm_Link'' befüllt: UPDATE msm_Node SET CriticalLevel = InvertLevel + (SELECT msm_Link.Diameter FROM msm_Link WHERE msm_Link.FromNodeID = msm_Node.MUID) WHERE EXISTS (SELECT * FROM msm_Link WHERE msm_Link.FromNodeID = msm_Node.MUID) Quelle: [[https://stackoverflow.com/questions/3845718/update-table-values-from-another-table-with-the-same-user-name|Stackoverflow: Update table values from another table with the same user name]] Beachten Sie auch die unten stehenden [[#weitere_anwendungsbeispiele|Weiteren Anwendungsbeispiele]]! ==== Mehrere Befehle ausführen ==== Mehrere SQL-Befehle hintereinander müssen durch Strichpunkte '';'' getrennt sein. Die Ergebnisse eines Befehls werden sofort gespeichert, das heißt ein zweiter Befehl kann bereits auf die Ergebnisse des ersten Befehls zugreifen. Die Leitung "Schieber1" wird geschlossen und die Leitung "Schieber2" wird geöffnet: UPDATE mw_Pipe SET StatusNo = 1 WHERE MUID = 'Schieber1'; UPDATE mw_Pipe SET StatusNo = 0 WHERE MUID = 'Schieber2'; ==== Elemente im Lageplan auswählen ==== Eine Auswahl mit dem SQL-Befehl ''SELECT'' ist nicht möglich. ===== Weitere Anwendungsbeispiele ===== ==== Tabellenverknüpfung – Attribute zwischen Tabellen übertragen ==== **(a)** Der folgende SQL-Befehl befüllt die Sohlhöhe von Knoten, sofern sie leer ist, basierend auf der Rohrsohle am Anfang der Haltung: UPDATE msm_Node SET InvertLevel = (SELECT msm_Link.UpLevel FROM msm_Link WHERE msm_Link.FromNodeID = msm_Node.MUID) WHERE EXISTS (SELECT * FROM msm_Link WHERE msm_Link.FromNodeID = msm_Node.MUID) AND msm_Node.InvertLevel IS NULL **(b)** Der folgende SQL Befehl schreibt in die ''Description'' der ''msm_Link'' Tabelle den Knotentyp (''TypeNo'') des Nach-Knotens (''ToNodeID''); Übernommen aus der ''msm_Node'' Tabelle. Anschließend können Sie beispielsweise Haltungen auswählen die in einem bestimmten Knotentyp enden. UPDATE msm_Link SET Description = (SELECT msm_Node.TypeNo FROM msm_Node WHERE msm_Node.MUID = msm_Link.ToNodeID) Falls je Eintrag in der ersten Tabelle mehrere Einträge in der zweiten Tabelle existieren, es sich also um eine 1:n-Verbindung handelt, ist die Übertragung nicht mehr eindeutig. **%%(c)%%** Der folgende SQL Befehl schreibt in die ''DataSource'' der ''msm_Catchment'' Tabelle die Knoten ID (''MUID'') der Einzugsgebietsverknüpfung (''NodeID''); Übernommen aus der ''msm_CatchCon'' Tabelle. UPDATE msm_Catchment SET DataSource = (SELECT msm_CatchCon.NodeID FROM msm_CatchCon WHERE msm_CatchCon.CatchID = msm_Catchment.MUID) In diesem Fall haben gewisse Einzugsgebiete mehrere Verknüpfungen zu Knoten. In diesem Fall wird der erste Eintrag aus der Quelltabelle ''msm_CatchCon'' verwendet: {{ :mikeplus:dialog:catchcon.png?400 |}} In die Zieltabelle ''msm_Catchment'' wird der erste Eintrag 'Knoten4' übernommen: {{ :mikeplus:dialog:catchment.png?250 |}} ===== Weiterführende Links ===== [[http://de.wikibooks.org/wiki/Einführung_in_SQL|Wikibooks: Einführung in SQL]]