Informatik :: PHP + MySQL :: SQL-Grundlagen
[Inhalt] | [Bezeichner] [Datentypen] [Aggregatsfunktionen] |
[Tabelle erstellen] [Tabelle ändern] [Einfügen von Daten] [Abfrage] [Löschen von Datensätzen] [Ändern von Daten] |
Namen für Datenbanken, Tabellen, Indizes, Felder dürfen 64 Zeichen lang sein, Aliasnamen 256 Zeichen.
Feldnamen können in 3 Varianten vorkommen:
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 |
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 |
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:
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);
Daten können auf folgende Weise in eine Tabelle eingetragen werden:
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.
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);
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;
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';
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";