Kurs
Wenn du in einer datengetriebenen Branche arbeitest, hast du garantiert schon von Datenbanken gehört. Ein sehr verbreiteter Weg, auf in einer Datenbank gespeicherte Daten zuzugreifen, ist SQL. In diesem Artikel erfährst du mehr über SQL. Statt jedoch direkt mit Syntax und Begriffen einzusteigen, schauen wir uns zuerst ein paar grundlegende Konzepte der Informatik an, die uns helfen, die Frage zu beantworten: Ist SQL eine Programmiersprache?
Was ist SQL?
Starten wir mit der Definition einer Datenbank. Kurz gesagt ist eine Datenbank ein Speichersystem für strukturierte Daten. Zusätzlich dient ein Datenbankmanagementsystem (DBMS) als Schnittstelle zwischen der Datenbank und ihren Endnutzerinnen und Endnutzern bzw. Programmen. Mehr zu diesem Zusammenspiel lernst du im Database Design Kurs von DataCamp.
Der gebräuchlichste Typ eines DBMS ist ein relationales Datenbankmanagementsystem (RDBMS), in dem wir strukturierte Daten speichern, also Daten mit Beziehungen zwischen Entitäten und Variablen. Diese Entitäten und Variablen sind als Tabellensammlung mit Spalten und Zeilen organisiert.
Die Daten in einem RDBMS werden in einem Datenbankobjekt namens Tabelle gespeichert. Eine Datenbank enthält häufig mehrere Tabellen. Jede Tabelle hat einen eindeutigen Namen und umfasst zusammengehörige Datensätze in Zeilen und Spalten. Die Spalten einer Tabelle heißen Felder und enthalten Werte zu einer bestimmten Eigenschaft der Tabelle. Jede Zeile in einer Tabelle ist ein Datensatz.
SQL, ausgesprochen „S-Q-L“ oder „Sequel“, steht für Structured Query Language. SQL wird in der Programmierung eingesetzt und ist dafür ausgelegt, Daten in einem RDBMS mittels SQL-Abfragen zu verwalten.
Eine Abfrage ist im Kern eine Anweisung aus verschiedenen SQL-Befehlen, die gemeinsam eine konkrete Aufgabe ausführen: Daten abrufen, verwalten, ändern, aktualisieren, steuern und organisieren. Diese Definition klingt sehr nach einem „Computerprogramm“. Heißt das, SQL ist eine Programmiersprache?
Was genau eine Programmiersprache ist, klären wir im nächsten Abschnitt.
Was ist eine Programmiersprache?
Eine Programmiersprache besteht aus einem vordefinierten Vokabular und Grammatikregeln. Mit dieser Sprache lassen sich Computer oder andere Rechner anweisen, bestimmte Aufgaben auszuführen.
Es gibt viele verschiedene Programmiersprachen mit jeweils eigenen Merkmalen und Einsatzzwecken. Grob lassen sie sich jedoch in zwei Gruppen einteilen: Low-Level- und High-Level-Sprachen.
Programmiersprachen, die näher an Maschinencode oder Binärdarstellung (1 und 0) liegen, nennt man Low-Level-Sprachen.
Low-Level-Sprachen sind für Menschen oft schwer lesbar, weil sie Anweisungen so strukturieren, wie die Maschine „denkt“. Trotzdem sind sie verständlicher als reine 1en und 0en.
Warum also Low-Level-Sprachen verwenden? Weil sie schnell sind! Und weil sie Programmierenden sehr präzise Kontrolle darüber geben, wie die Hardware arbeitet.
High-Level-Sprachen sind dagegen näher an der menschlichen Kommunikation. Ihre Anweisungen nutzen Wörter, die unseren Alltagssprachen ähneln, wodurch sie sich leichter programmieren und warten lassen. Der Nachteil: Es dauert länger, sie in Maschinencode zu übersetzen.
Da Computer jedoch immer leistungsfähiger werden, liegt der Performanceunterschied zwischen Low-Level- und High-Level-Sprachen heute oft nur im Millisekundenbereich. Deshalb suchen die meisten Jobs in der Programmierung nach Kompetenzen in High-Level-Sprachen.
Was bedeutet Turing-Vollständigkeit?
Um die Leistungsfähigkeit einer Programmiersprache zu messen, nutzen Informatikerinnen und Informatiker oft das Konzept der Turing-Vollständigkeit. Es geht zurück auf Alan Turing, der 1936 die Turing-Maschine vorschlug. Sie wurde zur Grundlage für Theorien über Berechnung und Computer.
Die Turing-Maschine war ein Gerät, das Symbole auf Papierstreifen druckte und damit eine Person nachahmte, die logischen Anweisungen folgt.
Programmiersprachen sind formale Regelsysteme, die auf Daten zugreifen und diese verändern. Können diese Regeln Turings hypothetische Rechenmaschine simulieren, spricht man von „Turing-vollständig“. Ein Turing-vollständiges System kann nachweislich jede berechenbare Aufgabe lösen.
Wir empfehlen sehr dieses Video von Computerphile, um mehr über Turing-Maschinen und die Folgevideos zum Konzept der Turing-Vollständigkeit zu erfahren.
Allgemeine Programmiersprache vs. domänenspezifische Sprache
SQL hat einen festen Satz an Schlüsselwörtern und folgt einer strikten Syntax. Um mit dem Programmieren in SQL zu starten, schau dir den Introduction to SQL Kurs von DataCamp an. Wir beginnen mit dem Auswählen und Filtern von Datensätzen und Feldern und gehen dann zu Aggregatfunktionen, Sortierung und Gruppierung über.
Nach der Definition einer Programmiersprache als Vokabular plus spezifischer Syntax qualifiziert sich SQL eindeutig als Programmiersprache. Allerdings ist es keine General Purpose Language (GPL), sondern eine Domain-Specific Language (DSL).
Eine domänenspezifische Sprache ist eine Computersprache, die speziell dafür entwickelt wurde, Probleme in einem bestimmten Bereich zu lösen, und nicht dafür gedacht ist, Probleme außerhalb dieser Domäne abzudecken.
Sie werden mit klaren Zielen in Design und Implementierung entwickelt. SQL wurde beispielsweise gezielt für die Arbeit mit Datenbanken geschaffen, um Datenbanken abzufragen und mit den darin gespeicherten Daten zu arbeiten. Eine komplette Anwendung kannst du nicht ausschließlich mit SQL bauen.
Ein weiteres Beispiel für eine DSL sind Cascading Style Sheets – kurz CSS –, die zum Gestalten von HTML auf Websites verwendet werden.
DSLs stehen im Gegensatz zu General Purpose Languages (GPL), die breit über Domänen hinweg einsetzbar sind. Sie sind so konzipiert, dass du damit beliebige Programme mit beliebiger Logik schreiben kannst.
Mit einer GPL kannst du alle Arten von Anwendungen entwickeln – Desktop, Mobile oder Web. Zu den am weitesten verbreiteten GPLs zählen Python, C++, Ruby, Java und JavaScript.
Grob gesagt sind DSLs weniger mächtig als GPLs. Das hat jedoch einen Vorteil: Aufgrund ihres engeren Einsatzbereichs ist SQL im Vergleich zu vielen allgemeinen Programmiersprachen relativ leicht zu lernen.
Wir empfehlen dir den SQL Fundamentals Lernpfad von DataCamp, der dich in 5 Kursen und nur 21 Stunden vom Einsteiger zum SQL-Profi bringt.
Also: Ist SQL eine Programmiersprache?
Wie besprochen, ist Turing-Vollständigkeit ein Maß für die Leistungsfähigkeit einer Programmiersprache. Je mächtiger eine Sprache, desto komplexere Berechnungen kann sie durchführen. Mit der Einführung von Common Table Expressions (CTEs) und Window Functions in SQL können wir rekursive und hierarchische Berechnungen durchführen. Das macht SQL noch leistungsfähiger und qualifiziert es als turing-vollständig.
Es dauerte jedoch lange, bis der SQL-Standard Funktionen für hierarchische und rekursive Abfragen enthielt. Daher erfüllen einige ältere, traditionelle RDBMS diese Turing-Vollständigkeit möglicherweise nicht.
Wir haben auch den Unterschied zwischen einer allgemeinen und einer domänenspezifischen Programmiersprache erläutert. Wenn Menschen „Programmiersprache“ sagen, meinen sie oft „allgemeine Programmiersprache“ – was zu Verwirrung führen kann.
Nach der sauberen Definition gilt also: SQL ist eine domänenspezifische Programmiersprache, die turing-vollständig ist. Damit ist SQL eine Programmiersprache.
Wenn du die Grundlagen von SQL bereits beherrschst und mit Window Functions den nächsten Schritt machen möchtest, schau dir den interaktiven DataCamp-Kurs PostgreSQl Summary Stats and Window Functions an. Du lernst, wie du mit Window Functions Abfragen für Analytics- und Data-Engineering-Zwecke erstellst – die geheime Superkraft von SQL!
Die verschiedenen SQL-Dialekte
Du hast vielleicht von unterschiedlichen Arten bzw. Dialekten von SQL gehört: T-SQL, PostgreSQL, MySQL usw. Aber was genau sind diese Varianten und warum gibt es sie? Werfen wir einen kurzen Blick in die Geschichte von SQL.
Der britische Informatiker Edgar Frank Codd, damals bei IBM, veröffentlichte 1970 das Papier „A Relational Model of Data for Large Shared Data Banks“. Darin entwickelte er das relationale Modell für die Datenbankverwaltung, das bis heute die theoretische Grundlage für relationale Datenbanken und RDBMS bildet.
In der Folge wurden in den späten 1980ern Anstrengungen unternommen, einen offiziellen SQL-Standard zu schaffen.
SQL wurde 1986 zum Standard des American National Standards Institute (ANSI) und 1987 der International Organization for Standardization (ISO). Der SQL-Standard wurde seit den 1980ern mehrfach überarbeitet, wobei die Kernfunktionen des Standard-SQL seit 1992 stabil sind.
Dennoch entstanden immer neue Varianten, da Datenbankhersteller in verschiedenen Unternehmen neue Probleme lösen oder bestehende, vom Standard nicht adressierte Probleme umgehen mussten. Das erklärt, warum mehrere SQL-Dialekte entstanden sind und bis heute koexistieren.
Heute gibt es nur eine SQL-Sprache, aber die verschiedenen Datenbankmanagementsysteme haben den ursprünglichen Standard erweitert, um eigene Funktionen hinzuzufügen oder die Syntax an ihre Funktionsweise anzupassen. So entstand eine Vielzahl an SQL-Dialekten.
Mehr zu diesen Dialekten findest du in unserem Blogartikel mit dem passenden Titel „SQL Server, PostgreSQL, MySQL ... was sind die Unterschiede? Wo starte ich?“
Mit welchem SQL-Dialekt anfangen?
Wir empfehlen dir, mit PostgreSQL zu starten.
PostgreSQL ist ein leistungsstarkes, quelloffenes, objektrelationales Datenbanksystem, das die SQL-Sprache nutzt und erweitert. Es bringt zudem verschiedene Funktionen mit, um selbst komplexeste Daten-Workloads sicher zu speichern und zu skalieren.
PostgreSQL liegt dem Standard-SQL sehr nahe und ist ein weit verbreiteter Dialekt. Wenn du mit PostgreSQL startest, hast du das flexibelste Werkzeug, um später auf andere SQL-Dialekte zu wechseln und deine Kompetenzen auf andere RDBMS zu übertragen.
Der DataCamp-Kurs Functions for Manipulating Data in PostgreSQL ist ein hervorragender interaktiver Kurs auf mittlerem Niveau, der dich auf den richtigen Weg bringt.
SQL und prozedurale Sprachen
Wir wissen nun: SQL ist keine allgemeine Programmiersprache. In Kombination mit prozeduralen Sprachen lassen sich jedoch Verhaltensweisen nachbilden, die an GPLs erinnern. So wird es technisch möglich, SQL auch außerhalb der eigentlichen Domäne einzusetzen.
Prozedurale Sprachen sind Programmiersprachen, die gezielt mit Funktionen, Verzweigungen und Variablen arbeiten, um Programme zu schreiben, die von Computern verstanden werden und ein bestimmtes Ergebnis berechnen.
Alle Datenbankmanagementsysteme unterstützen einen oder mehrere Dialekte prozeduraler Sprachen. Beispiele sind:
Procedural Language for SQL (PL/SQL)
Eine von Oracle entwickelte Erweiterung für SQL. Ähnlich wie allgemeine Programmiersprachen erlaubt PL/SQL Bedingungen und Schleifen. Mit PL/SQL kannst du außerdem Konstanten, Variablen, Variablentypen, Trigger, Prozeduren und Funktionen deklarieren.
Procedural Language/PostgreSQL (PL/pgSQL)
Eine prozedurale Sprache, die vom Open-Source-Objektrelationalen Datenbanksystem PostgreSQL unterstützt wird. Sie ähnelt Oracles PL/SQL stark und umfasst Elemente wie Schleifen und Bedingungen. Sie erlaubt benutzerdefinierte Funktionen, und Operatoren können vererbt werden.
Transact-SQL (T-SQL)
Eine Programmerweiterung von Sybase und Microsoft, die die Deklaration lokaler Variablen ermöglicht. Zudem wurden die traditionellen DELETE- und UPDATE-Anweisungen des SQL-Standards angepasst. Enthalten sind Transaktionssteuerung sowie Ausnahme- und Fehlerbehandlung. T-SQL wird in Microsoft SQL Server eingesetzt, einer weit verbreiteten Datenbank.
Mit solchen Erweiterungen kann SQL ähnlich wie eine GPL agieren – und wird zu einer noch mächtigeren und wichtigeren Kompetenz!
Starte mit SQL.
Hoffentlich konnten wir dir zeigen, dass SQL nicht „nur“ eine Programmiersprache ist, sondern eine mächtige Programmiersprache, mit der du das Maximum aus deinen Daten herausholst!
Datacamp ist eine hervorragende Plattform, um Data Science und Analytics online zu lernen. Wir haben zahlreiche hochwertige Onlinekurse, mit denen du SQL und seine Besonderheiten verstehst.
Unser Introduction to SQL Server ist ein solcher interaktiver Kurs. Du kannst dein Wissen direkt testen und Selbstvertrauen aufbauen, indem du das Gelernte praktisch anwendest. Du arbeitest mit einer Digital-Media-Datenbank, analysierst die Verkäufe verschiedener Artists und Tracks, mit Eurovision-Datensätzen sowie Trends bei Stromausfällen in den USA – und lernst so unterschiedliche Datentypen und Szenarien kennen.
Viel Erfolg beim Lernen!
