{"id":433,"date":"2018-06-09T12:28:47","date_gmt":"2018-06-09T10:28:47","guid":{"rendered":"https:\/\/sql.marcus-belz.de\/?p=433"},"modified":"2020-04-23T11:49:52","modified_gmt":"2020-04-23T09:49:52","slug":"formatierung-von-sql-statements-teil-2","status":"publish","type":"post","link":"https:\/\/sql.marcus-belz.de\/?p=433","title":{"rendered":"Formatierung von SQL Statements (Teil 2)"},"content":{"rendered":"\n<p><\/p>\n\n\n<p><a href=\"https:\/\/sql.marcus-belz.de\/?p=465\">This article in english&#8230;<\/a><\/p>\n<h2>\u00dcberblick<\/h2>\n<p>SQL und Software-Programmiersprachen folgen unterschiedlichen Paradigmen. Software wird als Folge von Einzelanweisungen erstellt. SQL hingegen ist darauf ausgelegt, viele Arbeitsschritte in einer einzigen Anweisung auszuf\u00fchren. Ein einziges SQL-Statement erstreckt sich im Gegensatz zu einer Software-Anweisung manchmal \u00fcber hunderte Zeilen.<\/p>\n<p>Integrierte Entwicklungsumgebungen wie Microsoft Visual Studio unterst\u00fctzen bei der Software-Entwicklung sehr gut mit automatischer Quellcode-Formatierung. Anders sieht es bei der Entwicklung von SQL-Artefakten im SQL Server Management Studio (SSMS) aus. SSMS unterst\u00fctzt den Entwickler nur m\u00e4\u00dfig bis gar nicht.<\/p>\n<p>Hieraus ergibt sich eine besondere Herausforderung ein gutes SQL-Statement zu schreiben.<\/p>\n<p>SQL stellt einen reichen Wortschatz zur Verf\u00fcgung. Der Kern von SQL ist jedoch die Abfrage von Daten. Daf\u00fcr steht zumindest die Abk\u00fcrzung SQL: Structured Query Language. Als Synonym hierf\u00fcr kann das SELECT Statement angesehen werden. In diesem Artikel habe ich einige Best Practice Regeln f\u00fcr die Strukturierung und Formatierung eines SELECT-Statements zusammengetragen. Nat\u00fcrlich lassen sich die hier genannten Regeln ohne weiteres auch auf ein INSERT-, UPDATE- oder DELETE-Statement anwenden, genauso aber auch auf die Schl\u00fcsselworte f\u00fcr die Ablaufsteuerung von Statements: IF\u2026ELSE, TRY\u2026CATCH, WHILE, etc.<\/p>\n<p>S\u00e4mtliche Best Practices haben gemein, dass gleichartige Elemente nach M\u00f6glichkeit linksb\u00fcndig ausgerichtet und einheitlich einzur\u00fccken sind. Durch die Einr\u00fcckung wird ein Statement strukturiert. Durch eine einheitliche Ausrichtung gleichartiger Sprachelemente erh\u00e4lt das Statement einen tabellenartigen Aufbau. Beides dient einer schnellen visuellen Erfassung und Navigation auch innerhalb komplexer Statements. Nat\u00fcrlich ist es nicht m\u00f6glich, beiden Forderungen immer zu entsprechen.<\/p>\n<p>Wenn sich alle Entwickler eines Mehrentwicklerprojektes auf eine einheitliche Notation einigen k\u00f6nnen, wird jeder Entwickler und werden vor allem neue Team-Mitglieder dieses sehr schnell sch\u00e4tzen lernen. Folgende Aspekte der Strukturierung von SQL Statements werden hier betrachtet:<\/p>\n<ul>\n<li>Einr\u00fcckung<\/li>\n<li>Grundlegende Sprachelemente<\/li>\n<li>SELECT Feldliste<\/li>\n<li>WHERE Klausel<\/li>\n<li>FROM Klausel<\/li>\n<li>GROUP BY,\u00a0HAVING,\u00a0ORDER BY Klauseln<\/li>\n<\/ul>\n<h2>Allgemeines zur Einr\u00fcckung<\/h2>\n<p>Unter dem Aspekt der Lesbarkeit und schnellen Erfassung der Kapitel ist diese einger\u00fcckte Version eines Inhaltsverzeichnisses im Vergleich zu der nachfolgenden nicht einger\u00fcckten Variante informativer und intuitiver:<\/p>\n<pre style=\"padding-left: 30px;\">1. Kapitel der ersten Ebene\n   1.1. Kapitel der zweiten Ebene\n      1.1.1. Kapitel der dritten Ebene\n      1.1.2. Kapitel der dritten Ebene\n   1.2. Kapitel der zweiten Ebene\n      1.2.1. Kapitel der dritten Ebene\n      1.2.2. Kapitel der dritten Ebene\n      1.2.3. Kapitel der dritten Ebene\n      1.2.4. Kapitel der dritten Ebene\n   1.3. Kapitel der zweiten Ebene\n      1.3.1. Kapitel der dritten Ebene\n      1.3.2. Kapitel der dritten Ebene\n      1.3.3. Kapitel der dritten Ebene\n2. Kapitel der ersten Ebene\n   2.1. Kapitel der zweiten Ebene\n      2.1.1. Kapitel der dritten Ebene\n      2.1.2. Kapitel der dritten Ebene\n   2.2. Kapitel der zweiten Ebene\n      2.2.1. Kapitel der dritten Ebene\n      2.2.2. Kapitel der dritten Ebene<\/pre>\n<p>Zum Vergleich ein Inhaltsverzeichnis ohne Einr\u00fcckung<\/p>\n<pre style=\"padding-left: 30px;\">1. Kapitel der ersten Ebene\n1.1. Kapitel der zweiten Ebene\n1.1.1. Kapitel der dritten Ebene\n1.1.2. Kapitel der dritten Ebene\n1.2. Kapitel der zweiten Ebene\n1.2.1. Kapitel der dritten Ebene\n1.2.2. Kapitel der dritten Ebene\n1.2.3. Kapitel der dritten Ebene\n1.2.4. Kapitel der dritten Ebene\n1.3. Kapitel der zweiten Ebene\n1.3.1. Kapitel der dritten Ebene\n1.3.2. Kapitel der dritten Ebene\n1.3.3. Kapitel der dritten Ebene\n2. Kapitel der ersten Ebene\n2.1. Kapitel der zweiten Ebene\n2.1.1. Kapitel der dritten Ebene\n2.1.2. Kapitel der dritten Ebene\n2.2. Kapitel der zweiten Ebene\n2.2.1. Kapitel der dritten Ebene\n2.2.2. Kapitel der dritten Ebene<\/pre>\n<p>Sicherlich lassen sich auch Inhaltsverzeichnisse finden, die unter graphischen Gesichtspunkten komplett linksb\u00fcndig ausgerichtet sind. Um die \u00dcbersichtlichkeit links ausgerichteter Inhaltsverzeichnisse zu erh\u00f6hen, werden dann allerdings auch Formatierungs-Optionen (Gro\u00df-\/Klein-Schreibung, Fett, Kursiv, \u2026) auf die Kapitel der gleichen Ebene angewendet.<\/p>\n<p>Formatierungsoptionen stehen in SSMS nicht zur Verf\u00fcgung. Daher bleibt als strukturierendes Mittel lediglich die Einr\u00fcckung.<\/p>\n<h2>Grundlegende Sprachelemente<\/h2>\n<p><a name=\"H2_01\"><\/a><\/p>\n<p>Ein SELECT-Statement besteht aus den folgenden grundlegenden Klauseln:<\/p>\n<p style=\"padding-left: 30px;\"><strong>SELECT<\/strong><br \/><strong>FROM<\/strong><br \/><strong>WHERE<\/strong><br \/><strong>GROUP BY<\/strong><br \/><strong>HAVING<\/strong><br \/><strong>ORDER BY<\/strong><\/p>\n<p>Betrachtet man die genannten Hauptelemente als Elemente der ersten Ebene w\u00e4ren die jeweils zul\u00e4ssigen Sprachelemente der zweiten Ebene gem\u00e4\u00df der Forderung aus dem vorigen Kapitel einzur\u00fccken. Daraus ergibt sich die folgende grundlegende Struktur eines SQL Statements:<\/p>\n<pre style=\"padding-left: 30px;\">SELECT\n\u00a0 \u00a0Feldliste \nFROM\n\u00a0 \u00a0Datenquellen\nWHERE\n\u00a0 \u00a0Bedingungen auf Datenquelle\nGROUP BY\n\u00a0 \u00a0Gruppierungsfelder\nHAVING\n\u00a0 \u00a0Bedingungen auf Aggregationen\nORDER BY\n\u00a0 \u00a0Sortier-Felder<\/pre>\n<p>In jedem Fall sollten die Hauptelemente eines SQL-Statements in separaten Zeilen notiert werden.<\/p>\n<p>Als Abgrenzung hierzu m\u00f6chte ich zwei Beispiele f\u00fcr Formatierungen geben, die h\u00e4ufig zu finden sind und die diese klare Strukturierung nicht ber\u00fccksichtigen. In beiden Beispielen ist der Leser des Statements dazu gezwungen das Statement zumindest in Teilen zu lesen, um zu erfassen, wo ein Hauptelement beginnt und wo er aufh\u00f6rt.<\/p>\n<h3>Linksb\u00fcndige Ausrichtung von Haupt- und Unterelementen<\/h3>\n<p>Gelegentlich findet man dass Elemente der obersten Ebene und die jeweils zul\u00e4ssigen Elemente der n\u00e4chsten Ebene gleicherma\u00dfen einger\u00fcckt sind. Zu beobachten ist das insbesondere innerhalb der FROM Klausel. Die Datenquellen (Tabellen\/Views\/CTE&#8217;s) sind genauso einger\u00fcckt wie das einleitende Schl\u00fcsselwort <strong>FROM<\/strong>:<\/p>\n<pre style=\"padding-left: 30px;\">SELECT\nFeldliste \nFROM\nTabelle1\nJOIN Tabelle2 ON [...]\nJOIN Tabelle2 ON [...]\nWHERE\nBedingungen auf Datenquelle\nGROUP BY\nGruppierungsfelder\nHAVING\nBedingungen auf Aggregationen\nORDER BY\nSortier-Felder<\/pre>\n<h3>Rechtsb\u00fcndige Ausrichtung von Schl\u00fcsselw\u00f6rtern<\/h3>\n<p>In diesem Beispiel sind die grundlegenden Klauseln des <strong>SELECT<\/strong> Statements \u2013 ohne Ber\u00fccksichtigung des Schl\u00fcsselwortes <strong>BY<\/strong> \u2013 rechtsb\u00fcndig ausgerichtet. Durch diese Art der Einr\u00fcckung entsteht zus\u00e4tzlich ein erh\u00f6hter Aufwand f\u00fcr die Ausrichtung der Elemente, da man mit unterschiedlich starken Einr\u00fcckungen arbeiten muss.<\/p>\n<pre style=\"padding-left: 40px;\">SELECT Feld1, Feld2, Feld3\n  FROM Tabelle1\n  LEFT JOIN Tabelle2 ON [...]\n  LEFT JOIN Tabelle2 ON [...]\n WHERE Bedingung1\n    OR Bedingung2\n    OR Bedingung3\n GROUP BY Gruppierungsfelder\nHAVING Bedingung1\n    OR Bedingung2\n    OR Bedingung3\n ORDER BY Sortier-Felder\n WHERE Klausel<\/pre>\n<h2>SELECT Feldliste<\/h2>\n<p><a name=\"H2_02\"><\/a><\/p>\n<p>Die nat\u00fcrliche Leserichtung (eines SQL-Statements) ist von links nach rechts und von oben nach unten. Mit Blick auf die Navigationsm\u00f6glichkeiten mit Tastatur und der Maus erscheint die vertikale Navigation um einiges leichter als die horizontale Navigation. Das Mausrad und die <strong>Bild auf<\/strong>\/<strong>Bild ab<\/strong>\u00a0\u00a0\u00a0\u00a0 Tasten erm\u00f6glichen eine schnelle vertikale Navigation auch innerhalb langer komplexer Statements, wenn Feldlisten untereinandergeschrieben werden.<\/p>\n<p>Feldnamen sollten daher als vertikale Liste mit vorangestellten Kommas geschrieben werden (s. a. <strong>Formatierung von SQL-Statements (Teil 1)<\/strong>; Abschnitt <strong>Das Komma<\/strong>). Je Zeile ist nur ein Feld zu notieren. Da die Feldliste dem Schl\u00fcsselwort <strong>SELECT<\/strong> logisch untergeordnet ist, sind die Feldnamen entsprechend der vereinbarten Einr\u00fcckungsweite einzur\u00fccken.<\/p>\n<pre style=\"padding-left: 70px;\">SELECT\n \u00a0 \u00a0Feldl1\n\u00a0 \u00a0,Feldl2\n\u00a0 \u00a0,Feldl3\nFROM [...]\u00a0 \u00a0\nWHERE\u00a0[...]\nGROUP BY\n \u00a0 \u00a0Feldl1 \u00a0 \u00a0\n   ,Feldl2\n\u00a0 \u00a0,Feldl3 \nHAVING [...]\nORDER BY [...]\n \u00a0 \u00a0Feldl1 \u00a0 \u00a0\n   ,Feldl2\n\u00a0 \u00a0,Feldl3<\/pre>\n<h2>WHERE-Klausel<\/h2>\n<p><a name=\"H2_03\"><\/a><\/p>\n<p>Die <strong>WHERE<\/strong>-Klausel sei an dieser Stelle entgegen der Abfolge der Hauptelemente eines <strong>SELECT<\/strong>-Statements als n\u00e4chstes erl\u00e4utert, da die hier aufgestellten Forderungen gleicherma\u00dfen auf die <strong>FROM<\/strong>&#8211; und die <strong>HAVING<\/strong>-Klauseln anwendbar sind. Eine <strong>WHERE<\/strong>-Klausel enth\u00e4lt einen oder mehrere Constraints, die durch logische Operatoren verkn\u00fcpft sind. Bei der Formatierung von Constraints in der WHERE Klausel sind zwei Punkte besonders zu ber\u00fccksichtigen.<\/p>\n<ul>\n<li>Ausrichtung von Operanden<\/li>\n<li>Einr\u00fcckung gleichwertiger Constraints<\/li>\n<\/ul>\n<h3>Ausrichtung von Operanden<\/h3>\n<p>Ein einfacher Constraint besteht normalerweise aus zwei Operanden und einem Operator: (<strong>=<\/strong>, <strong>!=<\/strong>, <strong>&lt;&gt;<\/strong>, <strong>IN, NOT IN<\/strong>, etc. In einem komplexen Constraint, der aus mehreren einzelnen Constraints zusammengesetzt ist, sind die Operanden und Operatoren jeweils linksb\u00fcndig untereinander auszurichten. In dem folgenden Beispiel sind die Feldnamen unterschiedlich lang und es werden unterschiedliche Operatoren angewendet:<\/p>\n<pre style=\"padding-left: 40px;\">[...]\nWHERE\n \u00a0 \u00a0\u00a0\u00a0\u00a0T01.[Feld___1]\u00a0\u00a0\u00a0 =\u00a0 'Irgendwas'\n \u00a0 AND T01.[Feld__2]\u00a0\u00a0\u00a0\u00a0 &lt;&gt; 1\n \u00a0 AND T01.[Feld_____3]\u00a0 NOT IN (1, 2, 3)\n\u00a0\u00a0 AND T01.[Feld4]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = T02.[Feld5]<\/pre>\n<p>Hieraus ergibt sich eine tabellenartige Notation der Constraints, die dem Leser eine schnelle und sichere visuelle Navigation innerhalb der Bestandteile der Constraints erlaubt.<\/p>\n<h3>Einr\u00fcckung gleichwertiger Constraints<\/h3>\n<p>Enth\u00e4lt die WHERE Klausel mehr als einen Constraints , sind diese mit einem logischen Operator, wie zum Beispiel dem <strong>UND<\/strong> oder <strong>ODER<\/strong> zu verkn\u00fcpfen. Bei komplexen Constraints kann auch die Verwendung von Klammern erforderlich sein, um die Auswertungsreihenfolge der einzelnen Ausdr\u00fccke festzulegen. Je nach Komplexit\u00e4t des Gesamtausdrucks sind die einzelnen Ausdr\u00fccke bisweilen stark verschachtelt.<\/p>\n<p>Um komplexe und verschachtelte Ausdr\u00fccke besser lesen zu k\u00f6nnen, sollte der Strukturierung und Formatierung einer WHERE Klausel besondere Aufmerksamkeit gewidmet werden: Gleichwertige Constraints sollten untereinander mit gleicher Einr\u00fcckung notiert werden. Eine logische Verkn\u00fcpfung von gleichwertigen Constraints wird mit einer Einr\u00fcckung notiert, die der Verarbeitungsreihenfolge der Constraints entspricht.<\/p>\n<pre style=\"padding-left: 30px;\">[...]\nWHERE    (\n          (\n                [Operand01] = [Operand02]\n             OR [Operand03] = [Operand05]\n             OR [Operand05] = [Operand06]\n          )\n      AND (\n      \u00a0 \u00a0       [Operand07] = [Operand08]\n             OR [Operand09] = [Operand10]\n          )\n      AND [Operand11] = [Operand12] \n   )\nOR (\n      [Operand13] = [Operand14]\n   )<\/pre>\n<p>Die logischen Verkn\u00fcpfungen von Teilausdr\u00fccken k\u00f6nnen bei entsprechender Einr\u00fcckung in lesbarer Form pr\u00e4sentiert werden. Ein Screenshot der gleichen WHERE Klausel in Notepad++ mag die Begr\u00fcndung hierf\u00fcr einleuchtender erscheinen lassen, da die Klammern bzw. die jeweilige Einr\u00fcckung \u00fcber vertikale Hilfslinien im Abstand der Tabulatorweite nachvollziehbarer sind:<\/p>\n<p style=\"padding-left: 30px;\"><a href=\"https:\/\/sql.marcus-belz.de\/wp-content\/uploads\/2018\/06\/post00090001.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-454\" src=\"https:\/\/sql.marcus-belz.de\/wp-content\/uploads\/2018\/06\/post00090001.png\" alt=\"\" width=\"455\" height=\"351\" srcset=\"https:\/\/sql.marcus-belz.de\/wp-content\/uploads\/2018\/06\/post00090001.png 455w, https:\/\/sql.marcus-belz.de\/wp-content\/uploads\/2018\/06\/post00090001-300x231.png 300w\" sizes=\"auto, (max-width: 455px) 100vw, 455px\" \/><\/a><\/p>\n<h2>FROM Klausel<\/h2>\n<p>Folgen wir dem Dogma des strukturierten Aufbaus eines SQL-Statements, sind auch die untergeordneten Elemente der <strong>FROM<\/strong> Klausel einger\u00fcckt zu notieren. In der Regel handelt es sich hier um die Angabe von Datenquellen, also Tabellen, Views und Common Table Expressions.<\/p>\n<p><strong>Anmerkung zu Sub-SELECTS<\/strong><\/p>\n<p style=\"padding-left: 40px;\">Sub-SELECT-Statements sollten in einer FROM Klausel vermieden werden. Sub-SELECTS machen ein SQL Statement unleserlich und k\u00f6nnen viel \u00fcbersichtlicher als Common Table Expressions (CTE) notiert und damit auch mehrfach innerhalb eines SQL Statements verwendet werden.<\/p>\n<p>Damit ist bei der Festlegung einer Formatierungsanweisung auf die Bestandteile der <strong>JOIN<\/strong>-Statements abzustellen:<\/p>\n<ul>\n<li>Tabelle<\/li>\n<li>JOIN Operator<\/li>\n<li>ON Schl\u00fcsselwort<\/li>\n<li>JOIN Constraints<\/li>\n<\/ul>\n<p>In dem folgenden Codebeispiel hat der Leser keinen visuellen Anker f\u00fcr die Identifikation der Elemente der FROM-Klausel:<\/p>\n<pre style=\"padding-left: 30px;\"><strong>FROM<\/strong>\nTabelle1 T01\nJOIN Tabelle2 T02\nON T01.[FK] = T02.[ID]\nJOIN Tabelle3 T030 ON\nT02.[FK] = T03.[ID]\nJOIN Tabelle4 T04\nON\u00a0T03.[FK] = T04.[ID]\n<strong>WHERE<\/strong>\n[...]<\/pre>\n<p>Die m\u00f6glichen Elemente der <strong>FROM<\/strong> Klausel geh\u00f6ren nach meiner Auffassung der Lesbarkeit wegen in separate Zeilen. Als Ausnahme hiervon sollten herangejointe Tabellen direkt hinter dem JOIN Operator stehen. Das <strong>Schl\u00fcsselwort ON<\/strong> steht linksb\u00fcndig zu dem <strong>JOIN Operator<\/strong> in der folgenden Zeile. F\u00fcr die <strong>JOIN Constraints<\/strong> versuche ich die Festlegungen f\u00fcr die <strong>WHERE<\/strong>-Klausel anzuwenden.<\/p>\n<pre style=\"padding-left: 30px;\">SELECT\n   [...]\nFROM\n   Tabelle1 T01\n   JOIN Tabelle2 T02\n   ON\n     T01.[FK] = T02.[ID]\n   JOIN Tabelle3 T030\n   ON\n         T02.[FK1]   = T03.[Fk1]\n     AND T02.[Feld2] = T03.[Feld2]\n   JOIN Tabelle4 T04\n   ON\n     T03.[FK] = T04.[ID]\nWHERE\n  [...]<\/pre>\n<h2>GROUP BY,\u00a0HAVING,\u00a0ORDER BY<\/h2>\n<p><a name=\"H2_05\"><\/a><\/p>\n<p>F\u00fcr die verbleibenden Hauptelemente gelten die analoge Regeln wie sie bereit in den vorangegangenen Kapiteln beschrieben wurden.<\/p>","protected":false},"excerpt":{"rendered":"<p>This article in english&#8230; \u00dcberblick SQL und Software-Programmiersprachen folgen unterschiedlichen Paradigmen. Software wird als Folge von Einzelanweisungen erstellt. SQL hingegen ist darauf ausgelegt, viele Arbeitsschritte in einer einzigen Anweisung auszuf\u00fchren. Ein einziges SQL-Statement erstreckt sich im Gegensatz zu einer Software-Anweisung <a href=\"https:\/\/sql.marcus-belz.de\/?p=433\" class=\"read-more\">Read More &#8230;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5],"tags":[8,9,10],"class_list":["post-433","post","type-post","status-publish","format-standard","hentry","category-all-languages","category-german","tag-format","tag-naming-convention","tag-t-sql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Formatierung von SQL Statements (Teil 2) - Just another SQL blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sql.marcus-belz.de\/?p=433\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Formatierung von SQL Statements (Teil 2) - Just another SQL blog\" \/>\n<meta property=\"og:description\" content=\"This article in english&#8230; \u00dcberblick SQL und Software-Programmiersprachen folgen unterschiedlichen Paradigmen. Software wird als Folge von Einzelanweisungen erstellt. SQL hingegen ist darauf ausgelegt, viele Arbeitsschritte in einer einzigen Anweisung auszuf\u00fchren. Ein einziges SQL-Statement erstreckt sich im Gegensatz zu einer Software-Anweisung Read More ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sql.marcus-belz.de\/?p=433\" \/>\n<meta property=\"og:site_name\" content=\"Just another SQL blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-06-09T10:28:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-04-23T09:49:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sql.marcus-belz.de\/wp-content\/uploads\/2018\/06\/post00090001.png\" \/>\n<meta name=\"author\" content=\"marcus\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschrieben von\" \/>\n\t<meta name=\"twitter:data1\" content=\"marcus\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"8\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/?p=433#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/?p=433\"},\"author\":{\"name\":\"marcus\",\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/#\\\/schema\\\/person\\\/7b46a383907dc48ca44fae32ceb24744\"},\"headline\":\"Formatierung von SQL Statements (Teil 2)\",\"datePublished\":\"2018-06-09T10:28:47+00:00\",\"dateModified\":\"2020-04-23T09:49:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/?p=433\"},\"wordCount\":1280,\"image\":{\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/?p=433#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sql.marcus-belz.de\\\/wp-content\\\/uploads\\\/2018\\\/06\\\/post00090001.png\",\"keywords\":[\"Format\",\"Naming Convention\",\"T-SQL\"],\"articleSection\":[\"All Languages\",\"German\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/?p=433\",\"url\":\"https:\\\/\\\/sql.marcus-belz.de\\\/?p=433\",\"name\":\"Formatierung von SQL Statements (Teil 2) - Just another SQL blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/?p=433#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/?p=433#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sql.marcus-belz.de\\\/wp-content\\\/uploads\\\/2018\\\/06\\\/post00090001.png\",\"datePublished\":\"2018-06-09T10:28:47+00:00\",\"dateModified\":\"2020-04-23T09:49:52+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/#\\\/schema\\\/person\\\/7b46a383907dc48ca44fae32ceb24744\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/?p=433#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sql.marcus-belz.de\\\/?p=433\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/?p=433#primaryimage\",\"url\":\"https:\\\/\\\/sql.marcus-belz.de\\\/wp-content\\\/uploads\\\/2018\\\/06\\\/post00090001.png\",\"contentUrl\":\"https:\\\/\\\/sql.marcus-belz.de\\\/wp-content\\\/uploads\\\/2018\\\/06\\\/post00090001.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/?p=433#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sql.marcus-belz.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Formatierung von SQL Statements (Teil 2)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/#website\",\"url\":\"https:\\\/\\\/sql.marcus-belz.de\\\/\",\"name\":\"Just another SQL blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sql.marcus-belz.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sql.marcus-belz.de\\\/#\\\/schema\\\/person\\\/7b46a383907dc48ca44fae32ceb24744\",\"name\":\"marcus\",\"url\":\"https:\\\/\\\/sql.marcus-belz.de\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Formatierung von SQL Statements (Teil 2) - Just another SQL blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sql.marcus-belz.de\/?p=433","og_locale":"de_DE","og_type":"article","og_title":"Formatierung von SQL Statements (Teil 2) - Just another SQL blog","og_description":"This article in english&#8230; \u00dcberblick SQL und Software-Programmiersprachen folgen unterschiedlichen Paradigmen. Software wird als Folge von Einzelanweisungen erstellt. SQL hingegen ist darauf ausgelegt, viele Arbeitsschritte in einer einzigen Anweisung auszuf\u00fchren. Ein einziges SQL-Statement erstreckt sich im Gegensatz zu einer Software-Anweisung Read More ...","og_url":"https:\/\/sql.marcus-belz.de\/?p=433","og_site_name":"Just another SQL blog","article_published_time":"2018-06-09T10:28:47+00:00","article_modified_time":"2020-04-23T09:49:52+00:00","og_image":[{"url":"https:\/\/sql.marcus-belz.de\/wp-content\/uploads\/2018\/06\/post00090001.png","type":"","width":"","height":""}],"author":"marcus","twitter_card":"summary_large_image","twitter_misc":{"Geschrieben von":"marcus","Gesch\u00e4tzte Lesezeit":"8\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sql.marcus-belz.de\/?p=433#article","isPartOf":{"@id":"https:\/\/sql.marcus-belz.de\/?p=433"},"author":{"name":"marcus","@id":"https:\/\/sql.marcus-belz.de\/#\/schema\/person\/7b46a383907dc48ca44fae32ceb24744"},"headline":"Formatierung von SQL Statements (Teil 2)","datePublished":"2018-06-09T10:28:47+00:00","dateModified":"2020-04-23T09:49:52+00:00","mainEntityOfPage":{"@id":"https:\/\/sql.marcus-belz.de\/?p=433"},"wordCount":1280,"image":{"@id":"https:\/\/sql.marcus-belz.de\/?p=433#primaryimage"},"thumbnailUrl":"https:\/\/sql.marcus-belz.de\/wp-content\/uploads\/2018\/06\/post00090001.png","keywords":["Format","Naming Convention","T-SQL"],"articleSection":["All Languages","German"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/sql.marcus-belz.de\/?p=433","url":"https:\/\/sql.marcus-belz.de\/?p=433","name":"Formatierung von SQL Statements (Teil 2) - Just another SQL blog","isPartOf":{"@id":"https:\/\/sql.marcus-belz.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sql.marcus-belz.de\/?p=433#primaryimage"},"image":{"@id":"https:\/\/sql.marcus-belz.de\/?p=433#primaryimage"},"thumbnailUrl":"https:\/\/sql.marcus-belz.de\/wp-content\/uploads\/2018\/06\/post00090001.png","datePublished":"2018-06-09T10:28:47+00:00","dateModified":"2020-04-23T09:49:52+00:00","author":{"@id":"https:\/\/sql.marcus-belz.de\/#\/schema\/person\/7b46a383907dc48ca44fae32ceb24744"},"breadcrumb":{"@id":"https:\/\/sql.marcus-belz.de\/?p=433#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sql.marcus-belz.de\/?p=433"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/sql.marcus-belz.de\/?p=433#primaryimage","url":"https:\/\/sql.marcus-belz.de\/wp-content\/uploads\/2018\/06\/post00090001.png","contentUrl":"https:\/\/sql.marcus-belz.de\/wp-content\/uploads\/2018\/06\/post00090001.png"},{"@type":"BreadcrumbList","@id":"https:\/\/sql.marcus-belz.de\/?p=433#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sql.marcus-belz.de\/"},{"@type":"ListItem","position":2,"name":"Formatierung von SQL Statements (Teil 2)"}]},{"@type":"WebSite","@id":"https:\/\/sql.marcus-belz.de\/#website","url":"https:\/\/sql.marcus-belz.de\/","name":"Just another SQL blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sql.marcus-belz.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/sql.marcus-belz.de\/#\/schema\/person\/7b46a383907dc48ca44fae32ceb24744","name":"marcus","url":"https:\/\/sql.marcus-belz.de\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/sql.marcus-belz.de\/index.php?rest_route=\/wp\/v2\/posts\/433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sql.marcus-belz.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sql.marcus-belz.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sql.marcus-belz.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sql.marcus-belz.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=433"}],"version-history":[{"count":10,"href":"https:\/\/sql.marcus-belz.de\/index.php?rest_route=\/wp\/v2\/posts\/433\/revisions"}],"predecessor-version":[{"id":894,"href":"https:\/\/sql.marcus-belz.de\/index.php?rest_route=\/wp\/v2\/posts\/433\/revisions\/894"}],"wp:attachment":[{"href":"https:\/\/sql.marcus-belz.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sql.marcus-belz.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sql.marcus-belz.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}