Zurück zur Artikelliste Artikel
4 Leseminuten

Wie man einen Weihnachtsbaum in SQL zeichnet

Mit SQL können Sie alle Arten von Daten bearbeiten, von großen analytischen Abfragen bis hin zu kurzen Einzweck-Anweisungen. Aber Sie können SQL auch einfach nur zum Spaß verwenden, ohne dass geschäftliche Anforderungen Ihre Kreativität einschränken. Holen Sie also Ihre lustige Mütze heraus und singen Sie "O Christmas Tree", während wir mit einfachem SQL einige skurrile Kunstwerke erstellen.

Heute werden wir aus Spaß ein paar weihnachtliche ASCII-Kunstwerke erstellen. Ja, richtig gelesen. Ich sagte Spaß. Diese Übung hat absolut keinen geschäftlichen Nutzen. Wenn Sie Ihrem Unternehmen in irgendeiner Weise helfen wollen, außer vielleicht dadurch, dass Sie ein fröhlicher Angestellter sind, sollten Sie besser weitergehen, denn wir sind hier, um unsere SQL-Kenntnisse auf die Probe zu stellen - beim Zeichnen von Weihnachtsbäumen. Um an dieser weihnachtlichen Aktivität teilnehmen zu können, müssen Sie einige grundlegende SQL-Kenntnisse beherrschen. Hoffentlich haben Sie das Folgende gelernt:

    • Grundlegende SQL-String-Funktionen
    • CTEs
    • Rekursion

Wir werden uns auf alle drei dieser Funktionen stützen, um interessante Objekte in SQL zu erstellen.

Langweilige alte Zahlen

Bevor wir zu den lustigen Dingen kommen, müssen wir uns die Grundlagen aneignen. Zum Aufwärmen wollen wir ein paar Zahlen generieren. Es gibt viele Möglichkeiten, in SQL Zahlen zu erzeugen, die häufigste davon ist die Rekursion. Wenn Sie einem einfachen Muster folgen, können Sie eine ganze Reihe von Zahlen erzeugen.

Um einen einfachen Datensatz von 10 Zahlen zu erzeugen, können wir die folgende kurze take10 CTE schreiben:

WITH take10(list_of_numbers) AS 
(SELECT 0 FROM DUAL
  UNION ALL 
 SELECT 
  list_of_numbers+1 
  FROM take10
  WHERE list_of_numbers < 10)
SELECT * FROM take10;

Hier ist die Ergebnismenge:

list_of_numbers
0
1
2
3
4
5
6
7
8
9
10

Hinweis: Ich verwende Oracle SQL, um die Generatoren zu demonstrieren, daher die Verwendung der dualen Tabelle. Wenn Sie PostgreSQL oder MySQL verwenden, reicht eine einfache SELECT N -Klausel ohne die FROM -Klausel aus.

Einen Baum pflanzen

So, genug über Zahlen geredet - es ist Zeit für etwas Weihnachtszauber! Ich hätte gerne einen schönen Weihnachtsbaum, um meine SQL-IDE [Integrated Development Environment - Anm. d. Red.] zu schmücken und mich in dieser düsteren Jahreszeit bei Laune zu halten. Um einen Baum zu erzeugen, müssen wir die SQL-String-Funktionen nutzen, die Sie hoffentlich schon auf LearnSQL.de kennengelernt haben.

Wir konstruieren unseren Baum mit Hilfe von Pines und einer bestimmten Baumtiefe:

WITH small_tree(tree_depth,pine) AS (
  SELECT 1 tree_depth,rpad(' ',10,' ') || '*' pine
  FROM   dual
  UNION ALL
  SELECT small_tree.tree_depth +1 tree_depth,
  rpad(' ',10-small_tree.tree_depth,' ') || rpad('*',small_tree.tree_depth+1,'.') || lpad('*',small_tree.tree_depth,'.') pine
  FROM   small_tree
  where small_tree.tree_depth < 10
)
SELECT pine
FROM small_tree;

Für unsere Ergebnismenge erhalten wir diesen schönen Weihnachtsbaum:

          *
         *.*
        *...*
       *.....*
      *.......*
     *.........*
    *...........*
   *.............*
  *...............*
 *.................*

Wenn Sie Ihren Baum individuell gestalten möchten, ändern Sie einfach die Symbole, die Sie für die Tannen verwenden. Wenn wir unsere Tannen durch Sternchen ersetzen:

WITH small_tree(tree_depth,pine) AS (
  SELECT 1 tree_depth,rpad(' ',10,' ') || '.' pine
  FROM   dual
  UNION ALL
  SELECT small_tree.tree_depth +1 tree_depth,
  rpad(' ',10-small_tree.tree_depth,' ') || rpad('.',small_tree.tree_depth+1,'*') || lpad('.',small_tree.tree_depth,'*') pine
  FROM   small_tree
  where small_tree.tree_depth < 10
)
SELECT pine
FROM small_tree;

Wir erhalten einen anderen Baum:

          .
         .*.
        .***.
       .*****.
      .*******.
     .*********.
    .***********.
   .*************.
  .***************.
 .*****************.

Wenn wir in wirklich festlicher Stimmung sind, können wir einen anderen Baum erzeugen:

WITH small_tree(tree_depth,pine) AS (
  SELECT 1 tree_depth,
  rpad(' ',10,' ') || '*' 
  || rpad(' ',20,' ') || '*' 
  || rpad(' ',20,' ') || '*' 
  pine
  FROM   dual
  UNION ALL
  SELECT small_tree.tree_depth +1 tree_depth,
  rpad(' ',10-small_tree.tree_depth,' ') || rpad('*',small_tree.tree_depth+1,'.') || lpad('*',small_tree.tree_depth,'.') 
  || rpad(' ',20-small_tree.tree_depth-tree_depth,' ') || rpad('*',small_tree.tree_depth+1,'.') || lpad('*',small_tree.tree_depth,'.') 
  || rpad(' ',20-small_tree.tree_depth-tree_depth,' ') || rpad('*',small_tree.tree_depth+1,'.') || lpad('*',small_tree.tree_depth,'.') pine
  FROM   small_tree
  where small_tree.tree_depth < 10
)
SELECT pine
FROM small_tree;

Einen ganzen Wald voller Bäume:

          *                    *                    *
         *.*                  *.*                  *.*
        *...*                *...*                *...*
       *.....*              *.....*              *.....*
      *.......*            *.......*            *.......*
     *.........*          *.........*          *.........*
    *...........*        *...........*        *...........*
   *.............*      *.............*      *.............*
  *...............*    *...............*    *...............*
 *.................*  *.................*  *.................*

Aber unseren Bäumen fehlen ein paar Stümpfe! Diese Herausforderung überlasse ich Ihnen, lieber Leser. Und wenn wir schon dabei sind, können wir auch gleich ein paar schöne Sterne und Dekorationen erzeugen - seien Sie kreativ! Wenn Sie die Rekursion in SQL verwenden, sind Ihrer Fantasie keine Grenzen gesetzt. Frohe und festliche Feiertage wünscht Ihnen die Familie LearnSQL.de!