Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Die SQL ORDER BY Clause

Geschrieben von: Christian Holm
Kategorie: Datenbank

This printed page brought to you by AlphaSierraPapa

In manchen Fällen ist es nicht nur wichtig die Daten einer Datenbank zu filtern, sondern auch nach bestimmten Kriterien zu sortieren. Bei Verwendung einer ASP Seite und ADO, geschieht dies am einfachsten und schnellsten mit der SQL ORDER BY Clause. Anhand von einfachen Beispielen zeigt dieser Artikel die programmatische Durchführung.

Wenn Sie den Beispiel-Sourcecode selbst ausprobieren möchten, so benötigen Sie Microsoft SQL Server 7.0 (oder höher). Die Beispiele verwenden die folgende Zugangsberechtigung: uid=sa; pwd=;. Als Beispieldatenbank habe ich die Northwind Datenbank herangezogen. Diese ist standardmäßig in den Beispieldatenbanken des SQL Servers enthalten. Wenn die SQL Server Datenbank nicht auf dem lokalen Computer (dem Webserver) installiert ist, so müssen Sie zusätzlich den Data Source Parameter im Connection-String auf den Namen (oder die IP Adresse) des Datenbankservers ändern.

Die Sortierung von Datensätzten

Da man bei einer Datenbankabfrage normalerweise ein SQL-Statement verwendet, bietet es sich an, den SQL String einfach zu erweitern. Um also Datensätze sortieren zu können, gibt es in SQL die sogenannte ORDER BY Clause, und das sieht generell wie folgt aus:

' SQL Statement(s) bzw. dazugehörige Clauses
ORDER BY Feld1 Reihenfolge(,Feld2 Reihenfolge)(, ...)

Mit Feld1, Feld2, etc. geben Sie die Felder an, nach denen Sie sortieren möchten. Bei den Feldern handelt es sich in einer Datenbank um die Datenspalten.

Durch die optionale Angabe der Reihenfolge sortieren Sie die Datensätze entweder in aufsteigender oder absteigender Reihenfolge. Aufsteigend bedeudet, daß Buchstaben von A bis Z, und Zahlen von 0 bis 9 sortiert werden. Die aufsteigende Reihenfolge wird explizit durch den Ausdruck ASC (ascending) angegeben. Da aber die standardmäßige Einstellung der Sortierreihenfolge auch aufsteigend ist, kann der Ausdruck auch weggelassen werden.

Um die Datensätze absteigend - Buchstaben von Z bis A, und Zahlen von 9 bis 0 - zu sortieren geben Sie den Ausdruck DESC (descending) an.

Wie zuvor erwähnt, fügt man also das Statement einfach dem SQL-String hinzu. Das nun folgende Beispiel soll dies nun demonstrieren.

Einfache Sortierung

Für dieses Beispiel habe ich die Products Tabelle der Northwind Datenbank herangezogen. Mit der ORDER BY Clause lasse ich mir die angeforderten Datensätze aufsteigend alphabetisch sortieren. Die WHERE Clause des SQL-Strings dient nur dazu, um die Anzahl der zurückgelieferten Datensätze auf ein erträgliches Maß zu limiteren. Da dies ja nur ein Vorzeigebeispiel sein soll, reicht es, nur eine handvoll Daten auszulesen.

Hier nun der gesamte Sourcecode des Beispiels (orderby_simple.asp):

<% @LANGUAGE = VBScript %>

<%
  Option Explicit
  Dim objConn, objRS
  Dim strConn, strSQL

  Set objConn = Server.CreateObject("ADODB.Connection")

  strConn = "DSN=Northwind;UID=sa; PWD=;"
  
  objConn.Open strConn

  Set objRS = Server.CreateObject("ADODB.Recordset")
  Set objRS.ActiveConnection = objConn

  strSQL ="SELECT Products.ProductName, Products.UnitPrice "
  strSQL = strSQL & "FROM Products "
  strSQL = strSQL & "WHERE Products.UnitPrice <= $15 "
  strSQL = strSQL & "ORDER BY Products.ProductName ASC"

  objRS.Open strSQL

  Response.Write "<table cellspacing=2 cellpadding=2 border=2>"
  Response.Write "<th>Produkt Name</th><th>Preis (USD)</th>"

  While Not objRS.EOF
      Response.Write "<tr>"
      Response.Write "<td>" & objRS("ProductName") & "</td><td> "
      Response.Write objRS("UnitPrice") & "</td>"
      Response.Write "</tr>"      
      objRS.MoveNext
  Wend

  Response.Write "</table>"
objRS.Close
objConn.Close
Set objRS = Nothing
Set objConn = Nothing

%>

Nach Angabe der verwendeten Skriptsprache folgt die Deklaration der benötigten Variablen. Die Deklaration der Variablen strConn, strSQL ist natürlich optional, da Sie ja die jeweiligen Informationen direkt bei den Objekten angeben können. Wenn Sie jedoch diese trotzdem deklarieren, wird der Sourcecode flexibler.

Nun können wir mit Hilfe von Server.CreateObject das Connection Objekt erstellen. Dann defineren wir den Connection String (strConn), der die nötigen Informationen für die Datenbankverbindung enthält. Nicht zu vergessen ist dabei die vorherige Erstellung eines DSNs (Data Source Name) für die Northwind-Datenbank, falls man über ODBC aud die Datenbank zugreifen möchte.

Dies erledigen Sie am einfachsten im ODBC (Open Database Connectivity) Data Source Administrator, wo Sie einen System DSN erstellen.

Um die Verbindung zur Datenbank zu öffnen, verwenden wir die Open Methode des Objektes, und geben als Parameter den Connection String (strConn), welcher die Verbindungsinformationen enthält, an.

Wir erstellen nun das Recordset Objekt und weisen es der aktiven Verbindung zur Datenbank zu (Set objRS.ActiveConnection = objConn). Jetzt erstellen wir die SQL Abfrage, welche die ORDER BY Clause enthält. Diese Abfrage weisen wir dem strSQL String zu.

Um die SQL-Abfrage gegen die Datenbank auszuführen zu können, verwenden wir die Open Methode des erstellten Recordset Objektes. Als Property geben wir den SQL-String an.

Um das Resultat optisch etwas aufzubessern, schreibe ich die erhaltenen Datensätze in einen HTML Table. Da immer nur ein Recordset zurückgegeben wird, muß der Vorgang mit einer WHILE Schleife bis zum letzten Datensatz wiederholt werden.

Um den Datensatz-Cursor zum nächstfolgenden Datensatz weiter zu bewegen, verwenden wir die MoveNext Methode des Objektes.

Abschließend geben wir die nicht mehr benötigten Serverresourcen wieder frei, indem wir die Close Methode der jeweiligen Objekte verwenden. Dann zerstören wir die beiden Objekte mit Set ... = Nothing.

Das Resultat sieht dann im Browser folgendermaßen aus:

Mehrfach Sortierungen

Damit die ORDER BY Clause auch komplexeren Ansprüchen genügt, kann man mehrere Felder zur Sortierung angeben. Im abschließenden Beispiel (orderby_2Args.asp) habe ich den Stückpreis (UnitPrice) absteigend und den Produktnamen (ProductName) aufsteigend sortieren lassen.

Da ich der Einfachheit halber den Sourcecode bis auf das SQL-Statement im Vergleich zum vorigen Beispiel unverändert gelassen habe, führe ich hier nur das SQL-Statement an:

...
strSQL ="SELECT Products.ProductID, Products.ProductName, Products.UnitPrice "
strSQL = strSQL & "FROM Products "
strSQL = strSQL & "WHERE Products.UnitPrice <= $15 "
strSQL = strSQL & "ORDER BY Products.UnitPrice DESC, Products.ProductName"
...

Der Unterschied macht sich bemerkbar, wie der folgende Screenshot beweist:

Schlußbemerkung

Mit Hilfe der ORDER BY SQL-Clause kann man einfach und schnell Datensätze einer SQL-Abfrage sortieren. Zugegeben, die Möglichkeiten sind beschränkt auf auf- bzw. absteigend, aber durch Angabe mehrerer Felder im Statement, lassen sich die Möglichkeiten der Anwendung erweitern.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20001201.zip

Verwandte Artikel

ADO und ASP - Datenbanken einmal näher betrachtet
http:/www.aspheute.com/artikel/19990825.htm
Benutzerverwaltung leicht gemacht: Teil 1
http:/www.aspheute.com/artikel/20020429.htm
Der SQL UNION Operator
http:/www.aspheute.com/artikel/20011015.htm
Eigenschaften der Connection und Recordset Objekte
http:/www.aspheute.com/artikel/19990811.htm
Ein einfacher Query Analyzer
http:/www.aspheute.com/artikel/20010420.htm
Eine kleine Bilddatenbank, Teil 1
http:/www.aspheute.com/artikel/20020703.htm
Intelligente Meta-Tags
http:/www.aspheute.com/artikel/20010620.htm
ODBC und ASP - Eine DSN zur Verwendung mit ASP definieren
http:/www.aspheute.com/artikel/19990826.htm
Optimiertes Erstellen von DropDowns
http:/www.aspheute.com/artikel/20040901.htm
Stored Procedures einfach erstellt
http:/www.aspheute.com/artikel/20020903.htm
T-SQL Clauses: GROUP BY und HAVING
http:/www.aspheute.com/artikel/20011017.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.