How to create an SQL
Vorweg
-
Analysieren die Tabellen
-
Wie stehen die Datensätze in Beziehung
-
Guck' Dir die Datensätze an
Template
m:n Beziehung. Patient kann in mehrern Zimmern liegen, in einem Zimmer liegen mehrere Parienten.
Patient_Aufenthalt ist die Zwischentabelle.
Bewegungsdaten
- Sind Nullwerte vorhanden?
- Wie sehen die IDs aus?
SELECT
-
Guck Dir an WAS selektiert werden muss.
-
Guck Dir an, WO die Felder herkommen.
-
Müssen Felder berechnet werden? (Aggregatfunktionen)
Template
Ergebnis der Abfrage !!!
SELECT Pat_Name, Pat_Vorname, Pat_GebDatum
Merke!!
ALLE (!) Felder, die in der Abfrage zu sehen sind, müssen in der SELECT Abfrage selektiert werden!
SELECT PatAuf_AufnahmeDatum as auf, PatAuf_EntlassDatum as ent,Z_Zimernummer, Stat_Station, Bett_Nummer,
(ent-auf)
as Dauer
SELECT Bett_Nummer
FROM
-
Guck Dir an WAS selektiert werden muss.
-
Guck Dir an, WO die Felder herkommen.
-
Alle Tabellen, in dem anzuzeigende Felder vorkommen, müssen selektiert werden.
-
Ist mehr als eine Tabelle involviert, muss gejoint werden.
-
Natural Join nur, wenn die Bezeichner gleich sind.
Template
-
Guck Dir an WAS selektiert werden muss.
-
Guck Dir an, WO die Felder herkommen.
-
Alle Tabellen, in dem anzuzeigende Felder vorkommen, müssen selektiert werden.
-
Ist mehr als eine Tabelle involviert, muss gejoint werden.
-
Natural Join nur, wenn die Bezeichner gleich sind.
Template
-
Guck Dir an WAS selektiert werden muss.
-
Guck Dir an, WO die Felder herkommen.
-
Alle Tabellen, in dem anzuzeigende Felder vorkommen, müssen selektiert werden.
-
Ist mehr als eine Tabelle involviert, muss gejoint werden.
-
Natural Join nur, wenn die Bezeichner gleich sind.
Template
SELECT Pat_Name, Pat_Vorname, Pat_GebDatum
FROM Patient
SELECT PatAuf_AufnahmeDatum as auf, PatAuf_EnlassDatum as ent,Z_Zimernummer, Stat_Station, Bett_Nummer, (enthalten-auf) as Dauer
SELECT PatAuf_AufnahmeDatum as auf, PatAuf_EnlassDatum as ent,Z_Zimernummer, Stat_Station, Bett_Nummer, (enthalten-auf) as Dauer
FROM (((Patient_Aufenthalt as PatAuf INNER JOIN Zimmer as Z ON PatAuf.PatAuf_ZID = Z.Z_ID) INNER JOIN Station as S ON Z_StatId = S.Stat_ID) INNER JOIN Bett as B ON Z.Z_BettID = B.Bett_ID)
SELECT PatAuf_AufnahmeDatum as auf, PatAuf_EnlassDatum as ent,Z_Zimernummer, Stat_Station, Bett_Nummer, (enthalten-auf) as Dauer
FROM (((Patient_Aufenthalt as PatAuf INNER JOIN Zimmer as Z ON PatAuf.PatAuf_ZID = Z.Z_ID) INNER JOIN Station as S ON Z_StatId = S.Stat_ID) INNER JOIN Bett as B ON Z.Z_BettID = B.Bett_ID)
SELECT PatAuf_AufnahmeDatum as auf, PatAuf_EnlassDatum as ent,Z_Zimernummer, Stat_Station, Bett_Nummer, (enthalten-auf) as Dauer
FROM (((Patient_Aufenthalt as PatAuf INNER JOIN Zimmer as Z ON PatAuf.PatAuf_ZID = Z.Z_ID) INNER JOIN Station as S ON Z_StatId = S.Stat_ID) INNER JOIN Bett as B ON Z.Z_BettID = B.Bett_ID)
SELECT Bett_Nummer
From Bett
WHERE
-
WHERE ist ein Filter!
-
Daten können ausgefiltert, oder eingefiltert werden.
Template
SELECT Name FROM Personen WHERE Name like "W%";
Eingefiltert, was soll angezeigt werden
SELECT Name FROM Personen WHERE Name not like "W%";
Ausgefiltert, was soll nicht angezeigt werden
SELECT Pat_Name, Pat_Vorname, Pat_GebDatum FROM Patient
SELECT PatAuf_AufnahmeDatum as auf, PatAuf_EnlassDatum as ent,Z_Zimernummer, Stat_Station, Bett_Nummer,
(ent-auf)
as Dauer
FROM ...
WHERE (Month(PatAuf_AufnahmeDatum) = 2 AND Year(PatAuf_AunahmeDatum) = 2020) OR
(Month(PatAuf_EnlassDatum) = 2 AND Year(PatAuf_EntlassDatum) = 2020);
Where waren (nur) 4 Punkte
SELECT Bett_Nummer FROM Betten
SELECT Bett_Nummer FROM Betten
Gedöns
... ORDER BY, GROUP BY ....
SELECT Pat_Name, Pat_Vorname, Pat_GebDatum
FROM Patient ORDER BY Pat_GebDatum DESC
SELECT Pat_Name, Pat_Vorname, Pat_GebDatum
FROM Patient ORDER BY Pat_GebDatum DESC, Pat_Name ASC
SELECT Pat_Name, Pat_Vorname, Pat_GebDatum
FROM Patient ORDER BY Pat_GebDatum DESC, Pat_Name ASC, Pat_Name DESC;
GROUP By nur bei Aggretatfunktionen
SELECT PatAuf_AufnahmeDatum as auf, PatAuf_EnlassDatum as ent,Z_Zimernummer, Stat_Station, Bett_Nummer,
(ent-auf)
as Dauer
FROM ...
WHERE (Month(PatAuf_AufnahmeDatum) = 2 AND Year(PatAuf_AunahmeDatum) = 2020) OR
(Month(PatAuf_EnlassDatum) = 2 AND Year(PatAuf_EntlassDatum) = 2020);
Merke
Bei Aggregatfunktionen müssen alle Werte in die GROUP BY Klausel, die Werte aus Tabellen sind.
Werte Aggregieren
SELECT Kunde.`Kunde_ID`,
COUNT(Rechnung.`Rg_KdID`) AS AnzahlRechnungen
FROM Rechnung JOIN Kunde on Rechnung.`Rg_KdID` = Kunde.`Kunde_ID`
GROUP BY Kunde.`Kunde_ID`
ORDER By AnzahlRechnungen DESC;
versus
SELECT Kunde.`Kunde_ID`,
(SELECT COUNT(Rechnung.`Rg_KdID`) AS AnzahlRechnungen
FROM Rechnung WHERE
Rechnung.`Rg_KdID` = Kunde.`Kunde_ID`) AS AnzahlRechnungen
FROM Kunde
ORDER By AnzahlRechnungen DESC;
Prüfungsvorbereitung
FI04
How to create an SQL
By neusta Coaching-Team
How to create an SQL
- 805