Informatik :: PHP + MySQL :: SQL-Grundlagen

SQL-Grundlagen

[Inhalt] [Bezeichner] [Datentypen] [Aggregatsfunktionen]
  [Tabelle erstellen] [Tabelle ändern] [Einfügen von Daten] [Abfrage] [Löschen von Datensätzen]
[Ändern von Daten]

Bezeichner

Namen für Datenbanken, Tabellen, Indizes, Felder dürfen 64 Zeichen lang sein, Aliasnamen 256 Zeichen.
Feldnamen können in 3 Varianten vorkommen:



Seitenanfang

Datentypen

Feldatentyp numerisch Größe in Byte Beschreibung
TINYINT[(Länge)] 1 Ganzzahl-Wertebereich: -128 bis 127 bzw. 0 bis 255
SMALLINT[(Länge)] 2 Ganzzahl-Wertebereich: -32.768 bis 32.767 bzw. 0 bis 65.535
MEDIUMINT[(Länge)] 3 Ganzzahl-Wertebereich: -8.388.608 bis 8.388.607 bzw. 0 bis 16.777.215
INT[(Länge)]/
INTEGER[(Länge)]
4 Ganzzahl-Wertebereich: -2.147.483.648 bis 2.147.483.647 bzw. 0 bis 4.294.967.295
BIGINT[(Länge)] 8 Ganzzahl-Wertebereich: -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807
bzw. 0 bis 18.446.744.073.709.551.615
REAL[(Länge,Dezimalstellen)]/
DOUBLE[(Länge,Dezimalstellen)]
8 Fließkommazahl
FLOAT[(Länge,Dezimalstellen)] 4 Fließkommazahl
DECIMAL[(Länge,Dezimalstellen)]/
NUMERIC[(Länge,Dezimalstellen)]
ungepackte Fließkommazahl mit Vorzeichen,
Zahlen werden als Zeichenketten gespeichert
  
Feldatentyp Zeichenkette Größe in Byte Beschreibung
CHAR(Länge) [BINARY] 1 bis 255 Zeichenkette Länge: 1 bis 255
VARCHAR(Länge) [BINARY] variabel Zeichenkette variabler Länge
TINYBLOB/TINYTEXT BLOB oder Text mit max. 255 Zeichen
BLOB/TEXT BLOB oder Text mit max. 65.535 Zeichen
MEDIUMBLOMB/MEDIUMTEXT BLOB oder Text mit max. 16.777.215 Zeichen
LONGBLOB/LONGTEXT BLOB oder Text mit max. 4.294.967.295 Zeichen
ENUM(Wert1,Wert2,Wert3,...) Aufzählung, max. 65535 Einzelwerte einer liste
SET(Wert1,Wert2,Wert3,...) wie oben, aber Gruppe von Werten max.64
  
Feldatentyp Datum Größe in Byte Beschreibung
DATE 3 Datum vom Typ YYYY-MM-DD
DATETIME 8 Datum vom Typ YYYY-MM-DD HH:MM:SS
TIME 3 Zeit vom Typ HH:MM:SS
TIMESTAMP 4 UNIX-Zeitstempel
YEAR 1 Jahr vom Typ YYYY


Seitenanfang

Aggregatsfunktionen (Zusammenfassungsfunktionen)

Funktion Bedeutung
COUNT Ermittelt die Anzahl einer Menge von Datensätzen
AVG Berechnet den arithmetischen Mittelwert einer Menge von Werten in einem bestimmten Feld
MAX Ermittelt den größten Wert aus einer Menge von Werten in einem bestimmten Feld
MIN Ermittelt den kleinsten Wert aus einer Menge von Werten in einem bestimmten Feld
SUM Berechnet die Summe einer Menge von Werten in einem bestimmten Feld


Seitenanfang

Neue Tabelle erstellen (CREATE TABLE)

Allgemein

CREATE TABLE Tabellenname
(
Feld Datentyp [NOT NULL | NULL] [DEFAULT Defaultwert] [AUTO_INCREMENT]
PRIMARY KEY (Indexname,...) |
KEY [Indexname,...] |
INDEX [Indexname,...] |
UNIQUE [Indexname,...] |
[CONSTRAINT Symbol]
FOREIGN KEY (Indexname,...)[Referenz] oder CHECK (Feld)
);

Beispieldatenbank

Erstellen der Tabelle schulung:

CREATE TABLE schulung
(
laufende_NR INT(5) NOT NULL PRIMARY KEY,
Schulungsbezeichnung CHAR(30),
Kursbeginn DATE,
Kursende DATE,
Kurskosten DECIMAL(7,2),
Veranstalter_NR INT(5)
);

Hinweise:



Seitenanfang

Struktur der Tabelle ändern (ALTER TABLE)

Allgemein

ALTER TABLE Tabellenname
ADD [COLUMN] Feld Datentyp [NOT NULL | NULL] [DEFAULT Defaultwert] [AUTO_INCREMENT]
ADD PRIMARY KEY (Indexname,...) |
ADD INDEX [Indexname,...] |
ADD UNIQUE [Indexname,...] |
ALTER [COLUMN] Feld [SET DEFAULT | DROP DEFAULT]
CHANGE [COLUMN] Feld_alt Feld_neu |
MODIFY [COLUMN] Feld_neu |
DROP [COLUMN] |
DROP PRIMARY KEY
DROP INDEX [Indexname,...] |
RENAME AS Tabelle_neu;

Die Attribute haben folgende Bedeutung:

Beispieldatenbank

Umbenennen von laufende_NR in lfdNr in der Tabelle teilnehmer:

ALTER TABLE teilnehmer
CHANGE laufende_NR lfdNr;

Einfügen des Feldes Kursleiter in die Tabelle veranstalter:

ALTER TABLE veranstalter
ADD Kursleiter CHAR(20);


Seitenanfang

Einfügen von Daten in Tabellen

Daten können auf folgende Weise in eine Tabelle eingetragen werden:

Die INSERT-Anweisung

Allgemein

INSERT [INTO] Tabellenname [(Feld,...)]
VALUES(Wert,...),...;

Beispieldatenbank

Einfügen der Daten eines Mitarbeiters in die Tabelle personal:

INSERT personal
VALUES(1440,'Max','Meier','Kalkgasse 12','12457','Musterhausen','1946-06-15','M',4220);

Hinweis:

Mit einer INSERT-Anweisung kann immer nur ein Datensatz eingefügt werden.

Die LOAD DATA-Anweisung

Handelt es sich um größere Datenmengen, ist es effizienter, mit dem Befehl LOAD DATA zu arbeiten.
Dieser Befehl liest mit sehr hoher Geschwindigkeit Reihen aus einer Textdatei in eine Tabelle.

Allgemein

LOAD DATA [LOCAL] INFILE 'Textdateiname' INTO TABLE Tabellenname
[FIELDS TERMINATED BY term]
[ENCLOSED BY encl] [ESCAPED BY esc] [(Feld,...)];

Die Attribute haben folgende Bedeutung:

Die FIELDS-Auswahl ist optional. Wird sie weggelassen, werden folgende Standardwerte verwendet:

Beispieldatenbank

Einfügen der Daten mehrerer Mitarbeiter aus der Textdatei personal.txt in die Tabelle personal:

LOAD DATA LOCAL INFILE 'personal.txt' INTO TABLE person
FIELDS TERMINATED BY ',' (persnr,vname,name,str,plz,ort,geb,geschl,geh);


Seitenanfang

Die SELECT-Anweisung (Abfrage)

Oftmals ist es notwendig, alle oder einen Teil der Daten einer Datenbank zu lesen.
Dafür benötigst du die SELECT-Anweisung, die eine Abfrage über einer oder mehreren Tabellen durchführt. Angezeigt wird eine Kopie der Originaldaten.

Allgemein

SELECT [DISTINCT | DISTINCTROW | ALL]
[Tabellenname]Feldname,...Ausdruck,...
[FROM Tabellenname,...]
[WHERE Vergleichsausdruck]
[GROUP BY [Tabellenname].Feldname,...]
[HAVING Vergleichsausdruck]
[ORDER BY Feld,...[ASC | DESC],...];

Beispiel 1:

Anzeigen aller Informationen aller Mitarbeiter der Tabelle personal:

SELECT * FROM personal;

Der * steht stellvertretend für alle Felder, d.h. es werden alle Spalten und alle Datensätze von personal angezeigt.

 

Beispiel 2:

Anzeigen aller Informationen derjenigen Mitarbeiter der Tabelle personal, die weniger als 3000 verdienen:

SELECT * FROM personal
WHERE Gehalt<3000;

 

Beispiel 3:

Anzeigen von Vorname, Name und Gehalt aller männlichen Mitarbeiter der Tabelle personal, die in Leipzig wohnen, sortiert nach dem Gehalt absteigend:

SELECT Vorname,Name,Gehalt FROM personal
WHERE Geschlecht='M' and Ort='Leipzig'
ORDER BY Gehalt DESC;

 

Beispiel 4:

Anzeigen von Vorname, Name, Ort und Gehalt aller Mitarbeiter der Tabelle personal, die mehr als 4000 verdienen und in Musterdorf oder Leipzig wohnen, sortiert nach dem Namen aufsteigend:

SELECT Vorname,Name,Ort,Gehalt FROM personal
WHERE Gehalt>4000 and Ort in ('Musterdorf','Leipzig')
ORDER BY Name ASC;

 

Beispiel 5:

Anzeigen von Durchschnitts-, Maximal-, Minimalgehalt und Summe der Gehälter der Tabelle personal

SELECT AVG(gehalt) as Durchschnittsgehalt, MAX(gehalt) as Maximalgehalt,
       MIN(gehalt) as Minimalgehalt, SUM(gehalt) as Summe FROM personal;

 

Beispiel 6:

Anzeigen von Ort, Durchschnitts-, Maximal-, Minimalgehalt und Summe der Gehälter der Tabelle personal gruppiert nach dem Ort

SELECT Ort, AVG(gehalt) as Durchnittsgehalt, MAX(gehalt) as Maximalgehalt,
       MIN(gehalt) as Minimalgehalt, SUM(gehalt) as Summe FROM personal
GROUP BY Ort;

 

Beispiel 7:

Anzeigen von Ort, Durchschnitts-, Maximal-, Minimalgehalt und Summe der Gehälter der Tabelle personal aller Mitarbeiter aus Leipzig

SELECT Ort, AVG(gehalt) as Durchnittsgehalt, MAX(gehalt) as Maximalgehalt,
       MIN(gehalt) as Minimalgehalt, SUM(gehalt) as Summe FROM personal
GROUP BY Ort
HAVING Ort='Leipzig';

 

Beispiel 8:

Anzeigen von Schulungsbezeichnung, Name und Vorname aller Mitarbeiter, die am Grundkurs Excel teilgenommen haben, aufsteigend nach dem Namen sortiert

SELECT Schulungsbezeichnung,Name,Vorname FROM personal,teilnehmer,schulung
WHERE Schulungsbezeichnung='Grundkurs Excel' and
      schulung.laufende_Nr=teilnehmer.laufende_Nr and
      teilnehmer.Personalnummer=personal.Personalnummer
ORDER BY Name ASC;

 

Beispiel 9:

Anzeigen von Schulungsbezeichnung, Veranstalter, Name und Vorname aller Mitarbeiter aus Leipzig, die an einer Schulung in Leipzig teilgenommen haben, aufsteigend nach dem Namen sortiert

SELECT Schulungsbezeichnung,Veranstalter,Name,Vorname FROM personal,teilnehmer,schulung,veranstalter
WHERE Veranstaltungsort='Leipzig' and
      veranstalter.Veranstalter_NR=schulung.Veranstalter_NR and
      schulung.laufende_NR=teilnehmer.laufende_NR and
      teilnehmer.Personalnummer=personal.Personalnummer and
      personal.Ort='Leipzig'
ORDER BY Name ASC;

 

Beispiel 10:

Anzeigen von Name und Vorname aller Mitarbeiter, die an noch keiner Schulung teilgenommen haben, aufsteigend nach dem Namen sortiert

SELECT Name,Vorname FROM personal LEFT JOIN teilnehmer
ON personal.Personalnummer=teilnehmer.Personalnummer
WHERE laufende_NR IS NULL
ORDER BY Name ASC;

 



Seitenanfang

Die DELETE-Anweisung (Löschen von Datensätzen)

Mit der Anweisung DELETE werden Datensätze aus einer oder mehreren in der FROM-Klausel aufgeführten Tabellen gelöscht, wenn diese die in der WHERE-Klausel angegebenen Bedingungen erfüllen. Ist keine WHERE-Klausel angegeben, werden alle Datensätze der Tabelle gelöscht.

Allgemein

DELETE FROM Tabellenname,...
[WHERE Vergleichsausdruck];

Beispiel 1:

Löschen aller Mitarbeiter der Tabelle personal:

DELETE FROM personal;

 

Beispiel 2:

Löschen aller Mitarbeiter der Tabelle personal, die in Musterdorf wohnen:

DELETE FROM personal
WHERE Ort='Musterdorf';

 



Seitenanfang

Die UPDATE-Anweisung (Ändern von Feldelementen)

Mit der Anweisung UPDATE kannst du Werte in schon existierenden Tabellen verändern.

Allgemein

UPDATE Tabellenname
SET Feldname1=Wert1 [,Feldname2=Wert2...]
[WHERE Vergleichsausdruck];

Beispiel 1:

Ändern des Namens des Mitarbeites der Tabelle personal, der die Personalnummer 1437 hat, von "Renner" in "Läufer":

UPDATE personal
SET Name="Läufer"
WHERE Personalnummer=1437;

 

Beispiel 2:

Ändern des Geschlechtes aller Mitarbeiter der Tabelle personal, von "M" in "männlich":

UPDATE personal
SET Geschlecht="männlich"
WHERE Geschlecht="M";

 



Seitenanfang