Organisatorisches SQL Datenbanken Unit 7: Normalisierung Ronald Ortner 3. V. 2016 Ronald Ortner Normalisierung: Weitere Beispiele Organisatorisches SQL Outline 1 Organisatorisches 2 SQL 3 Normalisierung: Weitere Beispiele Ronald Ortner Normalisierung: Weitere Beispiele Organisatorisches SQL Normalisierung: Weitere Beispiele Organisatorisches Nächste Woche findet der zweite Zwischentest statt. Stoff: Alles bisher, exklusive heute (ohne Self Joins) Aufsicht übernimmt Martin Antenreiter. VO entfällt an diesem Tag. Neue ÜBeispiele abzugeben bis 24. Mai. NULL-Werte im ersten Zwischentest: 100% = 9 Punkte Ronald Ortner Organisatorisches SQL SQL Nachbesprechung Wissensüberprüfung Fragen zum Zwischentest? Self Joins Ronald Ortner Normalisierung: Weitere Beispiele Organisatorisches SQL Nachbesprechung Wissensüberprüfung WHERE vs. HAVING HAVING verlangt Booleschen Wert! “Totaler” Join Ronald Ortner Normalisierung: Weitere Beispiele Organisatorisches SQL Normalisierung: Weitere Beispiele WHERE vs. HAVING Gute Angewohnheit: Ins HAVING kommen nur Bedingungen an Aggregatfunktionen. Ronald Ortner Organisatorisches SQL Normalisierung: Weitere Beispiele WHERE vs. HAVING Gute Angewohnheit: Ins HAVING kommen nur Bedingungen an Aggregatfunktionen. Beispiel aus Wissensüberprüfung: SELECT b.name, r.amount FROM receipt r JOIN badguy b ON r.badguy = b.id WHERE r.notes LIKE ’Credit Card’ AND r.amount > (SELECT AVG(r.amount) FROM receipt r HAVING r.notes =’Credit Card’) Ronald Ortner Organisatorisches SQL Normalisierung: Weitere Beispiele WHERE vs. HAVING Gute Angewohnheit: Ins HAVING kommen nur Bedingungen an Aggregatfunktionen. Beispiel aus Wissensüberprüfung: SELECT b.name, r.amount FROM receipt r JOIN badguy b ON r.badguy = b.id WHERE r.notes LIKE ’Credit Card’ AND r.amount > (SELECT AVG(r.amount) FROM receipt r HAVING r.notes =’Credit Card’) Unbeabsichtigte korrelierte Subquery! Ronald Ortner Organisatorisches SQL Normalisierung: Weitere Beispiele HAVING verlangt Booleschen Wert! Im HAVING muss ein Boolescher Wert stehen. Fantasiekonstruktionen a la HAVING MAX(score) funktionieren nicht!!! Ronald Ortner Organisatorisches SQL Normalisierung: Weitere Beispiele “Totaler” Join Joins auf alle Tabellen der Datenbank sind keine gute Idee: manche Einträge fallen raus zuviele Einträge bei N : M-Relationen ( falsches Ergebnis für COUNT bzw. SUM) Performance Join immer nur auf jene Tabellen, die für Beantwortung der Frage benötigt werden! Ronald Ortner Organisatorisches Fragen Fragen zum Zwischentest? Ronald Ortner SQL Normalisierung: Weitere Beispiele