PMG2224 1/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 erste 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="6586f4c34101b">

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="6586f4c341079">
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="6586f4c34118e">
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 RUN mit ausgeführt. 
 Damit eignen Sie sich prima, um Tabellen und Datensätze anzulegen:


<code id="6586f4c3410d5">

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

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

Die unterstützten SQL Befehle können hier nachgeschlagen werden: [http://hsqldb.org/doc/guide/sqlgeneral-chapt.html SQL Befehlssatz].


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