Einführung in SQL

Werbung
Einführung in SQL
Die Sprache SQL (Structured Query Language) ist eine Programmiersprache für
relationale Datenbanksysteme, die auf dem ANSI-SQL-Standard beruht. SQL wird
heute von fast jedem Datenbanksystem unterstützt.
Damit hat der Programmierer die Möglichkeit, Anwendungen zu entwickeln, die mit
verschiedenen Datenbanksystemen lauffähig sind, ohne dass Änderungen des
Quellcodes notewendig sind.
Sprachumfang:
DDL (Data Definition Language)
DQL (Data Query Language)
Erstellen von Datenbanken, Tabellen und
Indizes
Abfragen von Daten
DML (Data Manipulation Language) Anlegen, Ändern und Löschen von
Datensätzen
DCL (Data Controlling Language)
Anlegen von Benutzern und Vergabe von
Zugriffsrechten
Seite 1 von 12
2016
Die Abfragesprache DQL
Die DQL besteht nur aus einer einzigen Anweisung, der SELECT-Anweisung. Diese
besitzt jedoch sehr viele Erweiterungen, so dass sich verschiedenste
Abfrageresultate ergeben können.
einfache Form:
SELECT <Feldliste> FROM <Tabelle>
Beispiele:
SELECT * from Kunde
selektiert alle Felder der Tabelle Kunde
SELECT Nummer, Name from Kunde
selektiert nur die Felder Nummer und Name aus der Tabelle Kunde
Erweiterung mit WHERE
SELECT <Feldliste> FROM <Tabelle> WHERE <Bedingung> [AND | OR]
<Bedingung>
Vergleichsoperatoren:
=
>=
<=
<
>
<>
gleich
größer gleich
kleiner gleich
kleiner
größer
ungleich
logische Operatoren:
AND
OR
NOT
logisches UND
logisches ODER
Negation
Seite 2 von 12
2016
SELECT * from Kunde where Ort = 'Frankfurt'
Alle Kunden die in Frankfurt wohnen
SELECT Nummer, Name, Vorname from Kunde where Name = 'Meier'
Alle Personen mit dem Namen Meier
SELECT * from Kunde where Name = 'Meier' AND Ort = 'München'
Alle Kunden mit dem Namen Meier, die in München wohnen
Der Operator LIKE
Über Wildcards können unscharfe Selektionskriterien erstellt werden.
SELECT <Feldliste> FROM <Tabelle> WHERE <Feldname> LIKE <muster>
SELECT <Feldliste> FROM <Tabelle> WHERE <Feldname> LIKE <muster>
Muster:
% oder *
_ oder ?
steht für beliebigen Rest
für ein Zeichen
Beispiele:
SELECT * from Kunde WHERE Name LIKE 'S*'
Suche alle Kunden, deren Name mit S beginnt
SELECT * from Kunde WHERE Name LIKE '??y*'
Suche alle Kunden, deren Name an der dritten Stelle ein y aufweist.
SELECT * from abteilung where stadt LIKE '*E*'
Suche alle Abteilungen in denen sich im Ortsnamen ein E befindet.
Seite 3 von 12
2016
Die Operatoren IN und BETWEEN
Mit dem IN-Operator können mehrere Konstanten angegeben werden, auf die dann
die Suche beschränkt wird.
SELECT <Feldliste> FROM <Tabelle> WHERE <Feldname>
IN(<konst1>,<konst2>,...)
SELECT <Feldliste> FROM <Tabelle> WHERE <Feldname> BETWEEN <wert1>
AND <wert2>
Beispiele:
SELECT * from Kunde where id IN(5,17,40)
SELECT * from project where mittel between 95000 and 120000
Der NULL-Operator
SELECT * FROM <tabelle> WHERE <Feldname> IS [NOT] NULL
Beispiele:
select * from Kunde where Name is NULL
select * from arbeiten where Vorname is NOT NULL
Unterabfragen
Bis jetzt wurde der Vergleich in der WHERE -Klausel immer mit einer Konstanten
durchgeführt. Zusätzlich dazu ist es möglich, den Vergleich mit dem Ergebnis einer
weiteren SELECT-Anweisung durchzuführen.
Eine Unterabfrage wird häufig als innere SELECT-Anweisung bezeichnet.
Eine Unterabfrage kann im Zusammenhang mit folgenden Operatoren auftreten:


alle Vergleichsoperatoren
IN-Operator
Seite 4 von 12
2016
Unterabfragen mit Vergleichsoperatoren
SELECT * FROM <Tabelle> WHERE <Feldname> = (SELECT * FROM <tabelle>
WHERE <Feldname> = <wert>)
Beispiele:
SELECT abt_nr from mitarbeiter where m_nr in (select m_nr from arbeiten where
pr_nr = 'p3')
Nennen Sie die Abteilungsnummer aller Mitarbeiter, die im Projekt p3 arbeiten.
SELECT distinct pr_nr from arbeiten where m_nr < (select m_nr from mitarbeiter
where m_name = 'Müller')
Nennen Sie die Nummern aller Projekte, in welchen Mitarbeiter arbeiten, deren
Personalnummer kleiner als die Nummer des Mitarbeiters namens Müller ist.
Unterabfragen mit IN-Operator
SELECT * FROM <Tabelle> WHERE <Feldname> IN (SELECT <Feldliste> FROM
<Tabelle> WHERE <Feldname> = <wert>)
Nennen Sie die Daten aller Mitarbeiter, die in München arbeiten
Die GROUP BY -Klausel
Die GROUP BY- Klausel definiert eine oder mehrere Spalten als
Gruppenkennzeichen, wonach die Reihen gruppiert werden.
SELECT <Feldname>,... FROM <tabelle> GROUP BY <Feldname>
Beispiel:
SELECT aufgabe from arbeiten GROUP BY aufgabe
SELECT pr_nr, aufgabe from arbeiten GROUP BY pr_nr, aufgabe
Gruppieren aller Mitarbeiter nach Projektnummer und Aufgabe
Seite 5 von 12
2016
Aggregatfunktionen





MIN
MAX
SUM
AVG
COUNT
Die Aggregatfunktionen können in einer SELECT-Anweisung mit oder ohne GROUP
BY-Klausel erscheinen. Falls die SELECT-Anweisung die GROUP BY-Klausel nicht
enthält, dürfen in der Projektion nur die Spaltennamen angegeben werden, die als
Parameter der Aggregatfunktion erscheinen.
Alle Spaltenamen, die nicht Parameter der Aggregatfunktion sind, dürfen in der
SELECT-Anweisung erscheinen, falls sie zur Gruppierung verwendet werden.
Die Funktionen MIN und MAX
Die Funktionen ermitteln den kleinsten oder größten Wert aus einer Tabelle
SELECT MIN(<Feldname>) as <alias> FROM <tabelle>
Beispiele:
select MIN(m_nr) as min_m_nr from mitarbeiter
kleinste Personalnummer eines Mitarbeiters
select m_nr, m_name from mitarbeiter where m_nr = (select min(m_nr) from
mitarbeiter)
Personalnummer und Namen des Mitarbeiters mit der kleinsten Personalnummer
select m_nr from arbeiten where einst_dat = (select max(einst_dat) from arbeiten
where aufgabe = 'Projektleiter')
Finden Sie die Personalnummer des Projektleiters, der in dieser Position als letzter
eingestellt wurde.
Seite 6 von 12
2016
Die Funktion SUM
Die Aggregatfunktion SUM berechnet die Summe der Werte einer Spalte. Die Spalte
muss numerisch sein.
SELECT SUM(<Feldname>) <alias> from <tabelle>
Beispiele:
SELECT SUM(mittel) AS budgetsumme from projekt
Berechnen der Summe aller finanziellen Mittel
Die Funktion COUNT
Die Aggregatfunktion COUNT hat zwei verschiedene Formen. Die erste Form sieht
wie folgt aus:
COUNT ([distinct] <spalten_name>)
Sie berechnet die Anzahl der Werte der Spalte, wobei alle mehrfach vorhandenen
Werte nicht berücksichtigt werden.
Die zweite Form der Funktion COUNT sieht folgendermaßen aus:
COUNT(*) oder COUNT(1)
Sie berechnet die Anzahl der Reihen.
Beispiel:
select pr_nr, count(m_nr) as anzahl from arbeiten group by pr_nr
Finden sie heraus, wie viele Mitarbeiter in jedem Projekt arbeiten.
select pr_nr, count(aufgabe)as anzahl from arbeiten group by pr_nr
Finden Sie heraus, wie viele Aufgaben in jedem Projekt ausgeübt werden.
Seite 7 von 12
2016
Die HAVING-Klausel
Die HAVING-Klausel hat dieselbe Funktion für die GROUP-BY-Klausel wie die
WHERE-Klausel für die SELECT-Anweisung.
HAVING <Bedingung>
Beispiel:
select pr_nr from arbeiten group by pr_nr having count(*) < 4
Nennen Sie alle Projekte, mit denen weniger als vier Mitarbeiter befasst sind.
Die ORDER BY-Klausel
Die ORDER-BY-Klausel definiert die Reihenfolge der Ausgabe aller ausgewählten
Reihen einer SELECT-Anweisung. Diese Klausel ist optional (ASC ist Defaultwert)
ORDER BY <feldname> [ ASC | DESC]
SELECT m_nr, m_name, m_vorname from mitarbeiter order by m_nr
UNION
Mit UNION können zwei SELECT-Anweisungen miteinander verbunden werden
SELECT name,vorname from <tabelle>
UNION
SELECT name,vorname from <tabelle>
Die Felder müssen denselben Datentyp besitzen und in der gleichen Reihenfolge
angegeben werden.
Beispiel:
select m_nr from mitarbeiter where abt_nr = 'a1'
UNION
select m_nr from arbeiten where einst_dat < '01.01.1988' order by 1
Seite 8 von 12
2016
Komplexe Abfragen
Verknüpfen zweier oder mehrerer Tabellen
Der Equijoin
Finden Sie für jeden Mitarbeiter, zusätzlich zu seiner Personalnummer, Namen und
Vornamen, auch die Abteilungsnummer und den Standort der Abteilung. die
doppelten Spalten beider Tabellen sollen ausgegeben werden.
select mitarbeiter.*,abteilung.* from mitarbeiter, abteilung where mitarbeiter.abt_nr =
abteilung.abt_nr
Das Kartesische Produkt
select * from mitarbeiter,abteilung
Jeder Spalte der Tabelle mitarbeiter wird mit jeder Spalte der Tabelle abteilung
verkettet.
Das so entstandene Zwischenergebnis heißt Kartesisches Produkt.
Eine Tabelle mit sich selbst verknüpfen
select a.abt_nr, a.abt_name, from abteilung a, abteilung b where a.stadt = b.stadt
and a.abt_nr <> b.abt_nr
Finden sie alle Abteilungen, an deren Standort sich weitere Abteilungen befinden.
INNER JOIN
Gibt die Datenmenge aus beiden Tabellen zurück. Es werden nur Daten
ausgegeben, die in beiden Tabellen vorkommen.
SELECT Bestellungen.Menge, Artikel.EP
FROM Artikel INNER JOIN Bestellungen ON Artikel.Artnr = Bestellungen.ArtNr;
SELECT Kunden.Name, Kunden.Vorname, Bestellungen.Menge, Artikel.EP
FROM Kunden INNER JOIN (Artikel INNER JOIN Bestellungen ON Artikel.Artnr =
Bestellungen.ArtNr) ON Kunden.KdNr = Bestellungen.KdNr;
LEFT JOIN
SELECT Bestellungen.Menge, Artikel.Artnr
FROM Artikel LEFT JOIN Bestellungen ON Artikel.Artnr = Bestellungen.ArtNr
WHERE (((Bestellungen.Menge) Is Null));
Welcher Artikel wurde noch nie bestellt
Seite 9 von 12
2016
Die INSERT-Anweisung
INSERT INTO mitarbeiter (m_nr, m_name, m_vorname) values(15201,'Lang','Viktor')
INSERT INTO mit_neu(abt_nr, abt_name) select abt_nr, abt_name from abteilung
where stadt = 'München'
Die UPDATE-Anweisung
UPDATE arbeiten set aufgabe = 'Gruppenleiter' where m_nr = 18316 and pr_nr = 'p2‘
UPDATE projekt set mittel = mittel * 0.89
Die DELETE-Anweisung
Mit der DELETE-Anweisung werden Reihen aus einer Tabelle gelöscht.
Beispiel:
DELETE from <tabelle> where <bedingung>
DELETE from arbeiten where m_nr = (select m_nr from mitarbeiter where m_name =
'Mozer'
VIEWs
Jedes View wird mit der Anweisung CREATE VIEW erstellt. die allgemeine Form
dieser Anweisung ist:
CREATE VIEW <view_name> AS <select_anweisung>
Beispiel:
CREATE VIEW qrySachbearbeiter as select m_nr, pr_nr, einst_dat from arbeiten
where aufgabe = 'Sachbearbeiter‘
Seite 10 von 12
2016
Die Datendefinitionssprache DDL
Erstellen einer Tabelle
CREATE TABLE <Tabellenname> (<Spaltendef1>,<Spaltendef2>,...)
Eine Spaltendefinition baut sich wie folgt auf:
Bezeichner: Name des Attributs
Datentyp:
ChAR, SHORT,LONG,FLOAT,DOUBLE,Date,Blob,Bit,TEXT
Zusatz:
NOT NULL, WITH NULL, UNIQUE
NOT NULL: das Feld kann keine Null-Werte enthalten
WITH NULL: das Feld darf leer sein
UNIQUE: das Feld ist indiziert, keine doppelten Einträge
Beispiel:
CREATE TABLE Kunde (Id integer NOT NULL, Name varchar(15), Ort varchar(30))
Erstellen einer Tabelle Kunde mit den Spalten Id, Name, Ort
CREATE TABLE Kunde(id integer UNIQUE, Name varchar(15) NOT NULL)
create table abteilung (abt_nr varchar(4) not null, abt_name varchar(20) not null,
stadt char(15) null, primary key(abt_nr))
Primary Key-Klausel (CONSTRAINT)
CONSTRAINT <schluesselname> PRIMARY KEY <feldname>
CREATE TABLE Kunde (id integer CONSTRAINT PRIMARY KEY id, Name
varchar(30) NOT NULL)
Die referentielle Integrität
Sie ermöglicht dem Benutzer die Einschränkung in Bezug auf Tabellen, die einen
Primär- oder entsprechenden Fremdschlüssel enthalten.
create table abteilung (
abt_nr char(4) not null,
abt_name char(20) not null,
stadt char(15) null,
primary key(abt_nr))
Seite 11 von 12
2016
create table mitarbeiter (
m_nr integer not null,
m_name char(20) not null,
m_vorname char(20) not null,
abt_nr char(4) null,
primary key(m_nr),
foreign key(abt_nr) references abteilung(abt_nr))
Ändern einer Tabelle
ALTER TABLE <Tabellenname> <MODIFIER>
Modifier:
ADD COLUMN
ALTER COLUMN
DROP COLUMN
Hinzufügen von Spalten (ADD)
Ändern einer Spalte (MODIFY)
Löschen einer Spalte (DROP)
Beispiele:
ALTER TABLE Kunde ADD dummy SMALLINT
Hinzufügen der Spalte dumme zur Tabelle Kunde
ALTER TABLE Kunde MODIFY Name CHAR(30)
Ändern des Datentyps der Spalte Name der Tabelle Kunde
ALTER TABLE Kunde DROP dummy
Löschen der Spalte dummy aus der Tabelle Kunde
Seite 12 von 12
2016
Herunterladen