Datenbanken Das relationelle Modell und die relationelle Algebra bilden das theoretische Fundament von SQL

Wichtige Unterschiede :

In SQL gibt es Duplikate ! in der RA werden Mengen betrachtet

Datentypen in SQL :

int, smallint, bigint float char(n) varchar(n) date,time,datetime money blob / blob für große Binär- bzw Textdaten

Die Verfügbarkeit und Benennung der Datentypen unterscheidet sich (leider) zwischen RDBMSs In der VL : MS SQL Server und SQLITE

JOINS

Natural Join

SELECT * 
FROM Professoren, Vorlesungen
WHERE Professoren.PersNr = Vorlesungen.PersNr

SELECT * 
FROM Professoren NATURAL JOIN Vorlesungen

Woher weiß SQL, dass auf PersNr gejoint wird ?

Durch einen Natural Join werden direkt Attribute mit gleichem Namen gejoined

Allgemeiner Join

Wir nennen die Tabellen in der FROM Klausel, Join-Prädikat wird in der WHERE Klausel gennant, oder : JOIN ON verwenden

SELECT * 
FROM Professoren, Studenten
WHERE Professoren.Name = Studenten.Name

SELECT * 
FROM Professoren
JOIN Studenten
ON   Professoren.Name = Studenten.Name

Mengen Operationen :

  • UNION
  • INTERSECT
  • EXCEPT
SELECT Name
FROM Studenten
EXCEPT
SELECT Name
FROM Professoren

4.5 Datenmanipulation

Durch die DML lönnen wir Tuperl Aktualisieren, EInfügen und sogar löschen!

Das RDBMS - Relational Database Management System überprüft bei den Operationen die jeweiligen Integrittätsbedingungen( Bsp : Primärschlüssel oder Fremdschlüssel) und verweigert bei Verletzung die Ausführung

	INSERT INTO Professoren 
		VALUES (183422, 'Carla' , 'Cannon', 'Literatur)

	INSERT INTO Professoren ( Name, Fach, Vorname, PersNr)
		VALUES ('Carla', 'Columna', 'Literatur, 183422)
UPDATE Studenten
SET Name = 'Cole'
WHERE PersNr = 19866

UPDATE Studenten
SET Semester = Semester + 1
DELETE FROM STUDENTEN
WHERE Fach = 'Datenverarbeitung'

Umbennenung vgl S.70 Korrelierte / Unkorrelierte Anfragen S.71

4.6 Äußere Joins

Professoren und Studenten mit gleichem Namen ( erhaltung aller Professoren)

SELECT * 
FROM Professoren LEFT OUTER JOIN Studenten
WHERE Professoren.Name = Studenten.Name

Full Outer Join : ( Erhaltung aller Tupel)

SELECT * 
FROM Professoren FULL OUTER JOIN Studenten
WHERE Professoren.Name = Studenten.Name

4.7 Gruppierung & Aggregation

Hiermit lönnen wir Aggregat-Funktionen auf Gruppen von Tupeln anwenden Beispiele : Durchschnitts Note je Vorlesung SWS je Professor Anzahl der Studenten je Fach

Fächer Absteigend Sortiert nach Anzahl der Studenten :

SELECT Fach, Count(*) as ANZAHL 
FROM Studenten
GROUP BY Fach
ORDER BY ANZAHL DESC

Namen von Professoren in versch Fächern :

SELECT    Name, Fach, Count( * )
FROM      Professoren
GROUP BY  Fach, Name 

4.8 Quantifizierung

SELECT * 
FROM Professoren p
WHERE EXISTS (
    SELECT * FROM Studenten s WHERE p.Vorname = s.Vorname
);

Hierbei ist dies eine Korrelierte Anfrage.

Geben Sie aus wie viele Künstler es aus jedem Herkunftsland gibt, absteigend sortiert nach der ermittelten Anzahl.

SELECT  DISTINCT Location , Count(*) As ANZAHL  
FROM Artists  
Group By Location  
ORDER BY ANZAHL DESC