%Teilweise Erzeugt mit dem LaTeX-Generator: http://latex.sehnot.de

%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[10pt,oneside,a4paper]{scrartcl}

%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}

%neue Rechtschreibung
\usepackage[ngerman]{babel}

%Umlaute ermöglichen
\usepackage[utf8]{inputenc}

%Gesamtseitenzahl
\usepackage{lastpage}

% Kopf- und Fußzeile
\usepackage[automark]{scrpage2}

%Quellcode-Listings
\usepackage{listings}

%Hyperlinks
\usepackage{hyperref}

%Kopfzeile
\ihead{NoSQL}
\chead{}
\ohead{http://kohnlehome.de/datenbanken/sql-beziehungen.pdf}
\setheadsepline{0.5pt}

%Fußzeile
\setfootsepline{0.5pt}
\ifoot{Franz Kohnle}
\cfoot{Seite \thepage\ von  \pageref{LastPage}}
\ofoot{\today}

\pagestyle{scrheadings}

\begin{document}

% Überschrift 
\begin{center}
\LARGE % Schriftgröße
\bfseries % Fettdruck
\sffamily % Serifenlose Schrift
SQL: Beziehungen zwischen Tabellen
\end{center}

\section*{Beispieldaten}
{\linespread{0.5}\begin{verbatim}
+--------+ 1    n +----------+ n    m +------+
| Klasse |--------| Schueler |--------| Fach |
+--------+        +----------+        +------+
\end{verbatim}}


\section*{DDL: Definition des Datenbankschemas}
\begin{verbatim}
CREATE TABLE klasse (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name TEXT
);

CREATE TABLE schueler (
    id INT PRIMARY KEY AUTO_INCREMENT,
    vorname TEXT,
    nachname TEXT,
    klasse_id INT,
    FOREIGN KEY (klasse_id) REFERENCES klasse(id)
);

CREATE TABLE fach (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name TEXT
);

CREATE TABLE schueler_fach (
    schueler_id INT,
    fach_id INT,
    PRIMARY KEY(schueler_id, fach_id),
    FOREIGN KEY (schueler_id) REFERENCES schueler(id),
    FOREIGN KEY (fach_id) REFERENCES fach(id)
);
\end{verbatim}

\section*{DML: Hinzufügen von Datensätzen}
\begin{verbatim}
INSERT INTO klasse SET name = 'T2A';
INSERT INTO klasse SET name = 'T4A';
INSERT INTO klasse SET name = 'I2A';
INSERT INTO klasse SET name = 'I4A';

INSERT INTO fach SET name = 'DB';
INSERT INTO fach SET name = 'KN';
INSERT INTO fach SET name = 'SWT';

INSERT INTO schueler SET vorname = 'Anna', nachname = 'Arm', klasse_id = 3;
INSERT INTO schueler SET vorname = 'Berta', nachname = 'Bein', klasse_id = 4;
INSERT INTO schueler SET vorname = 'Carla', nachname = 'Copf', klasse_id = 4;
INSERT INTO schueler SET vorname = 'Dieter', nachname = 'Darm', klasse_id = 4;
INSERT INTO schueler SET vorname = 'Emma', nachname = 'Elle', klasse_id = 2;
\end{verbatim}

\section*{DML: Schüler\_innen waehlen Fach}
\begin{verbatim}
INSERT INTO schueler_fach SET schueler_id = 2, fach_id = 1;
INSERT INTO schueler_fach SET schueler_id = 3, fach_id = 1;
INSERT INTO schueler_fach SET schueler_id = 4, fach_id = 1;

INSERT INTO schueler_fach SET schueler_id = 2, fach_id = 3;
INSERT INTO schueler_fach SET schueler_id = 4, fach_id = 3;
\end{verbatim}

\section*{DML/DQL: Lesen}
\subsection*{Die Namen aller Schüler\_innen der Klasse I4A}
\begin{verbatim}
SELECT schueler.vorname, schueler.nachname
FROM schueler
JOIN klasse ON schueler.klasse_id = klasse.id
WHERE klasse.name = 'I4A';
\end{verbatim}

\subsection*{Die Namen aller Schüler\_innen im Fach SWT}
\begin{verbatim}
SELECT schueler.vorname, schueler.nachname
FROM schueler
JOIN schueler_fach ON schueler.id = schueler_fach.schueler_id
JOIN fach ON fach.id = schueler_fach.fach_id
WHERE fach.name = 'SWT';
\end{verbatim}

\subsection*{Die Namen aller Fächer der Schülerin Berta}
\begin{verbatim}
SELECT fach.name
FROM fach
JOIN schueler_fach ON fach.id = schueler_fach.fach_id
JOIN schueler ON schueler.id = schueler_fach.schueler_id
WHERE schueler.vorname = 'Berta';
\end{verbatim}

\end{document}
