SQL

Werbung
• Umfangreiche Datenmengen werden üblicherweise in
relationalen Datenbank-Systemen (RDBMS) gespeichert
• Logische Struktur der Datenbank wird mittels
Entity/Realtionship-Diagrammen
structured query dargestellt
language
SQL
• Manipulation und Abfrage der Daten erfolgt mittels SQL
Michael Kamleitner,
(Structured Query Language)
17.3.2003
•
•
Entwickelt anfang der 70er von E.F. Codd (IBM)
Aktueller Standard: ANSI-SQL-92 (bzw. –99)
• Am Markt etablierte Datenbanken
•
•
Oracle, Microsoft SQL-Server, IBM DB2...
...implementieren mehr oder weniger ANSI-SQL-92
• Umfangreiche Datenmengen werden üblicherweise in
Einleitung
E/R Diagramm
Hypersonic
SQL
Beispiel
relationalen Datenbank-Systemen (RDBMS) gespeichert
• Logische Struktur der Datenbank wird mittels
Entity/Realtionship-Diagrammen dargestellt
• Manipulation und Abfrage der Daten erfolgt mittels SQL
(Structured Query Language)
•
•
Entwickelt anfang der 70er von E.F. Codd (IBM)
Aktueller Standard: ANSI-SQL-92 (bzw. –99)
• Am Markt etablierte Datenbanken
•
•
Oracle, Microsoft SQL-Server, IBM DB2...
...implementieren mehr oder weniger ANSI-SQL-92
• Datenbanken bestehen aus Tabellen
Einleitung
E/R Diagramm
Hypersonic
SQL
Beispiel
•
Spalten→ Attribute, Felder
•
•
Zeilen → Datensätze
Primärschlüssel: ermöglicht eindeutige Identifikation eines
Datensatzes, darf also in einer Tabelle niemals doppelt
vorkommen
ID (Primärschlüssel)
1
2
3
4
Hersteller
VW
VW
Opel
Audi
Modell
Käfer
Golf 2
Manta
A4
Preis
9.100,11.200,12.300,21.400,-
• Kritik am Beispiel: entspricht nicht der Normalform!
•
Feld Hersteller ist nicht funktional abhängig vom Primärschlüssel
•
Folge: Ineffiziente Speicherung, Redundanz
•
Lösung: Aufteilen in zwei separate Tabellen
• Verknüpfung von Tabellen mittels Fremdschlüssel
Einleitung
E/R Diagramm
Hypersonic
Hersteller-ID
(Primärschlüssel)
1
2
3
Name
VW
Opel
Audi
SQL
Automobil-ID
1
2
1
1
{
Beispiel
Hersteller-ID
(Fremdschl.)
1
1
2
3
Primärschlüssel
Name
Käfer
Golf 2
Manta
A4
Preis
9.100,11.200,12.300,21.400,-
• Darstellung mittels Entity/Relationship Diagramm
Einleitung
Automobil
Hersteller
E/R-Diagramm
Hersteller-ID
Name
Hypersonic
SQL
Beispiel
1 : n
Automobil-ID
Hersteller-ID (FK)
Modellname
Preis
• Hypersonic-SQL
Einleitung
E/R-Diagramm
Hypersonic
•
einfach in Betrieb zu nehmende SQL-Datenbank
•
frei verfügbare Demo -Version
•
kommt im Orionserver zum Einsatz
•
Nachteil: Daten werden in der Demo-Version nicht dauerhaft
gespeichert und sind nach Beenden des Programms verloren!
SQL
Beispiel
• Freie (bzw. günstige) Alternativen: MySQL, postgreSQL,
Microsoft Access
• Installation:
Einleitung
•
http://javaboutique.internet.com/HypersonicSQL
E/R-Diagramm
Hypersonic
SQL
Beispiel
Download der Datei hsql_421.zip von
•
Enpacken der Datei bspw. in C:\HSQL
•
Aufruf von C:\HSQL\hypersonicsql\index.html
•
Klick auf „In-Memory Database Manager“
• Anlegen von Tabellen
Einleitung
•
Vor der ersten Verwendung muss die Struktur (Felder,
Datentypen) und die Beziehungen der Tabellen definiert werden
E/R-Diagramm
•
Syntax:
Hypersonic
SQL
CREATE TABLE Tabellenname
(
Feldname1
Feldtyp2 [Not Null],
Feldname1
Feldtyp1 [Not Null], ...
CONSTRAINT Schlüsselname1 PRIMARY KEY (Feldname1,...)
CONSTRAINT Schlüsselname2 FOREIGN KEY
(Feldname d. aktuellen Tab.)
REFERENCES Fremdtabelle
(Feldname d. Fremdtab.)
Beispiel
);
•
Einfache Feldtypen:
•
•
•
•
INTEGER
DOUBLE
VARCHAR (n)
DATE
... Ganze Zahlen
... Dezimalzahlen
... Zeichenkette der Länge n
... Datum
• Beispiel: Tabelle „Hersteller“
Einleitung
E/R-Diagramm
Hypersonic
SQL
Beispiel
Hersteller-ID
(Primärschlüssel)
1
2
3
Name
VW
Opel
Audi
CREATE TABLE Hersteller
(
HerstellerID
INTEGER
Name
VARCHAR(100)
NOT NULL,
NOT NULL,
CONSTRAINT HerstellerPK PRIMARY KEY (HerstellerID)
);
• Beispiel: Tabelle „Automobil“
Einleitung
E/R-Diagramm
Hypersonic
Hersteller-ID
(Fremdschl.)
1
1
2
3
Automobil-ID
1
2
1
1
Name
Käfer
Golf 2
Manta
A4
Preis
9.100,11.200,12.300,21.400,-
SQL
Beispiel
CREATE TABLE Automobil
(
HerstellerID
INTEGER
AutomobilID
INTEGER
Name
VARCHAR(100)
Preis
DOUBLE,
NOT NULL,
NOT NULL,
NOT NULL,
CONSTRAINT AutomobilPK PRIMARY KEY (HerstellerID,
AutomobilID),
CONSTRAINT HerstellerFK FOREIGN KEY (HerstellerID)
REFERENCES Hersteller
(HerstellerID)
);
• Einfügen von Datensätzen
Einleitung
•
Beim Einfügen werden die Datentypen sowie evt. vorhandene
Constraints von der Datenbank überprüft
E/R-Diagramm
•
Syntax:
Hypersonic
INSERT INTO Tabellenname VALUES (Feld1, Feld2,...);
•
SQL
Beispiel
Beispiele:
INSERT INTO Hersteller VALUES (1,'VW');
INSERT INTO Hersteller VALUES (2,'Opel');
INSERT INTO Hersteller VALUES (3,'Audi');
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
Automobil
Automobil
Automobil
Automobil
VALUES
VALUES
VALUES
VALUES
(1,1,'Käfer', 9100);
(1,2,'Golf 2', 11200);
(2,1,'Manta', 12300);
(3,1,'A4', 21400);
INSERT INTO Hersteller VALUES (2,'Mercedes');
INSERT INTO Automobil VALUES (5,1,'Civic', 13400);
• Einfache Abfragen
Einleitung
•
Dienen der Selektion eines Ausschnitts aus der Datenbank nach
bestimmten Kriterien
E/R-Diagramm
•
Syntax:
Hypersonic
SQL
Beispiel
SELECT Feldname1, Feldname2, ...
FROM Tabellenname
WHERE Bedingung1... AND|OR Bedingung2...;
•
Beispiele:
SELECT Name, Preis FROM Automobil;
SELECT * FROM Automobil;
SELECT Name, Preis FROM Automobil
WHERE HerstellerID = 1
AND Preis > 10000;
• Ändern von Datensätzen
Einleitung
•
Manipuliert den Inhalt von beliebig vielen Felder in einem
definierten Ausschnitt einer Tabelle
E/R-Diagramm
•
Syntax:
Hypersonic
SQL
Beispiel
UPDATE Tabellenname
SET Feldname1 = Wert, Feldname2 = Wert,...
WHERE Bedingung1...;
•
Beispiele:
UPDATE Automobil SET Preis = Preis * 2;
UPDATE Automobil SET Name = 'Golf'
WHERE HerstellerID = 1 AND AutomobilID = 1;
• Löschen von Datensätzen
Einleitung
E/R-Diagramm
Hypersonic
SQL
Beispiel
•
Löscht beliebige Zeilen aus der Tabelle
•
Syntax:
DELETE FROM Tabellenname
WHERE Bedingung1,...;
•
Beispiele:
DELETE FROM Automobil WHERE HerstellerID = 1;
DELETE FROM Automobil;
• Abfragen mit Verknüpfung (Join)
Einleitung
•
E/R-Diagramm
•
Hypersonic
•
SQL
SELECT Feldname1, Feldname2,...
FROM Tabellenname1, Tabellenname2,...
WHERE Verknüpfungsbedingung,...;
Bildet das Kreuzprodukt von 2 oder mehreren Tabellen
(„kombiniert jede Zeile aus Tab.1 mit jeder Zeile aus Tab. 2“)
Das Kreuzprodukt wird mittels WHERE auf übereinstimmende
Schlüsselpaare eingeschränkt
Syntax:
Beispiel
•
Beispiele:
SELECT *
FROM Hersteller, Automobil;
SELECT *
FROM Hersteller, Automobil
WHERE Hersteller.HerstellerID = Automobil.HerstellerID;
• Abfragen mit Sortierung (order by)
Einleitung
•
Das Abfrageergebnis kann beliebig aufsteigend (ASC[ending])
oder absteigend (DESC[ending]) sortiert werden
E/R-Diagramm
•
Syntax:
Hypersonic
SQL
Beispiel
SELECT ... ORDER BY Feldname1 ASC|DESC,
Feldname2 ASC|DESC,...;
•
Beispiele:
SELECT * FROM Automobil
ORDER BY Preis ASC;
• Abfragen mit Gruppierung (group by)
Einleitung
E/R-Diagramm
•
Anwendung mathematischer Funktionen auf Felder
•
Syntax:
SELECT
Hypersonic
SQL
Beispiel
SUM(Feldname)
AVG(Feldname)
MAX(Feldname)
MIN(Feldname)
COUNT(Feldname) FROM Tabellenname;
•
Ohne group by-Anweisung: Anwendung auf die ganze Tabelle
•
Mit der group by-Anweisung: Gruppierung nach einem Feld
SELECT Gruppierungsspalte, Math. Funktion
FROM Tabellenname GROUP BY Gruppierungsspalte;
•
Beispiel: Gesucht ist das teuerstes Modell jedes Herstellers
SELECT HerstellerID,MAX(Preis)
FROM Automobil GROUP BY HerstellerID;
• Weitere SQL-Befehle
Einleitung
E/R-Diagramm
Hypersonic
SQL
Beispiel
DROP TABLE Tabellenname;
ALTER TABLE Tabellenname ADD COLUMN Feldname Feldtyp;
Datenbank zur Personalverwaltung
Einleitung
•
Zu jedem Mitarbeiter sollen Name, Anschrift, PLZ und Gehalt in
geeigneten Datentypen gespeichert werden
•
Die Mitarbeiter sind in Abteilungen organisiert, die jeweils durch
einen Namen und eine Kostenstellennummer beschrieben werden
•
Jeder Mitarbeiter ist genau einer Abteilung zugeteilt
E/R-Diagramm
Hypersonic
SQL
Mitarbeiter
Beispiel
MitarbeiterID
Name
Anschrift
PLZ
Gehalt
AbteilungsID (FK)
Abteilungen
AbteilungID
Bezeichnung
Kostenstelle
Anlegen der Tabellen
Einleitung
E/R-Diagramm
Hypersonic
CREATE TABLE Abteilungen
(
AbteilungID
INTEGER
NOT NULL,
Name
VARCHAR(50) NOT NULL,
Kostenstelle
INTEGER,
CONSTRAINT AbteilungenPK PRIMARY KEY (AbteilungID)
SQL
Beispiel
);
CREATE TABLE Mitarbeiter
(
MitarbeiterID INTEGER
NOT
Name
VARCHAR(50),
Anschrift
VARCHAR(50),
PLZ
INTEGER
NOT
Gehalt
DOUBLE
NOT
AbteilungID
INTEGER
NOT
NULL,
NULL,
NULL,
NULL,
CONSTRAINT MitarbeiterPK PRIMARY KEY (MitarbeiterID),
CONSTRAINT AbteilungFK
FOREIGN KEY (AbteilungID)
REFERENCES Abteilungen (AbteilungID)
);
Anlegen einiger Testdatensätze:
Einleitung
•
4 Abteilungen (Geschäftsführung, Rechnungswesen, Verkauf,
Service)
•
Mehrere Mitarbeiter pro Abteilung
E/R-Diagramm
Hypersonic
SQL
Beispiel
Anlegen einiger Testdatensätze:
Einleitung
E/R-Diagramm
Hypersonic
SQL
Beispiel
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
Abteilungen
Abteilungen
Abteilungen
Abteilungen
VALUES
VALUES
VALUES
VALUES
(1,'Geschäftsführung',1000);
(2,'Rechnungswesen',2200);
(3,'Verkauf',3400);
(4,'Service',4000);
INSERT INTO Mitarbeiter
VALUES (1,'Müller','Heuberggasse 42-50',1170,20000.0,1);
INSERT INTO Mitarbeiter
VALUES (2,'Meyer','Margarethengürtel 15',1050,1400.50,2);
INSERT INTO Mitarbeiter
VALUES (3,'Huber','Bergsteiggasse 1',1170,1200.50,2);
INSERT INTO Mitarbeiter
VALUES (4,'Berger','Litfaßstrasse 12',1030,1300,3);
INSERT INTO Mitarbeiter
VALUES (5,'Naerr','Mengergasse 12',1210,1000.3,3);
INSERT INTO Mitarbeiter
VALUES (6,'Stocker','Hernalser Hauptstr. 112',1170,1500.0,4);
INSERT INTO Mitarbeiter
VALUES (7,'Niedermesser','Geblergasse 10',1170,1200.30,4);
INSERT INTO Mitarbeiter
VALUES (8,'Rat','Arndtstrasse 48',1120,1400,4);
Einige Abfragen
Einleitung
•
SELECT COUNT(*) FROM Mitarbeiter;
E/R-Diagramm
Hypersonic
•
Liste aller Mitarbeiter-Namen inkl. der jeweiligen
Abteilungsbezeichnung
SELECT Mitarbeiter.Name,Abteilungen.Name
FROM Mitarbeiter,Abteilungen
WHERE Mitarbeiter.AbteilungID = Abteilungen.AbteilungID;
SQL
Beispiel
Anzahl der Mitarbeiter
•
Liste aller Abteilungs-Bezeichnugnen mit den jeweiligen GesamtGehaltskosten
SELECT
FROM
WHERE
GROUP
•
Abteilungen.Name, SUM(Gehalt)
Abteilungen,Mitarbeiter
Mitarbeiter.AbteilungID = Abteilungen.AbteilungID
BY Abteilungen.AbteilungID;
Löschen der Abteilung 4
DELETE FROM Mitarbeiter WHERE AbteilungID = 4;
DELETE FROM Abteilungen WHERE AbteilungID = 4;
Herunterladen