SQL: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „= SQL Kompaktskript = == Einführung in SQL == SQL (Structured Query Language) ist eine Sprache zur Verwaltung und Abfrage relationaler Datenbanken. Sie wird…“)
 
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
= SQL Kompaktskript =
+
=Grundkonzepte relationaler Datenbanken=
  
== Einführung in SQL ==
+
==Was ist eine Datenbank?==
SQL (Structured Query Language) ist eine Sprache zur Verwaltung und Abfrage relationaler Datenbanken. Sie wird genutzt, um Daten zu speichern, zu bearbeiten und abzufragen. SQL basiert auf relationalen Konzepten, in denen Daten in Tabellen organisiert sind.
+
*Eine Datenbank ist ein strukturiertes System zur Speicherung, Organisation und Verwaltung von Daten, das speziell für den zuverlässigen Zugriff auf große Datenmengen konzipiert wurde.
 +
*Im Gegensatz zu einfachen Dateien oder Tabellenkalkulationen gewährleisten Datenbanken Konsistenz, Integrität und gleichzeitigen Zugriff durch mehrere Benutzer.
 +
*Daten werden zentral verwaltet und lassen sich effizient durchsuchen, filtern und bearbeiten, auch bei komplexen Datenbeziehungen.
 +
*Relationale Datenbanken speichern Informationen in Tabellenform und ermöglichen durch strukturierte Abfragen (z. B. in SQL) gezielte Analysen und Auswertungen.
 +
*Ein Datenbanksystem (DBMS) wie MariaDB oder PostgreSQL verwaltet die Datenbank, regelt Zugriffsrechte, sorgt für Datensicherheit und stellt Mechanismen für Sicherung, Wiederherstellung und Transaktionen bereit.
  
SQL besteht aus verschiedenen Kategorien von Befehlen:
+
==Was ist eine Tabelle?==
* DDL (Data Definition Language) – Definition von Datenbankstrukturen, z. B. CREATE, ALTER, DROP.
+
*Eine Tabelle ist die grundlegende Struktur innerhalb einer relationalen Datenbank, in der Daten zeilenweise gespeichert werden.
* DML (Data Manipulation Language) – Bearbeitung von Daten, z. B. INSERT, UPDATE, DELETE.
+
*Sie besteht aus Spalten (auch Felder oder Attribute genannt) und Zeilen (auch Datensätze oder Tupel).
* DQL (Data Query Language) – Abfragen von Daten, z. B. SELECT.
+
*Jede Spalte definiert eine bestimmte Eigenschaft (z. B. Name, Alter, ID) mit einem festen Datentyp.
* DCL (Data Control Language) – Verwaltung von Benutzerrechten, z. B. GRANT, REVOKE.
+
*Jede Zeile repräsentiert einen vollständigen Datensatz, also eine konkrete Ausprägung aller Spaltenwerte.
* TCL (Transaction Control Language) – Verwaltung von Transaktionen, z. B. COMMIT, ROLLBACK.
+
*Tabellen haben einen eindeutigen Namen innerhalb der Datenbank und können durch Schlüssel miteinander in Beziehung gesetzt werden.
  
SQL wird in vielen relationalen Datenbanksystemen wie MySQL, PostgreSQL, SQLite und Microsoft SQL Server verwendet. Während die Grundlagen universell sind, gibt es systemabhängige Erweiterungen.
+
==Was ist eine Zeile?==
 +
*Eine Zeile – auch Datensatz oder Tupel genannt – ist ein vollständiger Eintrag in einer Tabelle.
 +
*Sie enthält genau einen Wert pro Spalte und beschreibt damit eine konkrete Entität, z. B. eine Person, ein Produkt oder einen Vorgang.
 +
*Alle Zeilen in einer Tabelle folgen dem gleichen Schema, d. h. sie besitzen dieselben Spalten.
 +
*Jede Zeile ist in der Regel durch einen Primärschlüssel eindeutig identifizierbar.
  
== Datenbankverwaltung ==
+
==Was ist eine Spalte?==
Datenbank erstellen.
+
*Eine Spalte beschreibt eine einzelne Eigenschaft der gespeicherten Daten, z. B. Vorname, Nachname oder Geburtsdatum.
* create database my_db;
+
*Sie hat einen Namen, einen Datentyp (z. B. INTEGER, VARCHAR, DATE) und gegebenenfalls weitere Einschränkungen (z. B. NOT NULL, UNIQUE).
 +
*Alle Werte einer Spalte müssen dem vorgegebenen Datentyp entsprechen.
 +
*Die Struktur und Bedeutung der Spalten wird durch das Tabellenschema vorgegeben.
  
Datenbank löschen.
+
==Was ist ein Primärschlüssel?==
* drop database my_db;
+
*Ein Primärschlüssel (Primary Key) ist eine Spalte oder Kombination mehrerer Spalten, die jeden Datensatz einer Tabelle eindeutig identifiziert.
 +
*Es darf keine zwei Zeilen mit dem gleichen Wert im Primärschlüssel geben.
 +
*Primärschlüssel sind notwendig, um Daten eindeutig zu referenzieren, etwa bei Verknüpfungen mit anderen Tabellen.
 +
*Ein Primärschlüssel ist automatisch mit einem Index versehen, der die Suche nach bestimmten Datensätzen beschleunigt.
  
In eine Datenbank wechseln.
+
==Was ist ein Fremdschlüssel?==
* use my_db;
+
*Ein Fremdschlüssel (Foreign Key) ist eine Spalte, die auf den Primärschlüssel einer anderen Tabelle verweist.
 +
*Er dient dazu, logische Beziehungen zwischen Tabellen abzubilden, z. B. „ein Kunde hat mehrere Bestellungen“.
 +
*Fremdschlüssel erzwingen die referenzielle Integrität – das bedeutet: ein Wert darf nur dann eingetragen werden, wenn er auch in der referenzierten Tabelle existiert.
 +
*Dadurch wird sichergestellt, dass keine „verwaisten“ Verweise in der Datenbank existieren.
  
== Tabellenverwaltung ==
+
==Was ist ein Index?==
Tabelle mit mehreren Spalten erstellen.
+
*Ein Index ist eine spezielle Datenstruktur, die dazu dient, den Zugriff auf Daten zu beschleunigen.
* create table my_table (kw int, tests int, labor int, postiv int, prozent float);
+
*Er funktioniert ähnlich wie ein Inhaltsverzeichnis: Statt alle Zeilen der Tabelle zu durchsuchen, springt das DBMS gezielt zur gesuchten Stelle.
 +
*Indexe werden oft auf Spalten gesetzt, die häufig in WHERE-Bedingungen, JOINs oder Sortierungen verwendet werden.
 +
*Ein Primärschlüssel erzeugt automatisch einen eindeutigen Index.
 +
*Neben eindeutigen (UNIQUE) Indexen gibt es auch einfache (nicht eindeutige) Indexe für Performance-Zwecke.
  
Beschreibung einer Tabelle anzeigen.
+
==ASCII-Darstellung einer Tabelle==
* desc my_table;
 
  
Tabelle löschen.
+
+------------+------------+------------+
* drop table my_table;
+
| ID        | Name      | Alter      |
 +
+------------+------------+------------+
 +
| 1          | Anna      | 30        |
 +
| 2          | Ben        | 45        |
 +
| 3          | Carla      | 22        |
 +
+------------+------------+------------+
  
Alle Werte in einer Tabelle löschen.
+
;Legende
* truncate table my_table;
+
*Die Tabelle enthält drei Spalten: ID, Name, Alter
 
+
*Jede Zeile ist ein Datensatz mit konkreten Werten
== Daten einfügen und bearbeiten ==
+
*Die Spalte ID könnte als Primärschlüssel verwendet werden
Werte in eine Tabelle einfügen.
+
*Alle Werte der Spalte „Alter“ sind vom gleichen Datentyp (z. B. INTEGER)
* insert into my_table values(11,127457,114,7582,5.95);
 
 
 
Wert in einer Reihe ändern.
 
* update my_table set labor=154 where kw=14;
 
 
 
Reihe aus der Tabelle löschen.
 
* delete from my_table where kw=11;
 
 
 
== Daten abfragen ==
 
Alle Werte einer Tabelle anzeigen.
 
* select * from my_table;
 
 
 
Bestimmte Spalten ausgeben, wenn eine Bedingung erfüllt ist.
 
* select kw, prozent from my_table where tests > 500000;
 
 
 
Sortierte Ausgabe der Ergebnisse.
 
* select * from my_table where tests > 500000 order by labor;
 
 
 
Letzten Wert aus der Tabelle ausgeben.
 
* select * from my_table order by kw desc limit 1;
 
 
 
== Gruppierte Abfragen ==
 
Summenberechnung nach Gruppen.
 
* select sum(AnzahlFall), Altersgruppe from rki_csv where Landkreis = 'SK Zweibrücken' group by Altersgruppe;
 
 
 
== Transaktionen in SQL ==
 
Transaktionen ermöglichen es, mehrere SQL-Operationen als eine Einheit zu behandeln.
 
* start transaction;
 
* update my_table set labor=200 where kw=15;
 
* commit;  -- Änderungen dauerhaft speichern
 
* rollback;  -- Änderungen verwerfen
 
 
 
== Automatisierung mit Triggern und Events ==
 
Automatische Protokollierung von Einträgen aktivieren.
 
* create trigger log_insert after insert on my_table for each row insert into log_table (aktion, zeit) values ('INSERT', now());
 
 
 
Regelmäßige Bereinigung alter Daten durch ein Event.
 
* create event cleanup_old_entries on schedule every 1 day do delete from my_table where kw < 10;
 
 
 
== Benutzerverwaltung ==
 
Neuen Benutzer anlegen.
 
* create user 'tuxman'@'localhost' identified by 'Suxer-88';
 
 
 
Benutzerrechte für eine Datenbank vergeben.
 
* grant all privileges on my_db.* to 'tuxman'@'localhost';
 
* flush privileges;
 
 
 
Benutzerrechte entziehen.
 
* revoke all privileges on my_db.* from 'tuxman'@'localhost';
 
* flush privileges;
 
 
 
Passwort eines Benutzers ändern.
 
* alter user 'tuxman'@'localhost' identified by 'neuesPasswort';
 
 
 
Liste aller Benutzer ausgeben.
 
* select user from information_schema.users;
 
 
 
== JSON-Unterstützung in SQL ==
 
Einige moderne relationale Datenbanken unterstützen JSON-Felder für semi-strukturierte Daten.
 
 
 
JSON-Daten in einer Tabelle speichern.
 
* create table json_test (id int auto_increment primary key, daten json);
 
 
 
Daten aus JSON-Feld extrahieren.
 
* select json_extract(daten, '$.name') from json_test;
 
 
 
== Fazit ==
 
SQL ist eine universelle Sprache zur Verwaltung relationaler Datenbanken. Sie ermöglicht effizientes Speichern, Abrufen und Bearbeiten von Daten und wird in verschiedenen Datenbanksystemen mit leichten Abweichungen verwendet. Die Kombination aus SQL-Grundlagen und spezifischen Erweiterungen macht sie vielseitig einsetzbar.
 

Aktuelle Version vom 22. März 2025, 07:47 Uhr

Grundkonzepte relationaler Datenbanken

Was ist eine Datenbank?

  • Eine Datenbank ist ein strukturiertes System zur Speicherung, Organisation und Verwaltung von Daten, das speziell für den zuverlässigen Zugriff auf große Datenmengen konzipiert wurde.
  • Im Gegensatz zu einfachen Dateien oder Tabellenkalkulationen gewährleisten Datenbanken Konsistenz, Integrität und gleichzeitigen Zugriff durch mehrere Benutzer.
  • Daten werden zentral verwaltet und lassen sich effizient durchsuchen, filtern und bearbeiten, auch bei komplexen Datenbeziehungen.
  • Relationale Datenbanken speichern Informationen in Tabellenform und ermöglichen durch strukturierte Abfragen (z. B. in SQL) gezielte Analysen und Auswertungen.
  • Ein Datenbanksystem (DBMS) wie MariaDB oder PostgreSQL verwaltet die Datenbank, regelt Zugriffsrechte, sorgt für Datensicherheit und stellt Mechanismen für Sicherung, Wiederherstellung und Transaktionen bereit.

Was ist eine Tabelle?

  • Eine Tabelle ist die grundlegende Struktur innerhalb einer relationalen Datenbank, in der Daten zeilenweise gespeichert werden.
  • Sie besteht aus Spalten (auch Felder oder Attribute genannt) und Zeilen (auch Datensätze oder Tupel).
  • Jede Spalte definiert eine bestimmte Eigenschaft (z. B. Name, Alter, ID) mit einem festen Datentyp.
  • Jede Zeile repräsentiert einen vollständigen Datensatz, also eine konkrete Ausprägung aller Spaltenwerte.
  • Tabellen haben einen eindeutigen Namen innerhalb der Datenbank und können durch Schlüssel miteinander in Beziehung gesetzt werden.

Was ist eine Zeile?

  • Eine Zeile – auch Datensatz oder Tupel genannt – ist ein vollständiger Eintrag in einer Tabelle.
  • Sie enthält genau einen Wert pro Spalte und beschreibt damit eine konkrete Entität, z. B. eine Person, ein Produkt oder einen Vorgang.
  • Alle Zeilen in einer Tabelle folgen dem gleichen Schema, d. h. sie besitzen dieselben Spalten.
  • Jede Zeile ist in der Regel durch einen Primärschlüssel eindeutig identifizierbar.

Was ist eine Spalte?

  • Eine Spalte beschreibt eine einzelne Eigenschaft der gespeicherten Daten, z. B. Vorname, Nachname oder Geburtsdatum.
  • Sie hat einen Namen, einen Datentyp (z. B. INTEGER, VARCHAR, DATE) und gegebenenfalls weitere Einschränkungen (z. B. NOT NULL, UNIQUE).
  • Alle Werte einer Spalte müssen dem vorgegebenen Datentyp entsprechen.
  • Die Struktur und Bedeutung der Spalten wird durch das Tabellenschema vorgegeben.

Was ist ein Primärschlüssel?

  • Ein Primärschlüssel (Primary Key) ist eine Spalte oder Kombination mehrerer Spalten, die jeden Datensatz einer Tabelle eindeutig identifiziert.
  • Es darf keine zwei Zeilen mit dem gleichen Wert im Primärschlüssel geben.
  • Primärschlüssel sind notwendig, um Daten eindeutig zu referenzieren, etwa bei Verknüpfungen mit anderen Tabellen.
  • Ein Primärschlüssel ist automatisch mit einem Index versehen, der die Suche nach bestimmten Datensätzen beschleunigt.

Was ist ein Fremdschlüssel?

  • Ein Fremdschlüssel (Foreign Key) ist eine Spalte, die auf den Primärschlüssel einer anderen Tabelle verweist.
  • Er dient dazu, logische Beziehungen zwischen Tabellen abzubilden, z. B. „ein Kunde hat mehrere Bestellungen“.
  • Fremdschlüssel erzwingen die referenzielle Integrität – das bedeutet: ein Wert darf nur dann eingetragen werden, wenn er auch in der referenzierten Tabelle existiert.
  • Dadurch wird sichergestellt, dass keine „verwaisten“ Verweise in der Datenbank existieren.

Was ist ein Index?

  • Ein Index ist eine spezielle Datenstruktur, die dazu dient, den Zugriff auf Daten zu beschleunigen.
  • Er funktioniert ähnlich wie ein Inhaltsverzeichnis: Statt alle Zeilen der Tabelle zu durchsuchen, springt das DBMS gezielt zur gesuchten Stelle.
  • Indexe werden oft auf Spalten gesetzt, die häufig in WHERE-Bedingungen, JOINs oder Sortierungen verwendet werden.
  • Ein Primärschlüssel erzeugt automatisch einen eindeutigen Index.
  • Neben eindeutigen (UNIQUE) Indexen gibt es auch einfache (nicht eindeutige) Indexe für Performance-Zwecke.

ASCII-Darstellung einer Tabelle

+------------+------------+------------+
| ID         | Name       | Alter      |
+------------+------------+------------+
| 1          | Anna       | 30         |
| 2          | Ben        | 45         |
| 3          | Carla      | 22         |
+------------+------------+------------+
Legende
  • Die Tabelle enthält drei Spalten: ID, Name, Alter
  • Jede Zeile ist ein Datensatz mit konkreten Werten
  • Die Spalte ID könnte als Primärschlüssel verwendet werden
  • Alle Werte der Spalte „Alter“ sind vom gleichen Datentyp (z. B. INTEGER)