mk-prg-net \ ms-sql \ tsql \queries \intro

Select ...

Qeuery Optimizer

Mittels der Select- Befehl können Teilmengen aus der Datenbank extrahiert und verarbeitet werden. Dabei wird die Herkunft der Daten, Einschränkungen, die sie erfüllen deklariert. Der Datenbankserver erstellt aus der Deklaration selbständig ein Programm, dessen Ausführung die gewünschte Datenmenge liefert. Das Ergebnis wird Resultset

                    +-----------------+
 Select- Befehl --->|                 |
                    | Datenbankserver |
    {Resultset} <---|                 |
                    +-----------------+



Die Select- Anweisung gliedert sich wie folgt auf:

  select       <Liste von Spaltenoperationen> | *
from         <Liste der Datenquellen>
where        <Filterausdruck, den die ausgewählten Zeilen erfüllen müssen>
group by     <Liste der Spalten, bezüglich der zu gruppieren ist>
having       <Filterausdruck, den alles ausgewählten Gruppen erfüllen müssen>
order by     <Liste der Spalten, bezüglich der zu sortieren ist>



Select *

Die Resultsets enthalten alle Spalten aller betroffener Tabellen:

  use dmsmin
go
select *
from data.FileInfos

Select <Liste von Spaltenoperationen>

Durch die Liste von Spaltenoperationen wird das Format des Resultset bestimmt. Im einfachsten Fall können alle Spalten der ausgewählten Datensätze angezeigt werden

Spaltenoperationen werden in aggregierende und nicht aggregierende unterscheiden:

            Spaltenoperationen
                   |
     +-------------+-------------+
     |                           |
aggregierende            nicht aggregierende
 

Aggregierende Spaltenoperationen bilden die Werte von 1- N Zeilen innerhalb einer Spalte auf einen Wert ab:

  -- Gesamter Speicherplatzverbrauch mittels sum- Aggregatfunktion berechnen
select Sum(SizeInBytes)
from data.FileInfos
-- Größe der kleinsten Datei bestimmen
select Min(SizeInBytes)
from data.FileInfos
-- Größe der größten Datei bestimmen
select Max(SizeInBytes)
from data.FileInfos
-- Durchschnittliche Dateigröße bestimmen
select Avg(SizeInBytes)
from data.FileInfos
-- Wie viel Zeilen hat die Tabelle FileInfos
select count(*) As [Anzahl + Zeilen]
from data.FileInfos



Nicht aggregierende Spaltenoperationen bilden 1-N Werte innerhalb einer Zeile auf einen Wert ab:

  -- Auswahl von Spalten (Spaltenfunktionen sind 1:1 Abbildungen)
select [name], ext, SizeInBytes
from data.FileInfos
–- Zusammenfassen von Dateiname und Extension zum vollständigen Dateiname
–- Umrechnen der SizeInBytes in Kilobyte. Das Ergebnis wird auf 3 Nachkommastellen gerundet
select [name] + ext As [Filename], round(Cast(SizeInBytes as float)/1024, 3) as SizeInKB
from data.FileInfos
–- Position des Punktes innerhalb des Zeichenkettenwertes der Spalte Name mittels 
–- charindex- Spaltenoperation
select charindex('.', [name])
from data.FileInfos

Select distinct – Entfernen von Dubletten

Das Ergebniss einer Select- Abfrage ist ein Resultset, bestehend aus Tabellenzeilen. Das verschiedene Tabellenzeilen dabei identische Inhalte liefern, ist nicht ausgeschlossen. Durch die Distinct Dierektive wird das Resultset in seinem Umfang so reduziert, daß jede Tabellenzeile einen einmaligen Inhalt innerhalb des Resultsets besitzt:

select distinct ext from data.FileInfos

Select ... where – Auswahl der Zeilen

In der where - Klausel wird ein Filterausdruck definiert, den alle Zeilen des Resultsets erfüllen müssen. Der Filterausdruck entsteht durch Verknüpfung von Vergleichen und Prädikaten mittels logischer Operatoren:

  use dmsmin
go
–- Einschränken der Datensätze auf Dateien kleiner 1 Kilobyte 
select [name], SizeInBytes
from data.FileInfos
where SizeInBytes < 1024
-- Einschränken der Datensätze auf html und xml- Dateien kleiner 1 Kilobyte
select [name], SizeInBytes
from data.FileInfos
where SizeInBytes < 1024 and ext = 'htm' or ext = 'xml'
-- Einschränken der Datensätze auf html und xml- Dateien kleiner 1 Kilobyte
select [name], SizeInBytes
from data.FileInfos
where SizeInBytes < 1024 and (ext = '.htm' or ext = '.xml')
-- Einschränken der Datensätze auf html und xml- Dateien kleiner 1 Kilobyte
select [name], SizeInBytes
from data.FileInfos
where SizeInBytes < 1024 and (ext like '.htm%' or ext = '.xml')
-- Einschränken der Datensätze auf html und xml- Dateien kleiner 1 Kilobyte
select [name], SizeInBytes
from data.FileInfos
where SizeInBytes < 1024 and (ext in ('.htm', '.html', '.xml'))
-- Einschränken der Datensätze auf Dateien kleiner 1 Kilobyte, die weder html noch xml sind
select [name], SizeInBytes
from data.FileInfos
where SizeInBytes < 1024 and (ext not in ('.htm', '.html', '.xml'))