Grundbegriffe für eine Einführung in SQL (SQL-Grundbegriffe), Lektion, Seite 722363
https://www.purl.org/stefan_ram/pub/sql-grundbegriffe (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
SQL-Kurs

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.

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 

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722363 stefan_ram:722363 SQL-Grundbegriffe Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722363, slrprddef722363, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/sql-grundbegriffe