7th May 2025 4 Leseminuten Die nutzlosesten SQL-Abfragen (und was Sie stattdessen tun sollten) LearnSQL.de Team SQL-Übungen SQL Inhaltsverzeichnis 1. Alles ohne Zweck auswählen 2. Zählen von allem ohne Filterung 3. Standardmäßige Reihenfolge, wenn die Reihenfolge keine Rolle spielt 4. Sortieren ohne Limit 5. Gruppierung ohne aussagekräftige Bezeichnungen 6. HAVING anstelle von WHERE zum Filtern von Zeilen verwenden 7. Filtern nach berechneten Spalten ohne Indizierung 8. Unterabfragen anstelle von Joins verwenden 9. Self-Joining anstelle der Verwendung von Fensterfunktionen Schreiben Sie intelligenteres SQL, nicht nur gültiges SQL Sie werden ausgeführt. Sie geben Daten zurück. Aber sie sind sinnlos. Hier erfahren Sie, was Sie nicht in SQL schreiben sollten - und was Sie stattdessen tun können. Manche SQL-Abfragen laufen gut - aber das bedeutet nicht, dass sie etwas Sinnvolles tun. In diesem Artikel werden wir echte Beispiele von SQL-Abfragen durchgehen, die gültig sind, harmlos aussehen und völlig sinnlos sind. Sie verschwenden Ressourcen, verbergen Erkenntnisse oder sind einfach nur störend. Für jede dieser Abfragen erfahren Sie, was falsch ist und wie Sie stattdessen eine intelligentere Alternative schreiben können. Möchten Sie sofort üben, bessere Abfragen zu schreiben? Versuchen Sie den SQL-Praxis Track auf LearnSQL.de - er hilft Ihnen dabei, die Theorie in Können zu verwandeln, mit 12 Kursen und über 1000 interaktiven Übungen. Lassen Sie uns mit dem Müll aufräumen und Abfragen schreiben, die die Aufgabe tatsächlich erfüllen. 1. Alles ohne Zweck auswählen Die Abfrage: SELECT * FROM orders; Warum sie nutzlos ist: Sie zieht unnötige Daten, verlangsamt die Abfragen und belastet die Datenbank. Was Sie stattdessen tun sollten: Geben Sie nur die erforderlichen Spalten an, um die Leistung zu verbessern. Bessere Abfrage: SELECT order_id, customer_id, total_amount FROM orders; 2. Zählen von allem ohne Filterung Die Abfrage: SELECT COUNT(*) FROM orders; Warum sie nutzlos ist: Sie liefert oft irreführende Erkenntnisse, wenn sie nicht gefiltert wird. Was Sie stattdessen tun sollten: Verwenden Sie WHERE Bedingungen oder GROUP BY für eine bessere Genauigkeit. Bessere Abfrage: SELECT COUNT(*) FROM orders WHERE status = 'completed'; 3. Standardmäßige Reihenfolge, wenn die Reihenfolge keine Rolle spielt Die Abfrage: SELECT total_amount FROM orders ORDER BY customer_id; Warum sie nutzlos ist: Verlängert die Verarbeitungszeit, ohne die Analyse zu verbessern. Was Sie stattdessen tun sollten: Verwenden Sie ORDER BY absichtpch, z. B. für Berichte oder zur Visuapsierung. Bessere Abfrage: Verwenden Sie ORDER BY nur, wenn es notwendig ist; SELECT total_amount FROM orders; 4. Sortieren ohne Limit Diese Abfrage ist ähnlich wie die vorherige. Die Abfrage: SELECT order_id, customer_id, total_amount FROM orders ORDER BY created_at DESC; Warum sie nutzlos ist: Das Sortieren großer Datensätze ohne Einschränkungen ist ineffizient. Was stattdessen zu tun ist: Wenn möglich, verwenden Sie LIMIT oder TOP. Bessere Abfrage: SELECT order_id, customer_id, total_amount FROM orders ORDER BY created_at DESC LIMIT 10; 5. Gruppierung ohne aussagekräftige Bezeichnungen Die Abfrage: SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id; Warum sie nutzlos ist: IDs allein bieten keinen Kontext - die Ergebnisse sind schwer zu interpretieren und nicht umsetzbar. Was Sie stattdessen tun sollten: Stellen Sie sicher, dass Sie eine aussagekräftige Bezeichnung wie Name oder E-Mail angeben. Bessere Abfrage: SELECT o.customer_id, c.email, COUNT(*) AS total_orders FROM orders o JOIN customers c ON o.customer_id = c.id GROUP BY o.customer_id, c.email; 6. HAVING anstelle von WHERE zum Filtern von Zeilen verwenden Die Abfrage: SELECT order_id, customer_id, total_amount FROM orders HAVING total_amount > 100; Warum es nutzlos ist: HAVING ist für Aggregatfilterung gedacht, nicht für Zeilenfilterung. Obwohl es technisch funktioniert, wird es den Leser der Abfrage davon ablenken, Ihre Absicht zu verstehen. Was Sie stattdessen tun sollten: Verwenden Sie WHERE vor der Aggregation. Bessere Abfrage: SELECT order_id, customer_id, total_amount FROM orders WHERE total_amount > 100; 7. Filtern nach berechneten Spalten ohne Indizierung Die Abfrage: SELECT order_id, customer_id, total_amount FROM orders WHERE YEAR(created_at) = 2023; Warum sie nutzlos ist: Verhindert die Verwendung von Indizes und verursacht vollständige Tabellenscans. Was stattdessen zu tun ist: Verwenden Sie bereichsbasiertes Filtern, um Indizes zu nutzen. Bessere Abfrage: SELECT order_id, customer_id, total_amount FROM orders WHERE created_at >= '2023-01-01' AND created_at < '2024-01-01'; 8. Unterabfragen anstelle von Joins verwenden Die Abfrage: SELECT order_id, customer_id, total_amount FROM orders WHERE customer_id IN (SELECT customer_id FROM blacklisted_customers); Warum sie nutzlos ist: kann im Vergleich zu JOINzu einer langsamen Leistung führen. Was stattdessen zu tun ist: Verwenden Sie eine INNER JOIN oder LEFT JOIN. Bessere Abfrage: SELECT o.order_id, o.customer_id, o.total_amount FROM orders o JOIN blacklisted_customers b ON o.customer_id = b.customer_id; 9. Self-Joining anstelle der Verwendung von Fensterfunktionen Die Abfrage: SELECT o1.customer_id, o1.order_id, COUNT(*) AS row_num FROM orders o1 JOIN orders o2 ON o1.customer_id = o2.customer_id AND o1.order_date >= o2.order_date GROUP BY o1.customer_id, o1.order_id; Warum sie nutzlos ist: Sie verursacht unnötige Komplexität und Doppelarbeit. Was stattdessen zu tun ist: Verwenden Sie Fensterfunktionen wie ROW_NUMBER(), RANK(), oder LAG(). Bessere Abfrage: SELECT customer_id, order_id, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS row_num FROM orders; Schreiben Sie intelligenteres SQL, nicht nur gültiges SQL Nur weil eine Abfrage läuft, heißt das nicht, dass sie hilfreich ist. Wenn Sie diese häufigen Fallen vermeiden, wird Ihr SQL schneller, sauberer und viel nützlicher. Wenn Sie weiter üben wollen, wie man Abfragen richtig schreibt, besuchen Sie den SQL-Praxis Track auf LearnSQL.de. Er ist vollgepackt mit praktischen Übungen, die Ihnen helfen, Ihre Fähigkeiten zu verbessern, indem Sie etwas tun - nicht nur lesen. Tags: SQL-Übungen SQL