PMG2224 4/Einführung SQL

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SQL</language>
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)<br>
Aggregatfunktionen: hinter SELECT stehen Funktionen wie SUM, MAX, COUNT, ..., z.B. SUM(Einwohner)<br>
DISTINCT unterdrückt Dopplungen

 SELECT Feldnamen
 FROM Tabelle(n)
 WHERE Bedingung
 ORDER BY Feldname ASC/DESC;


 <font color=darkred size=3>'''weitere Hinweise und Materialien im LearningView unter "Script"'''</font>
 Die unterstützten SQL Befehle können ggf. auch hier nachgeschlagen werden: [http://hsqldb.org/doc/guide/sqlgeneral-chapt.html SQL Befehlssatz].


== Eine weitere kleine Datenbank zum Nacharbeiten ==

* Diese Einleitung entstammt der Seite von [http://programmingwiki.de/SQL Michael Hielscher].

# Es wird eine Datenbank angelegt.
# Die Datenfelder werden gefüllt.
# Eine Abfrage gestellt.

Eine kleine DB vorbereiten:
<code id="6586f4e1c980b">

CREATE TABLE Place (Code INTEGER,Name VARCHAR(255));
CREATE INDEX iCode ON Place (Code);

CREATE TABLE Customer (Nr INTEGER,Name VARCHAR(255),Place INTEGER);
CREATE INDEX iNr ON Customer (Nr);
</code>

Ein paar Eingaben:
<code id="6586f4e1c985d">
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>


Eine Abfrage dazu:
<run id="6586f4e1c9939">
SELECT * FROM Customer;
SELECT * FROM Customer,place WHERE Customer.place=place.code AND place.name='Berne'
</run>


<code id="6586f4e1c98a5">

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="6586f4e1c997d">
SELECT * FROM Artikel;

SELECT *
FROM Artikel 
WHERE A_Preis =	(SELECT MAX(A.A_Preis) FROM Artikel As A)
</run>


Schreibe einen SQL Befehl, der den Artikel mit dem niedrigsten Preis ausgibt:
<code id="6586f4e1c98eb"> </code>
<check>
.---------------------------.
| A_Nr |  A_Name  | A_Preis |
|------|----------|---------|
|   12 | Oberhemd |   22.23 |
'---------------------------'
1 Zeile(n) gefunden.
</check>