JonH hat den Teil zum Schreiben der Abfrage sehr gut behandelt. Es gibt jedoch noch ein weiteres wichtiges Problem, das erwähnt werden muss, nämlich die Leistungsmerkmale einer solchen Abfrage. Wiederholen wir es hier (angepasst an Oracle):
SELECT EmployeeName FROM EmployeeTable WHERE LENGTH(EmployeeName) > 4;
Diese Abfrage beschränkt das Ergebnis einer Funktion, die auf einen Spaltenwert angewendet wird (das Ergebnis der Anwendung der LENGTHFunktion auf die EmployeeNameSpalte). In Oracle und wahrscheinlich in allen anderen RDBMS bedeutet dies, dass ein regulärer Index für EmployeeName für die Beantwortung dieser Abfrage unbrauchbar ist. Die Datenbank führt einen vollständigen Tabellenscan durch, was sehr kostspielig sein kann.
Verschiedene Datenbanken bieten jedoch eine Funktion für Funktionsindizes, mit der solche Abfragen beschleunigt werden sollen. In Oracle können Sie beispielsweise einen Index wie den folgenden erstellen:
CREATE INDEX EmployeeTable_EmployeeName_Length ON EmployeeTable(LENGTH(EmployeeName));
Dies kann in Ihrem Fall jedoch immer noch nicht hilfreich sein, da der Index für Ihre Erkrankung möglicherweise nicht sehr selektiv ist. Damit meine ich Folgendes: Sie fragen nach Zeilen, in denen der Name länger als 4 ist. Nehmen wir an, dass 80% der Mitarbeiternamen in dieser Tabelle länger als 4 sind. Nun, dann wird die Datenbank wahrscheinlich geschlossen ( richtig), dass es sich nicht lohnt, den Index zu verwenden, da er wahrscheinlich sowieso die meisten Blöcke in der Tabelle lesen muss.
Wenn Sie jedoch die Abfrage in "ändern" ändern LENGTH(EmployeeName) <= 4oder LENGTH(EmployeeName) > 35davon ausgehen, dass nur sehr wenige Mitarbeiter Namen mit weniger als 5 oder mehr als 35 Zeichen haben, wird der Index ausgewählt und die Leistung verbessert.
Kurz gesagt: Achten Sie auf die Leistungsmerkmale von Abfragen wie der, die Sie schreiben möchten.
ANDAnweisung hinzu, z. B.SELECT city FROM student.zipcode WHERE LENGTH(city) >= 4 AND LENGTH(city) <= 9;