MySQL -Grundbegriffe
Der Name „SQL “
SQL ist eine Abfragesprache. Aussprache: „S, Q, L“ (deutsch [ʔɛs.kʰuː.'ʔɛl] oder englisch ['ɛs.kju.ˌɛl] sowie auch: “Sequel ” ['si.kwɛl] oder sogar “Squeal ” ['skwil] – diese beiden Aussprachen werden hier aber nicht empfohlen).
SQL hieß ursprünglich SEQUEL “structured-English query language ”, der Name mußte dann durch Entfernen der Vokale verkürzt werden, da SEQUEL schon ein Warenzeichen der Hawker Siddeley aircraft company war ([ˌhɑːk ɚ ˈsɪd ə li ˈɛɚ ˌkræft ˈkʌm pən i]).
„Strukturiertes“ Englisch
Das „SE“ stand in „SEQUEL “ für “structured-English ”.
„Strukturiertes Englisch“ soll dabei aussagen, daß SEQUEL -Abfragen Texten der englischen Sprache ähnlich sind, aber durch zusätzliche Regeln eingeschränkt („strukturiert“) sind (heute werden solche Sprachen auch “controlled English ” genannt). Ursprünglich war wohl daran gedacht, daß Computerbenutzer selber Abfrage in SQL eingeben. Daher sollte SQL dem normalen Englisch möglichst ähnlich sein, weil man glaubte, daß es dann leicht verständlich sei. Heute wird SQL aber meist von SQL -Spezialisten verwendet, es gibt kaum Anwender, die selber direkt SQL -Abfragen eingeben. Die meisten Anwender bedienen Programme meist über einfach verständliche Benutzeroberflächen, und die Programm verwenden dann SQL hinter den Kulissen, ohne daß der Benutzer SQL kennen muß. SQL ist heute also meist keine Sprache einfacher Computerbenutzer, sondern eine Sprache, die von Administratoren, Entwicklern und Datenbankexperten benutzt wird.
Die Bedeutung von „SQL “
Die Norm „ISO/IEC 9075“ definiert SQL („SQL:2016“). Sie besteht aus verschiedenen Teilen, wie beispielsweise “ISO/IEC 9075-1:2016: Information technology – Database languages – SQL – Part 1: Framework (SQL/Framework) ”.
Gemeinhin bezeichnen verschiedene Hersteller ihr Datenbanksysteme als „SQL -Datenbanksysteme“, und man nennt und SQL -Datenbanken „relationale Datenbanken“. Beides ist aber normalerweise nicht korrekt, da diese Datenbanksystem den SQL -Sprachstandard in der Regel nicht vollständig und korrekt implementieren und SQL darüber hinaus das für relationale Datenbanken maßgebliche relationale Model auch nicht korrekt umsetzt. Die Bezeichnungen werden trotzdem gewählt, weil diese Bezeichnungen als werbewirksam erachtet wurden. Immerhin kann man sagen, daß die „SQL -Datenbanksysteme“ sich immerhin mehr oder weniger am SQL -Sprachstandard orientieren und diesen teilweise umsetzen, genauso wie SQL selber sich am relationalen Modell orientiert und dies wenigstens teilweise umsetzt.
SQL 1992
Die Version des SQL-Standards von 1992 ist noch relativ klein und wird von vielen real-existierenden Datenbanksystemen fast vollständig umgesetzt, während neuere Sprachstandards (von 1999, 2003, 2006, 2008, 2011 oder 2016) größer sind und von vielen real-existierenden Datenbanksystemen nur teilweise umgesetzt werden.
Der erste Sprachstandard stammt von 1986, der zweite aus dem Jahre 1989. Es gibt SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003, SQL:2006, SQL:2008, SQL:2011 und SQL:2016.
Die Verwendung von SQL
Datenbanksysteme mit SQL als Abfragesprache werden heute selten direkt von einem Computerbenutzer bedient, sondern bilden meist einen Teil eines größeren Programms, das in einer Programmiersprache wie beispielsweise Java geschrieben wurde. Mit der Programmiersprache werden Aufgaben erledigt, für die SQL nicht geschaffen wurde, wie beispielsweise die Verarbeitung von Benutzereingaben über eine einfache Bedienoberfläche und die benutzergerechte Darstellung von Daten. Mit SQL alleine kann man kaum ein System aufbauen, das heutigen Ansprüchen an Systeme für Endanwender erfüllt. Einige der Aufgaben, die oft nicht mit SQL erledigt werden sind:
Prüfung von Benutzereingaben Eine Benutzereingabe wird in der Regel von einer prozeduralen Programmiersprache entgegengenommen, welche sie prüfen und dann gegebenenfalls an eine SQL-Datenbank weiterleiten kann. Daher muß die Eingabe dann nicht erneut unnötigerweise von der Datenbank geprüft werden. Die Arbeitsteilung zwischen Datenbank und prozeduralem Programm beschränkt die Aufgabengebiete beider Programme und erleichtert so deren Arbeit.
Nachfragen beim Löschkommandos Wenn ein dazu berechtigter Benutzer des Löschen eines umfangreichen Datenbestands verlangt, wird dies von einer SQL-Datenbank ohne Rückfrage erledigt, da davon ausgegangen wird, daß eventuelle Rückfragen schon von einem vorgeschalteten prozeduralen Programm erledigt wurden.
Formatierung von Ergebnissen einer Datenbankabfrage Die Formatierung von Ausgaben (etwa die Festlegung von Schriftarten und -farben) gehört nicht zur Aufgabe einer Datenbank und kann mit einem vorgeschalteten prozeduralen Programm erledigt werden.
Wiederholung ähnlicher Kommandos Das folgende SQL-Beispiel zeigt drei ähnliche Kommandos. Man interessiert sich bei der Benutzung von SQL weniger für die Frage, ob solch eine Eingabe abgekürzt werden kann, da man solche Abkürzungen bei Bedarf mit einer prozeduralen Programmiersprache erledigen kann.
- SQL-Beispiel
INSERT INTO A ( N ) VALUES ( 'C' );
INSERT INTO A ( N ) VALUES ( 'E' );
INSERT INTO A ( N ) VALUES ( 'D' );
Numerieren von Zeilen SQL soll ein relationales System sein, und die Zeilen einer Relation haben keine bestimmte Reihenfolge. Daher paßt es nicht zu einem relationalen System, wenn erwartet wird, daß Zeilen nach einem bestimmten Kritierium sortiert oder durchnumeriert werden. Insbesondere die Numerierung von Zeilen einer Tabelle ist daher eine Aufgabe die besser mit einer nicht-relationalen Programmiersprache wie Java erledigt wird (oder mit dem nicht-relationalen, „prozeduralen“ Teil von SQL ). Man sollte sich also bewußt sein, daß ein SQL -Datenbanksystem heute als Teil eines Informationssystems verstanden wird, aber in der Regel der Ergänzung durch andere Teile bedarf, die in prozeduralen Programmiersprache geschrieben werden.
- Ein Java -Programm mit eingebettetem SQL (»SELECT * FROM T;«)
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.sql.Connection connection = null;
java.sql.Statement statement = null;
java.sql.ResultSet resultSet = null;
final java.lang.String url = "jdbc:mysql://localhost:5120/s";
final java.lang.String username = "root";
final java.lang.String password = ""; /* hier password eintragen! */
try
{ connection = java.sql.DriverManager.getConnection( url, username, password );
statement = connection.createStatement();
resultSet = statement.executeQuery( "SELECT * FROM T;" );
if( resultSet.next() )java.lang.System.out.println( resultSet.getString( 1 )); }
catch( final java.sql.SQLException exception )
{ java.util.logging.Logger.getLogger( Main.class.getName() ).
log( java.util.logging.Level.SEVERE, exception.getMessage(), exception ); }
finally
{ try
{ if( resultSet != null )resultSet.close();
if( statement != null )statement.close();
if( connection != null )connection.close(); }
catch( final java.sql.SQLException exception )
{ java.util.logging.Logger.getLogger(Main.class.getName() ).
log( java.util.logging.Level.WARNING, exception.getMessage(), exception ); }}}}- Aussprachehinweis
- from frʌm > frəm
Die Wahl einer SQL-Implementation in diesem Kurs
Leider unterscheiden sich die verschiedenen SQL -Datenbanksysteme immer noch so sehr voneinander, daß es nicht möglich ist, SQL auf eine Weise zu behandeln, die von einem bestimmten Datenbanksystem unabhängig ist. Die Situation ist hier schlechter als bei einer Programmiersprache wie C, wo die verbreiteten Implementationen ein gemeinsames Minimum an Sprachbestandteilen unterstützen, in dem schon viele nützliche Programme geschrieben werden können. Somit ist SQL leider doch keine Standard -Abfragesprache, die von vielen Datenbanksystemen verschiedener Hersteller in einheitlicher Wiese unterstützt wird.
Dieser Lehrgang behandelt SQL anhand einer aktuellen Version des Datenbanksystems MySQL . Die Wahl der Datenbank ergibt sich daraus, daß bei einer Umfrage in einem SQL -Kurs des Autors die Mehrheit der anwesenden Teilnehmer MySQL für Übungen verwenden wollte und der Autor Kurse von Kollegen übernahm, die entsprechend angekündigt waren. Der Autor würde sonst selber wahrscheinlich eher PostgreSQL oder Firebird bevorzugen, da diese einen großen Teil des SQL -Standards korrekt umsetzten sollen und damit einer Implementation des SQL -Standards näher kommen als MySQL . Die Wahl von MySQL für diesen Kurs ist also nicht als eine Empfehlung zu verstehen.
Die meisten der hier gezeigten Vorgehensweisen können auch auf andere Datenbanken übertragen werden, jedoch müssen Details der SQL -Anweisungen dazu oft mehr oder weniger umgestellt werden.
SQL-Anweisungen sind Texte ⃗
SQL-Anweisungen sind immer ein Text, also eine Folge von Schriftzeichen.
Dadurch können SQL-Anweisungen in Programme anderer Programmiersprachen (wie PHP, Java oder Python ) eingebettet werden, denn in solchen Programmen sind nur Texte erlaubt.
Daher hilft es beim Erlernen von SQL nicht viel, Programme mit graphischen Benutzeroberflächen zu verwenden. Denn alle Bedienvorgänge, die man mit solchen Programmen anstellt, können nicht als Text in Programme eingebettet werden.
SQL-Anweisungen sind ausschließlich Texte, und daher ist zum Erlernen und Nutzen von SQL eine textbasierte Oberfläche am besten geeignet.
SQL ist deklarativ ⃗
SQL ist ein deklarative Sprache, das heißt, daß man mit SQL in der Regel gewünschte Tabellen beschreibt, ohne daß man dabei einzelne Schritte auflistet, die hintereinander abgearbeitet werden sollen, wie in prozeduralen Sprachen.
Deklaratives und Prozedurales SQL ⃗
Lange Zeit verstand man unter „SQL “ nur eine deklarative Sprache zum Zugriff auf Datenbanken. Inzwischen wurde SQL aber um einen imperativ-prozeduralen Teil erweitert (um Prozeduren). Obwohl Prozeduren damit offizieller Teil von SQL sind, denkt man oft nicht an sie, wenn man von SQL spricht, sie sind noch zu neu und von vielen SQL-Datenbanken noch nicht einheitlich unterstützt. Allerdings ist MySQL hier ein Ausnahme und bietet schon eine gute Unterstützung für standardgemäße Prozeduren. Trotzdem konzentriert sich dieser Kurs auf das, was man normalerweise unter „SQL “ versteht: Den deklarativen Teil von SQL.
„No SQL “ ⃗
Neben den marktbeherrschenden SQL-Datenbanken gibt es auch noch Datenbanken, die SQL nicht verwenden.
- Einige klassische Produkte, wie DBase, haben sich unabhängig von SQL entwickelt.
- Einige Datenbanken verwenden experimentelle Sprachen, um das relationale Model bewußt treuer zu implementieren als dies mit SQL möglich ist.
- Datenbanken aus der „NoSQL “-Bewegung weichen bewußt von SQL ab oder erweitern es, um Techniken einsetzen zu können, mit denen sich manche Anforderungen effizienter lösen lassen können. Da SQL aber ein bewährter Standard ist, der nur schwer noch übertroffen werden kann, sind „NoSQL “-Systeme vorwiegend für große Unternehmen mit vielen Spezialisten verwendbar, die genau wissen, wann sich die Abweichung von SQL lohnt. Oft handelt es sich auch um SQL-Datenbanken, die noch zusätzliche, von SQL abweichende Erweiterungen enthalten.
- Objektdatenbanken sollten die Verwendung von Datenbanken in objektorientierten Programmiersprachen erleichtern. Sie werden aber kaum eingesetzt.
Namen von Produkten ⃗
In einer Quelle wurden DB2, SQL Server und Oracle als „die großen drei“ bezeichnet. Andererseits ist MySQL sehr populär und SQLite sehr verbreitet (etwas auf jedem Android-Gerät vorhanden). In seiner Nische der Tischrechnerdatenbanken ist Access sicher immer noch bedeutend.
Viele Produkte unterstützen nährungsweise ANSI/ISO SQL-92 (entry level). Oft findet man jedoch einzelne Besonderheiten.
- Quellen
en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems
Das Buch “SQL: Visual QuickStart Guide ” (3rd Edition) von Chris Fehily behandelt SQL und die jeweiligen Besonderheiten von Microsoft Access 2007, Microsoft SQL Server 2008, Oracle 11g, IBM DB2 9.5, MySQL 5.1 und PostgreSQL 8.3.
- IBM
- IBM DB2 (IBM DB2 9.5 )
- Es gibt auch eine kostenlos nutzbare Version dieser Datenbank.
- Microsoft
- Microsoft Access (Microsoft Access 2007 )
- Microsoft SQL Server (Microsoft SQL Server 2016, Microsoft SQL Server 2008 )
- Oracle
- MySQL (MySQL 5.7, MySQL 5.1 )
- Oracle Database (11g , 12c ) (“flagship database ” laut einer Quelle)
- … und weitere Produkte
- Wikipedia :
„Das Oracle -Datenbankmanagementsystem kann als Express-Edition (XE) kostenlos genutzt werden. Diese Version ist jedoch stärker eingeschränkt als die kostenlose DB2 -Version, weil sie u. a. das Laden von Java -Klassen in die Datenbank selbst nicht unterstützt (der JDBC -Treiberzugriff ist jedoch möglich). Zusätzlich gibt es eine Beschränkung von 1 GiB RAM, Nutzung maximal eines CPU-Kerns sowie eine maximale Datenbankgröße von 11 GiB für Anwenderdaten. Für Studienzwecke ist die Oracle -Datenbank auf der Herstellerseite frei erhältlich.” (de.wikipedia.org/wiki/Oracle_(Datenbanksystem)) - Software AG
- Adabas (Adabas D ) [wird nicht mehr angeboten] --> SAPDB --> MaxDB
- Andere
- MariaDB (Maria DB 10.1 )
- PostgreSQL (PostgreSQL 9.6, PostgreSQL 8.3 )
- SQLite (enthalten in Python und Android )
- Java DB (Apache Derby )
- Firebird (Firebird 3 )
- Sybase
- SAP MaxDB
- klassische PC-Datenbanken, oft ohne SQL
- DBase
- Clipper (lebt 2017 als „xHarbour “ weiter)
- FoxBase
- FoxPro
- Paradox for DOS
- Paradox for Windows
- Quattro Pro for Windows
- Interbase