Data-Mining-Tipps für die SQL-Befehlszeile

Bei der Verwendung der SQL-Befehlszeile brauchen Sie sich nicht mit SELECT-Statements mit WHERE-Clauses zufriedenzugeben, die nur dazu führen, dass Sie durch Daten scrollen, die Sie gar nicht brauchen.

Sie können Wildcards in Ihren WHERE-Clauses einsetzen, um Abfragen zu erzeugen, die Ihnen auf ungenaue (nicht 100%-ige) Text-Matches basierende Einträge liefern. Ich werde auch zwei Schlüsselworte oder Keywords betrachten, die Ihnen dabei helfen können, Ihre Tabellen mit „Power Searches“ zu durchsuchen.

Der Wildcard-Faktor
In einem früheren Artikel („Fine-tune WHERE clauses in SQL“) habe ich erklärt, wie man Einträge lokalisieren kann, in denen zumindest eine Spalte einen Wert enthält, der gegenüber einem anderen Wert größer, kleiner oder gleich ist. Beim Schreiben dieser WHERE-Clauses verwendete ich die Operatoren =, >, <, >= und <=.

Neben diesen mathematischen Operatoren unterstützen die meisten SQL-Implementierungen zwei Wildcards, das Prozentzeichen und den Unterstrich (% und _). Das Prozentzeichen ist ein besonderes Zeichen in der SQL-Syntax, es ist eine Wildcard, die für eine beliebige Anzahl von Zeichen stehen kann. Der Unterstrich repräsentiert als Wildcard ein einzelnes Zeichen.

Verwendet man diese Wildcards gemeinsam mit dem Keyword LIKE, kann man ungenaue (fuzzy) Abfragen der Einträge einer Datenbank durchführen. Tabelle A zeigt die in SQL möglichen Wildcards. Zum Vergleich führe ich auch die entsprechenden DOS-Wildcards auf.





  Steht für ein einzelnes Zeichen Steht für eine beliebige Zeichenkette
SQL _ %
DOS ? *

Tabelle A: Mit SQL-Wildcards kann man die Suche nach Einträgen in einer Datenbank genauso individuell gestalten, wie dies mit DOS-Wildcards bei der Suche nach Dateien möglich ist.

Innerhalb einer WHERE-Clause löst das Keyword LIKE eine ungenaue (fuzzy) Suche aus. Nehmen wir zum besseren Verständnis an, Sie sollen alle Kundeneinträge überprüfen, deren Nachname mit einem P beginnt. Geht man davon aus, dass die Tabelle einen Feldnamen Lname für die Nachnamen enthält, dann würde Ihr SELECT-Statement in etwa so aussehen:

SELECT * FROM Customer WHERE 
Lname LIKE P%

Diese Abfrage liefert nur Einträge für Kunden, deren Nachnamen mit dem Buchstaben P beginnen.

Diese Wildcard ist auch praktisch, wenn man sich über die Schreibweise des Namens eines Kunden nicht sicher ist. Wenn Sie glauben, dass sich der gesuchte Name sowohl Spaulding als auch Spalding schreiben könnte, können Sie einen Befehl in dieser Form ausführen:

SELECT * FROM Customer WHERE 
Lname LIKE Spa%

Dieser Befehl sucht Einträge mit den Nachnamen Spaulding, Spalding, Spanning und alle anderen Nachnamen, die mit den Buchstaben Spa beginnen.

Manchmal ist nur ein Zeichen die einzige Variable in einer Zeichenkette. In diesen Fällen kann man den Unterstrich (_), SQLs zweites Wildcard-Zeichen, benutzen. Der Befehl

SELECT * FROM Customer WHERE 
Lname LIKE L_

zeigt zum Beispiel Einträge an, die im Feld Lname Namen wie La, Le, Li, Lo, Lu und Ly enthalten.

Anpassung der Anfrage mit dem Keyword IN
Das Keyword IN bietet ein weiteres hervorragendes Werkzeug zum Data-Mining. Um seine Verwendung zu verstehen, betrachten Sie die mathematischen Operatoren =, > und <=, mit denen man, basierend auf festen Regeln wie 'ist gleich', 'größer als', 'kleiner als' oder 'kleiner gleich', Einträge auswählen kann, die, verglichen mit anderen Werten, diese Anforderungen erfüllen.

Das Keyword IN findet Einträge nicht auf der Grundlage einfacher Vergleiche von Werten, sondern ermöglicht dem Anwender die Spezifizierung einer Liste von Werten, die SQL zur Abfrage der Tabelle verwenden soll. Nehmen wir zum Beispiel an, Sie werden gebeten, eine Liste aller Einträge für Kunden zu erstellen, die in den folgenden Postleitzahlbereichen leben: 48012, 49014, und 49088.

Auf der Grundlage dessen, was Sie in SQL 101 gelernt haben, könnten Sie einen solchen SELECT-Befehl schreiben:

SELECT * FROM Customer WHERE Zip="48012" 
OR Zip="49014" OR Zip="49088"

Allerdings benötigt dieser Befehl 70 Zeichen (einschließlich der Leerzeichen). Möchte man nun dieser Liste weitere Postleitzahlen hinzufügen, muss man noch mehr OR-Clauses anfügen. Um Schreibarbeit zu sparen, können Sie das Keyword IN verwenden, um den gleichen Befehl mit nur 61 Zeichen auszudrücken:

SELECT * FROM Customer WHERE Zip IN 
("48012","49014","49088")

Um nun dieser individuellen Abfrage weitere Postleitzahlen hinzuzufügen, braucht man diese nur in die Optionenliste innerhalb der Klammer zu schreiben. Übrigens, wir verwendeten die Anführungszeichen zur Begrenzung der Postleitzahlen, denn sie sind in unserer Tabelle in Text- bzw. Zeichenfeldern gespeichert. Verwenden Sie das Keyword IN, um Werte aus einem numerischen Feld aufzulisten, können Sie diese Werte ohne die Anführungszeichen eingeben.

Lassen Sie BETWEEN für sich rechnen
Das Keyword BETWEEN arbeitet auf eine sehr ähnliche Wiese wie IN. Bei der Suche nach Einträgen, deren Werte in einem bestimmten Bereich liegen, kann man mit Hilfe des Keywords BETWEEN Schreibarbeit sparen. Wollen Sie zum Beispiel Einträge lokalisieren wollen, deren Werte im Feld Current_balance zwischen 1000 und einschließlich 2000 liegen, können Sie ein Statement in dieser Form verwenden:

SELECT * FROM Customer WHERE 
Current_balance>=1000 AND
Current_balance<=2000

Dieses Statement erfordert allerdings 79 Anschläge. Mit dem Keyword BETWEEN würde das Statement folgendermaßen aussehen:

SELECT * FROM Customer WHERE 
Current_balance BETWEEN (1000,2000)

 

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

ZDNet für mobile Geräte
ZDNet-App für Android herunterladen Lesen Sie ZDNet-Artikel in Google Currents ZDNet-App für iOS

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Data-Mining-Tipps für die SQL-Befehlszeile

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *