.:: NAVIGATION ::.
 A Einleitung  

.:: INFO ::.

.:: user ::.
Username:
Password:
--> registrieren <--


765 registrierte Benutzer

SCHULE.AT

MySQL

PHP

Wie komme ich zu einem Lehrer-Account?

Zuerst registrieren, anschließend Mail an ingolacheiner.net mit Namen, gültiger e-mail-Adresse, Username, Passwort und Schulkennzahl

 

·:: Zurück  weiter ::·
.:: MA Grundlagen von SQL::.

Datenbank anlegen - Tabellen anlegen

Create Database - Create Table

Das Erstellen von Datenbanken und Tabellen kannst du ganz einfach mit Hilfe von phpMyAdmin bewerkstelligen. Es funktioniert ähnlich wie in MS Access und wird daher nicht näher besprochen. Wie du phpMyAdmin installierst wird in AA_Arbeitsumgebung beschrieben.

Abb: Neue Datenbank in phpMyAdmin erzeugen

Abb: Neue Tabelle in phpMyAdmin erzeugen

Natürlich kann man auch den SQL-Befehl:

CREATE DATABASE db_kursanmeldung;

zum Erstellen der Datenbank bzw.

CREATE TABLE `tbl_user` (
`user_id` int(11) NOT NULL auto_increment,
`user_name` varchar(25) NOT NULL default '',

/* hier weitere Felder ... */

) TYPE=MyISAM AUTO_INCREMENT=40 ;

zum erstellen von Tabellen verwenden! Mehr dazu siehe www.mysql.com

Übung MA1

Erstelle eine neue Datenbank:

Die Datenbank heißt db_kursanmeldung

Erstelle folgende Tabellen in phpMyAdmin:

tbl_user( `user_id` `user_name` `user_pwd` `user_gruppe` `user_vorname` `user_nachname`
`user_strasse` `user_plz` `user_ort` `user_land` `user_email` `user_regdat` `user_last_login`
`user_telefon` )
tbl_kurse(`kurs_id` `kurs_bezeichnung` `kurs_beschreibung` `kurs_preis` `kurs_max_anz`
`kurs_start_zeit` `kurs_end_zeit`)
tbl_anmeldung(`anm_id` `anm_kurs_id` `anm_anz_personen` `anm_user_id` `anm_zeit`)

Wähle Datentypen, Feldlängen und weitere Einstellung selbst und sinnvoll aus.

Datensätze erstellen und manipulieren

INSERT

Abb.: Klicke auf einen Teil der SQL-Anweisung

Um neue Daten in eine Tabelle zu schreiben benötigen wir das INSERT-Kommando. Um eineTabelle direkt ansprechen zu können ergänzen wir das Kommando: INSERT INTO anschließend steht der Tabellennamen:

INSERT INTO tbl_user ...

Um die Reihenfolge nicht genau befolgen zu müssen oder nur einzelne Daten in die Tabelle schreiben zu können, besteht die Möglichkeit die Spaltenüberschriften vor dem Kommando VALUES anzugeben:

INSERT INTO tbl_user ( user_vorname, user_nachname, user_name, user_pwd) VALUES ("Josef", "Mayer", "kochschueler","geheim", ...);

Nun wurde auf die Spalte user_ID verzichtet, da dieser Wert automatisch vergeben werden soll. Außerdem ist die Reihenfolge im Vergleich zum Tabellenaufbau verändert.

UPDATE

UPDATE orientiert sich an der SET-Form desr INSERT INTO-Kommandos.

UPDATE tbl_user SET ...

Nach SET werden durch Name-Wert-Paare, bestehend aus den Bezeichnungen der Tabellenspalten und den zugeordneten Werten, die neuen Daten für die Zieltabelle angegeben.

UPDATE tbl_user SET user_nachname="Müller", user_plz="4150", user_ID=2;

Dieses UPDATE-Kommando würde jedoch alle Datensätze überschreiben! Da dies aufgrund der Tabellendefinition nicht möglich ist (user_ID ist ein Primärschlüssel), wird eine Fehlermeldung ausgegeben.

Möchte man nur einen oder wenige Datensätze aktualisieren kann man mit dem Schlüsselwort WHERE Bedingungen definieren. Gibt die Bedingung bei Kontrolle eines Datensatzes TRUE zurück wir die Änderung vorgenommen.

UPDATE tbl_user SET user_strasse="Fichtenweg 6 " WHERE user_ID = 2;

Wie in anderen Programmiersprachen auch können diese Bedingungen durch logische Operatoren verbunden werden.

DELETE FROM

Mittels DELETE-Kommando können Datensätze wieder gelöscht werden.

DELETE FROM tbl_user;

Dieses Kommando löscht alle Datensätze aus der tbl_user. Auch hier können mit Hilfe von WHERE wieder Bedingungen gestellt werden.

DELET FROM tbl_user WHERE user_last_login < 1099660801;

Diese Anweisung löscht alle Datensätze, deren UNIX-Timestamp von user_last_login kleiner als 1099660801 ist.

Übung MA2

Diese Übung besteht aus fünf Arbeitsschritten:

1. Erstelle 15 beliebige Datensätze in der tbl_user

 

2. Erstelle mit diesem Dump die Datensätze in der tbl_kurse (kopiere einfach diese SQL-Zeilen in das oben gezeigte Fenster und klicke auf OK).

Mittels phpMyAdmin kannst du direkt SQL-Befehle eingeben:

Abb: SQL-Befehlseingabe in phpMyAdmin

3. Lösche den Kurs "Singlekochkursr" mittels DELETE-Kommando.

4. Update den ersten Datensatz statt Haubenkochkurs soll die neue kurs_bezeichnung "Herbst mit Haube" lauten.

5. Schreibe in die tbl_anmeldung mindestens 5 sinnvolle Datensätze.

 

Datensätze mit SELECT auslesen

Möchte man nun Daten aus der Datenbank wieder auslesen benötigt man das SELECT-Kommando. Das SELECT-Kommando setzt sich aus einigen Teilen zusammen, die wir im einzelnen durchgehen werden. Der erste Teil besteht aus der Anweisung SELECT und den Spaltennamen der Zieltabelle von denen wir Daten auslesen möchten.

SELECT user_nachname, user_vorname, user_strasse ...

Wenn alle Spalten einer Tabelle ausgelesen werden sollen kann man anstelle aller Spaltenüberschriften auch die bekannte Wildcard "*" verwenden.

Der zweite Teil des SELECT-Befehls bestimmt den Namen der Zieltabelle, aus denen die Daten ausgelesen werden sollen. Dieser Teil wird durch das Schlüsselwort FROM eingeleitet.

SELECT `user_gruppe` , `user_plz` , `user_ort` FROM tbl_user;

Dieser Befehl liest alle Daten der Tabelle "tbl_user" aus, die in den Spalten "user_gruppe", "user_plz" und "user_ort" gespeichert sind. Das Ergebnis wird in einer neuen Ergebnistabelle ausgegeben, die alle Datensätze zeigtt.

Das erste Beispiel für den SELECT-Befehl gibt also folgendes Ergebnis zurück:

user_gruppe user_plz user_ort
visitior 4580 Scharnstein
visitor 8010 Graz
admin 8010 Graz
visitor 4550 Kremsmünster
admin 4560 Kirchdorf
visitor 4694 Ohlsdorf
admin 4560 Kirchdorf

Tabelle: Ergebnistabelle (Ergebnisrelation)

Die Ergebnisrealtion für eine SQL-Anfrage werden ebenfalls in Tabellenform zurückgegeben.

Die WHERE-Klausel

Natürlich können auch beim SELECT-Kommando Bedingungen für die Auswahl der anzuzeigenden Daten erstellt werden. Wie bei UPDATE können diese Bedingungen mit WHERE definiert werden.

SELECT user_vorname, user_nachname, user_plz FROM tbl_user WHERE user_plz = "4100";

Diese einfache Abfrage schränkt die Ergebnisrelation auf alle Datensätze mit der PLZ 4100 für Ottensheim ein. Das Ergebnis wird nur aus Usern die in Ottensheim wohnen bestehen.

Mehrere Tabellen gleichzeitig auslesen

Natürlich kann man auch gleichzeitig aus mehreren Tabellen bzw. sogar Datenbanken Daten auslesen. Um dabei jede Spalte eindeutig ansprechen zu können verwendet man eine hirarchische Punktnotation. Der erste Name gibt den Datenbanknamen, der zweite den Tabellennamen und der dritte den Spaltennamen an. Damit kann jedes Feld genau identifiziert werden und du erhältst die gewünschten Daten.

Pfad Beschreibung
db_kursanmeldung.tbl_user.user_ort Die Spalte "user_ort" wird in einer eindeutigen Angabe über den Namen der Datenbank und der Tabelle identifiziert

Besteht nur eine Verbindung zu einer Datenbank, kann natürlich der Name dieser weggelassen werden.

Alle Daten aus zwei Tabellen könne mit folgender SELECT-Anweisung ausgelesen werden:

SELECT * FROM tbl_user, tbl_anmeldung;

Dabei werden jedoch alle Datensätze der einen Tabelle mit allen Datensätzen der anderen Tabellen in allen mögichen Kombinationen miteinander verknüpft:

nachname vorname adresse plz ort land anreise_datum belegungs_id gast_ID Kurs_ID bezahlt
... ... ... ... ... ... ... ... ... ... ...

Um eine vernünftige Anzeige zu erhalten verwendet man WHERE-Klauseln um nur die interesssanten Verknüpfungen angezeigt zu bekommen.

SELECT tbl_kurse.kurs_bezeichnung,tbl_kurse.kurs_beschreibung, tbl_anmeldung.anm_kurs_id
FROM tbl_kurse, tbl_anmeldung
WHERE tblkurse.kurs_id = tbl_anmeldung.anm_kurs_id;

Diese Anweisung gibt nur die Datensätze aus, die sowohl in der Tabelle tbl_kurse als auch in der Tabelle tbl_anmeldung in der Spalte kurs_ID bzw. anm_kurs_id denselben Wert haben. Das Ergebnis zeigt alle Kurse für die bereits eine Anmeldung vorliegt. Datensätze, die keine Übereinstimmung zeigen, werden stillschweigend ignoriert.

ORDER BY

Mit ORDER BY können die Ergebnisrelationen nach einem bestimmten Feld sortiert werden.

SELECT tbl_user.user_land, tbl_user.user_nachname, tbl_user.user_vorname
FROM tbl_user
ORDER BY tbl_user.user_land, tbl_user.user_nachname;

Verbund

Im relationalen Datenbankmodell gibt es eine ganze Menge an JOIN-Typen, die ich aber hier nicht näher aufzählen möchte. Die wichtigsten Verbundtypen sind:CROSS JOIN, INNER JOIN, LEFT JOIN und RIGHT JOIN.

Cross-Join: Diese Operation verbindet jeden Datensatz der ersten Tabelle mit jedem Datensatz der zweiten Tabelle:
SELECT * FROM tbl_user CROSS JOIN tbl_anmeldung;

Inner-Join: Verbindet die Datensätze aus zwei Tabellen, sobald ein definiertes Datenfeld identische Werte aufweist.
SELECT tbl_user.user_land, tbl_user.user_nachname, tbl_user.user_vorname
FROM tbl_kurse INNER JOIN tbl_anmeldung ON (tbl_kurse.kurs_id=tbl_anmeldung.anm_kurs_id);

Left Join: Mit einem Left Join wird eine so genannte linke Inklusionsverknüpfung erstellt. Dabei werden alle Datensätze aus der ersten (linken) Tabelle eingeschlossen, auch wenn keine entsprechenden Werte in der zweiten Tabelle existieren.
SELECT tbl_user.user_land, tbl_user.user_nachname, tbl_user.user_vorname
FROM tbl_user LEFT JOIN tbl_anmeldung ON (tbl_kurse.kurs_id=tbl_anmeldung.anm_kurs_id);

Right Join: Rechte Inklusionsverknüfungen bilden das Spiegelbild des Left Join, in dem alle Datensätze aus der zweiten (rechten) Tabelle eingeschlossen werden, auch wenn keine entsprechenden Daten in der ersten Tabelle existieren.

Übung MA3

1. Finde sinnvolle Beispiele für CROSS-JOIN, LEFT und RIGHT-JOIN.

2. Erzeuge eine Ergebnisrelation in der alle Kurse eines angemeldeten Gastes erscheinen. Sortiert nach der Bezeichnung des Kurses.

Jetzt wird´s schwierig:

3. Erzeuge eine Tabelle in der ersichtlich ist, welcher User bei welchem Kurs angemeldet ist. Angezeigt werden soll die Kursbezeichnung, der Vorname, der Nachname und das Anmeldedatum.


Spezielle Funktionen von MySQL

Mit speziellen Funktionen können die Ergebnisrelationen weiter bearbeitet werden. Es wird zwischen vier verschiedenen Arten von SQL-Funktionen unterschieden: Die mathematischen Funktionen, die Stringfunktionen, Datums- und Zeitfunktionen und die so genannten Aggregatsfunktionen, die für spaltenorientiertes Arbeiten eingesetzt werden.

Mathematische Funktionen

Funktion Beschreibung
ABS(n) Gibt den Absolutwert zurück
MOD(n,m) Gibt den Rest einer Ganzzahlendivision zurück
FLOOR(n) Rundet den Wert auf
CEILING(n) Rundet den Wert ab
ROUND(n,m) Rundet den Wert mathematisch korrekt. Wenn der optionale Parameter m angegeben ist, wird auf m Nachkommastellen gerundet
EXP(x) Gibt die Potenz des Arguments zur Basis e (Eulersche Zahl) zurück
LOG(x) Natürlicher Logarithmus
LOG10(x) Logarithmus zu 10
POW(x,y) Potenziert x mit y
SQRT(x) Zieht die zweite Wurzel aus x
PI() gibt die Kreiszahl "pi" zurück
SIN(x) Sinusfunktion
COS(x) Cosinusfunktion
TAN(x) Tangensfunktion
RAND() Gibt eine Zufallszahl zwischen 0 und 1 zurück
LEAST(x,y,z,...) Gibt den kleinsten Wert einer Liste zurück
GREATEST(x,y,...) Gibt den größten Wert einer Liste zurück
TRUNCATE(x,y) Schneidet eine Dezimalzahl auf y Nachkommastellen ab

Stringfunktionen

Funktion Beschreibung
ASCII(str) Gibt den ASCII-Code des ersten Zeichens des Strings zurück.

Datums- und Zeitfunktionen

Funktion Beschreibung
DAYOFWEEK(date) Gibt den Tag der Woche als Zahl zurück, Sonntag entspricht 1
   

Aggregatfunktionen

Funktion Beschreibung
COUNT(*) Gibt die Anzahl aller Spalten einer Ergebnisrelation zurück
COUNT(name) Gibt die Anzahl der Felder der Spalte name zurück, die in einer Ergebnisrelation zusammengefasst wurden. Felder mit dem Wert NULL werden nicht berücksichtigt.
AVG(name) Berechnet den Mittelwert einer Spalte
MIN(name) Gibt den kleinsten Wert einer Spalte zurück
MAX(name) Gibt den größten Wert einer Spalte zurück
SUM(name) Gibt die Summe aller Felder einer Spalte zurück
STD(name) Gibt die Standardabweichung einer Spalte zurück

Übung MA4

1. Erzeugen sie eine Tabelle in der die Anzahl der angebotenen Kurse angezeigt wird.

2. Erzeugen sie eine Tabelle in der die Anzahl der angemeldeten Personen pro Kurs dargestellt wird.

 



·:: Zurück  weiter ::·



© 2005 unter OPL
ingolacheiner.net