PMG/Profil nawi 10 1112
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
Datenbanken und Statistiken sind im täglichen Leben ständig präsent, sowohl im privatwirtschaftlichen als auch staatlichen Bereich.<br>
Zum ersten Bereich gehören beispielsweise die Datenbanken der Versicherungen, der Reisebüros, der Online-Händler oder der SCHUFA.<br>
Zum staatlichen Bereich zählen z.B. die statistischen Landesämter, die Meldebehörden oder das Verkehrszentralregister ("Flensburg"), aber auch die Personalverwaltung oder Schülerverwaltung hier an der Schule.
<br><br>
In den folgenden Wochen werden wir uns mit
* der Modellierung von Datenbanken
* und den Möglichkeiten der Auswertung von Daten
beschäftigen.
Zunächst <u>analysieren wir eine gegebene Datenbank</u> in der bekannten Umgebung der Office-
Programme ('''MS Access'''), <u>erarbeiten</u> uns wichtige Begriffe und <u>entwerfen</u> eine
Datenbank zum Thema Raumfahrt/Astronomie. Diese setzen wir in MS Access und dann auch im
'''PWiki''' um. Dafür benötigen wir dann die Datenbanksprache <u>SQL</u>.
<br>
== Die Datenbanksprache SQL und die SQL-Syntax ==
Die in der Praxis am meisten verwendete relationale Datenbanksprache ist SQL.<br>
SQL ist eine deskriptive Sprache, d.h. eine Anfrage hat das Ergebnis ohne Angabe des Algorithmus zu beschreiben.
Grundlegend basieren die Anfrageanweisungen auf der '''SELECT-FROM-WHERE - Klausel'''
Beispiel:
SELECT Feldnamen
FROM Tabelle(n)
WHERE Bedingung;
'''Dabei erfolgt unter SELECT eine <u>Projektion</u> auf die Spalten der Tabelle(n) und unter WHERE eine <u>Selektion (Auswahl)</u> der gewünschten Datensätze bzw. Datenfelder!'''
<br><br>
''Für die WHERE-Klausel:''<br>
Vergleichsoperatoren =; <>; <; <=; >; >=
Prädikate können mit AND, OR und NOT zu komplexeren Bedingungen verknüpft werden.<br>
Priorität: NOT vor AND vor OR oder Klammerung!<br>
BETWEEN-Prädikat: entspricht einer Verknüpfung >= AND <=<br>
Sortierung: ORDER BY <spaltenname> ASC/DESC (auf- bzw. absteigend)
SELECT Feldnamen
FROM Tabelle(n)
WHERE Bedingung
ORDER BY Feldname ASC/DESC;
weitere Hinweise zur Syntax siehe [http://www.sqltutorial.de SQL-Tutorial]<br>
bzw. <u>speziell</u> für das PWiki siehe [http://hsqldb.org/doc/guide/ch09.html hier]
Die folgende Einleitung entstammt der Seite von [http://programmingwiki.de/SQL Michael Hielscher].
* Es wird eine Datenbank angelegt.
* Die Datenfelder werden gefüllt (Inserts).
* Eine Abfrage gestellt (Query).
Eine kleine DB vorbereiten:
<code id="4fbb84f1bdc99">
DROP TABLE Place IF EXISTS;
CREATE TABLE Place (Code INTEGER,Name VARCHAR(255));
CREATE INDEX iCode ON Place (Code);
DROP TABLE Customer IF EXISTS;
CREATE TABLE Customer (Nr INTEGER,Name VARCHAR(255),Place INTEGER);
CREATE INDEX iNr ON Customer (Nr);
</code>
Führen wir ein paar Inserts durch:
<code id="4fbb85910e9bb">
INSERT INTO Place VALUES (4900,'Langenthal');
INSERT INTO Place VALUES (8000,'Zurich');
INSERT INTO Place VALUES (3000,'Berne');
INSERT INTO Place VALUES (1200,'Geneva');
INSERT INTO Place VALUES (6900,'Lugano');
INSERT INTO Customer VALUES (1,'Meier',3000);
INSERT INTO Customer VALUES (2,'Mueller',8000);
INSERT INTO Customer VALUES (3,'Devaux',1200);
INSERT INTO Customer VALUES (4,'Rossi',6900);
INSERT INTO Customer VALUES (5,'Rickli',3000);
INSERT INTO Customer VALUES (6,'Graf',3000);
INSERT INTO Customer VALUES (7,'Mueller',4900);
INSERT INTO Customer VALUES (8,'May',1200);
INSERT INTO Customer VALUES (9,'Berger',8000);
INSERT INTO Customer VALUES (10,'D''Ascoli',6900);
INSERT INTO Customer VALUES (11,'Padruz',1200);
INSERT INTO Customer VALUES (12,'Hug',4900);
</code>
Ein Query dazu:
<run id="4fbb841c96b3b">
SELECT * FROM Customer;
SELECT * FROM Customer,place WHERE Customer.place=place.code AND place.name='Berne'
</run>
Natürlich kann man auch CODE Boxen verwenden oder versteckten Code für das anlegen einer Datenbank
mit Beispielinhalten usw.
Elemente, die in einer CODE Box hinterlegt sind, werden IMMER vor jedem EVAL mit ausgeführt.
Damit eignen Sie sich prima, um Tabellen und Datensätze anzulegen:
<code id="4c8fc835524da">
drop table Artikel if exists;
Create Table Artikel(
A_Nr integer,
A_Name varchar(50),
A_Preis decimal);
Insert Into Artikel Values (12, 'Oberhemd', 22.23);
Insert Into Artikel Values (22, 'Mantel', 360.00);
Insert Into Artikel Values (11, 'Oberhemd', 44.20);
Insert Into Artikel Values (13, 'Hose', 110.50);
</code>
<run id="4fbb841c96b9d">
SELECT * FROM Artikel;
SELECT *
FROM Artikel
WHERE A_Preis = (SELECT MAX(A.A_Preis) FROM Artikel As A)
</run>
'''zum Üben:'''
Abfrage an Datenbanken mit Hilfe der [http://marvin.sn.schule.de/terra/ Terra-Datenbank online]
Löse dazu folgende Aufgaben:
# Ermittle die Namen aller Kontinente
# Gesucht sind alle Inseln (Name) der Inselgruppe der Philippinen.
# Gesucht sind die Einwohnerzahlen der deutschsprachigen Länder (D, A, CH).
# Gesucht ist die Einwohnerzahl der deutschsprachigen Länder (D, A, CH).
# Gesucht sind alle Berge der Alpen (Beachten Sie, dass die Alpen in Teilgebirge aufgegliedert sind).
# Gesucht sind alle Hochgebirge (Gebirge mit Bergen über 3000 m Höhe).
<br>