Startseite   |  Site map   |  A-Z artikel   |  Artikel einreichen   |   Kontakt   |  
   

  informatik lektion (referat)    
 
 
Biologie
Themen der Chemie
Deutsch online artikel
Englisch / Englische
Franzosisch
Geographie
Geschichte
Informatik
Kunst
Mathematik / Studium
Musik
Philosophie
Physik
Recht
Sport
Wirtschaft & Technik

 




Biographie


Impressum

informatik artikel (Interpretation und charakterisierung)

Index und select in sql


1. Java
2. Viren



1. Beispiel DATENBANK

/ create table Ware

(Artikel# SmallInt,
Bezeichnung CHAR(20),

Preis SmallInt,
ME CHAR(3),

Bestand SmallInt

);

create table Kunde

(Kunden# SmallInt,
Name CHAR(20),

Adresse CHAR(40),
PLZ SmallInt,

Ort CHAR(20)

);

create table Auftrag

(Re# SmallInt,
Kunden# SmallInt,

Datum date,
status CHAR(3)

);


create table Pos

(Re# SmallInt,

Pos# SmallInt,
Artikel SmallInt,

Menge SmallInt

);

2. Der Index

2.1. Allgemeines

Wird eine Zeile in einer realen Tabelle gesucht, die in einer Spalte bzw. Spaltenkombination vorgegebene Werte enthält, so muß die gesamte Tabelle durchsucht werden. die realen Implementationen sind bemüht, die Zugriffe auf den externen Speicher möglichst gering zu halten, da diese Zugriffe langsam sind. Deshalb sind üblicherweise Methoden implementiert, die es gestatten, Zeilen direkt zu adressieren. Dies erreicht man durch Errichtung eines Indexes. Ist für die betrachtete Tabelle ein Index auf die Spalte bzw. Spaltenkombiantion errichtet worden, so muß nur im Index nachgeschaut werden, wo die betreffende Zeile steht (es können auch mehrere Zeilen sein, die die Bedingung erfüllen). ein Index ist in der Regel wesentlich kleiner als
die Tabelle und zudem so organisiert, daß er schnell durchsucht werden kann. Dadurch
wird beim Suchen die Zahl der Zugriffe auf den externen Speicher erheblich verringert.

2.2. Syntax



Die Länge der einzelnen Spalten hängt von ihren Datentypen ab.


Datentyp Länge
Character pro Zeichen 1 Byte

Numeric 12 Bytes
Date/Time 12 Bytes

Ein Beispiel für die Berechnung von Indexes.

Nachname CHAR(20)

Vorname CHAR(20)
Geschl CHAR(1)

41
daraus ergibt sich:

6 + 3 + 41 = 50



SEHR_GROSS CHAR(249)


6 + 1 + 249 = 256


256 > 255


Es kommt zur Fehlermeldung:


Index key is too large


2.2.1. index-name

Der Indexname muß in der gesamten Datenbank eindeutig sein.


2.2.2. table-name

Auf Views können keine Indexe gelegt werden.


2.2.3. UNIQUE

Erzeugt einen Schlüssel - Index. Die Wertekombination der einzelnen Elemente darf in der Tabelle nur ein einziges mal vorkommen. Existieren bereits zur Indexerstellung doppelte Werte kommt es zu einer Fehler Meldung. Ebenso bei Update oder Insert.


2.2.4. CLUSTERED HASHED

Ein Clustered Hashed Index erlaubt einen schnellern Zugriff auf die Daten. Besteht ein Index aus unique und clustered hashed kann mit einem Plattenzugriff eine Zeile ausgelesen werden.

Ist kein clustered hashed definiert wird der Index als B-Baum erzeugt.


2.2.5. ASC,DESC

Definiert ob der index aufsteigend oder Absteigend sortiert wird. Diese Klausel ist nur für B-Bäume interessant. Wird die Klausel nicht angeben wird default mäßig ASC genommen.


2.2.6. PCTFREE

Die PCTFREE (prozent frei) klausel definiert, wieviel Platz in jeder Indexseite sein muß wenn der Index erstellt wird. Wird diese klausel nicht angegeben ist der default Wert 10%


2.2.7. SIZE integer-constatnt ROWS

Diese Angabe kontrolliert die größe des Indexes und wird in Anzahl der Reihen angegeben. Ist diese größe zu klein angeben kann es overflow pages kommen. Ist die angebene größe zu groß, wird das overflow page nicht verwendet, aber der Platz auf der Platte ist verbraucht. Diese Klausel wird nur bei clustered hashed Indexe benötigt. und ist dort unbedingt erforderlich.


2.3. Funktionen in Index

Ein Index kann für mehrere Spalten gebildet werden. Diese Spalten können durch Funktionen verbunden werden. Es können jedoch nicht alle Funktionen in Index eingebaut werden.

@CHAR

@CODE
@DATEVALUE

@DAY
@HOUR

@LEFT
@LENGTH

@LICS
@LOWER

@MICROSECOND
@MID

@MINUTE
@MONTH

@MONTHBEG
@PROPER

@QUARTER

@QUARTERBERG

@RIGHT
@SECOND

@STRING
@SUBSTRING

@TIMEVALUE
@TRIM

@UPPER
@VALUE

@WEEKBEG
@WEEKDAY

@YEAR

@YEARBEG
@YEARNUM
2.4. Beispiele

CREATE UNIQE INDEX sWare ON Ware (Artikel#)
CREATE UNIQE INDEX sKunde ON Kunde (Kundenl#)
CREATE UNIQE INDEX sAuftrag ON Auftrag(RE#)
CREATE UNIQE INDEX sPos ON Pos (RE#,POS#)

CREATE INDEX KUINDEX ON KUNDE (@UPPER(name))


SELECT name FROM KUNDE
WHERE @UPPER(name) = \'HUBER\'


3. SELECT


3.1. Syntax


Im Prinzip besteht das SELECT Statement aus sechs Komponenten

SELECT

FROM

WHERE

GROUP BY

HAVING
ORDER BY

Zwei Punkte sind äußerst wichtig und sollten immer vor Augen gehalten werden:

* Die Reihenfolge der Kompnenten ist fix vorgegben; eine GROUP BY Komponente darf nicht vor einer WHERE oder vor einer FROM Klausel stehen.

* Eine HAING-Komponente darf nur dann verwendet werden wenn eine GROUP BY Komponente verwendet wird.



FROM
definiert die Ausgangstabellen


WHERE
selektiert die Reihen, die der Bedingung genügen


GROUP BY
gruppiert Reihen auf Basis gleicher Werte in Spalten


HAVING
selektiert Gruppen, die der Bedingung genügen

SELECT
selektiert Spalten

ORDER BY
sortiert Reihen auf der Basis von Spalten

3.2. Verarbeitung einer SELECT ANWEISUNG

Ausgabe aller Kundennummer die 1993 mehr als einen Einkauf getätigt haben.


SELECT Kunden#

FROM Auftrag
WHERE DATUM > 01011993

GROUP BY Kunden#
HAVING COUNT(RE#) >1
ORDER BY Kunden#

3.2.1. FROM

In der FROM-Komponente wird nur die Tablle Auftrag genannt. Die bedeutet für SQL, daß mit der Tabelle AUFTRAG gearbeitet werden muß. Das Zwischenergebnis dieser Operation ist eine exakte Kopie der Tabelle AUFTRAG

Zwischenergebnis:

RE# Kunden# Datum status
1 1 1990-01-01 fa

2 1 1993-05-19 fa

3 3 1993-05-19 fa

4 2 1993-05.17 fa

5 3 1993-07-19 fa




3.2.2. WHERE

In der WHERE Komponente ist die Bedingung \'DATUM > 01011993\' angeben. Alle Reihen, in denen der Wert der Spalte DATUM größer als 01011993 ist, genügen dieser Bedingung. alle diese Reihen zusamen bilden das Zwischenergebnis der WHERE Komponente.


RE# Kunden# Datum status

2 1 1993-05-19 fa

3 3 1993-05-19 fa

4 2 1993-05.17 fa

5 3 1993-07-19 fa


3.2.3. GROUP BY

Die GROUP BY Komponennte gruppiert alle Reihen im Zwischenerbnis. Das Gruppieren erfolgt auf der Basis von Werten in der Spalte KUNDEN#. Reihen werden gruppiert wenn sie in der Betreffenden Spalte den gleichen Wert haben


Zwischenergbnis


RE# Kunden# Datum status

2 1 1993-05-19 fa

3,5 3 1993-05-19,1993-07-19 fa,fa

4 2 1993-05.17 fa



3.2.4. HAVING

Die vierte Komponente kann in gewissen Sinne mit der WHERE Komponente verglichen werden. Der Unterschied liegt darin, daß WHERE sich auf das Zwischenergbnis der FROM Komponete bezieht, während HAVING auf das gruppierte Zwischenergbnis der GROUP BY Komponente Bezug nimmt. Der Effekt ist jedoch der gleiche, auch in der HAVING-Komponente werden Reihen mit Hilfe einer Bedingung selektiert. In diesem Fall handelt es sich dabei um die Bedinung:


COUNT(RE#)>1

Das bedeutet: Alle Reihen, die mehr als eine Rechnungsnummer enthalten, genügen der Bedinung.


Zwischenerbnis:


RE# Kunden# Datum status

3,5 3 1993-05-19,1993-07-19 fa,fa


3.2.5. Select

In der SELECT Komponente wird angegeben welche Spalten im endgütigen Ergebnis wiedergeben werden müssen. Die Select-Kompontente wählt also die Spalten aus.


Kunden#
3

3.2.6. Order by

Hier wird am Inhalt des Zwischenerbnisses nichts mehr verändert. Die Ergbniszeilen werden lediglich noch in die angegeben Reihenfolge sortiert. Da aber Aufgrund der Beispieldaten nur eine Zeile überig bleibt, ist die Order by Komonente in diesem Fall belanglos

Die Where - Komponente

Die Where Komponente kann folgende Formen haben

* der einfache Vergleich
* Bedingungen mit AND, OR, oder NOT aneinanderkoppeln
* der BETWEEN - Operator

* der IN-Operator
* der LIKE Operator

* der NULL Operator

* der IN-Operator Unterabfrage (Subquery)
* der Vergleichsoperator mit Unterabfrage


Der einfache Vergleich

Ein einfacher Vergleich wird durch einen Ausdruck gebildet, auf den ein Operator und Wiederum ein Ausdruck folgt. Der Wert auf der linken Seite des Operators wird mit dem Ausdruck auf der rechten Seite verglichen. Vom Operator hängt es ab, ob die Bedingung WAHR, UNWAHR oder NULL ist


SQL kennt folgende Vergleichsopeatoren:


Vergleichsoperator Bedeutung
= gleich

< kleiner als
> größer als

= größer als oder gleich
nicht gleich

(Der Vergleichsoperator wird in einigen SQL-Implementierungen auch als -= oder != wiedergegeben.)

Beispiele

Gib die Kundennummer aller Kunden an, die in Perchtoldsdorf wohnen.

SELECT Kunden#

FROM Kunde

WHERE PLZ = 2380

Gib die Bezeichnung, den Preis, die Menge der einzelnen Artikel an wo der Lagerwert 1.000 S übersteigt

SELECT Bezeichnung, Preis, Bestand
FROM Artikel

WHERE Preis * Bestand > 1000

Bedingungen mit AND, OR, oder NOT aneinanderkoppeln

Eine WHERE - Komponente kann mehrere Bedingungen enthalten, wenn die Operatoren AND, OR und NOT verwendet werden.

Beispiele

Gib die Kundennummer aller Kunden an die in Wien wohnen oder deren Kundennummer kleiner 100 ist.

SELECT Kunden#

FROM Kunde

WHERE PLZ>=1010 AND PLZ1

Gib die Rechnungsnummen an, bei welchlen die größte menge die Eingekauft wurde 20 überstiegen hat.


SELECT re#

FROM pos
GROUP BY re#
HAVING max(Menge)>20;

Gib die Rechnungsnummern an, bei welchen die Summe der Menge die Gekauft wurde größer 100 war


SELECT re#

FROM pos
GROUP BY re#

HAVING SUM(MENGE)>100

Gib die Rechnungsnummern an, wo der durchschnitt der eingkauften ware kleiner 10 war


SELECT re#

FROM pos
GROUP BY re#
HAVING AVG(MENGE)

 
 
Top Themen / Analyse
Entropie kontinuierlicher Quellen
Aufwandschätzung -
Graphische Benutzeroberfläche
Wie wird ein EPROM gebrannt?
PX/SPX-kompatibles Protokoll
Pressen und Brennen
Mikromechanische Ventile
Informatik I Zusammenfassung
IMUL
P-Adressen

Zum selben thema
Netzwerk
Software
Entwicklung
Windows
Programm
Unix
Games
Sicherheit
Disk
Technologie
Bildung
Mp3
Cd
Suche
Grafik
Zahlung
Html
Internet
Hardware
Cpu
Firewall
Speicher
Mail
Banking
Video
Hacker
Design
Sprache
Dvd
Drucker
Elektronisches
Geschichte
Fehler
Website
Linux
Computer
A-Z informatik artikel:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z #
 
 

 
Copyright © 2008 - 2019 : ARTIKEL32 | Alle rechte vorbehalten.
Vervielfältigung im Ganzen oder teilweise das Material auf dieser Website gegen das Urheberrecht und wird bestraft, nach dem Gesetz.