180 likes | 313 Views
SQL in Visual FoxPro. SQL Historie. SQL - Structured Query Language In den 70er Jahren von IBM entwickelt 1986 zum ANSI Standard erhoben 1987 Übernahme des Standard von ISO 1989 erweitert wobei der 86er Standard als SQL89/Level1 übernommen wurde
E N D
SQL Historie • SQL - Structured Query Language • In den 70er Jahren von IBM entwickelt • 1986 zum ANSI Standard erhoben • 1987 Übernahme des Standard von ISO • 1989 erweitert wobei der 86er Standard als SQL89/Level1 übernommen wurde • Letzte Erweiterung von 1992 wird SQL2 oder SQL92 genannt. • Heute die Abfragesprache für alle relationalen Datenbanksysteme
SELECT Select_Item FROM Table Sortierung ORDER BY Feldname ASC (Default) | DESC SelektionWHERE Klausel SELECT * ; FROM CUSTOMER SELECT NAME,VORNAME ; FROM CUSTOMER SELECT * ; FROM CUSTOMER ; ORDER BY NAME ASC , ; VORNAME DESC SELECT * ; FROM CUSTOMER ; WHERE NAME = „Alt“ ; ORDER BY VORNAME SQL - SELECT (1)
BETWEEN ;Wert1 AND Wert2(Grenzwerte sind inklusive) IN (Wert1,Wert2,Wert3)Wertegruppe prüfen LIKEZeichenkettenvergleich mit Wildcards: „_“ ein bel. Zeichen „%“ beliebige Anzahl bel. Zeichen SELECT * ; FROM CUSTOMER ; WHERE PLZ BETWEEN ; 74000 AND 74999 SELECT * ; FROM CUSTOMER ; WHERE PLZ IN (74072, 74076) SELECT * ; FROM CUSTOMER ; WHERE NAME LIKE „A%“ (Alle Kunden deren Name mit A beginnt) SQL - SELECT (2)
GROUP BY (Gruppierung)mit GROUP BY können Sie Sätze des Ergebnis Cursors zu einem Satz zusammenfassen AS KlauselDer entstehenden Spalte einen definieren Namen zuordnen COUNT(*)Anzahl der Datensätze zählen. SELECT COUNTRY, ; COUNT(*) AS ANZAHL ; FROM CUSTOMER ; GROUP BY COUNTRY SQL - SELECT (3)
HAVING - Einschränken des Ergebnis Cursors FUNKTIONEN: MIN, MAX SUM, AVG, COUNT Sinnvoller Einsatz nur bei Gruppierung SELECT Region, ; COUNT (*) AS ANZAHL ; FROM CUSTOMER ; GROUP BY REGION ; HAVING ANZAHL > 1 (Alle Regionen, welche mehr als einen Datensatz enthalten) SQL - SELECT (4)
DISTINCTNur unterschiedliche Werte werden beachtet. UNTERABFRAGEN SELECT COUNT DISTINCT PLZ; AS ANZAHL ; FROM CUSTOMER (Anzahl der unterschiedlichen Postleitzahlen in der Tabelle ausgeben) SELECT NAME FROM CUSTORMER ; WHERE UMSATZ >= ; ( SELECT AVG(UMSATZ) ; FROM STATISTIK ) (Alle Kunden, welche den Max Umsatz erreicht haben heraussuchen) SQL - SELECT (5)
UNTERABFRAGEN mit WHERE : ALL ANY EXISTS IN sowie mit NOT kombiniert (Rushmoore greift nicht ! ) WHERE UMSATZ > ALL (SELECT...) WHERE UMSATZ < ANY (SELECT...) WHERE EXISTS (SELECT...) (Vergleich Unterabfrage leer .T. / .F.) WHERE KDNR IN (SELECT KDNR FROM ...) SQL - SELECT (6)
SELECT über mehrere Tabellen lokaler Alias SELECT Customer.NAME, ; Orders.Summe ; FROM Customer, Orders ; WHERE Customer.id = ; Orders.CustormerId ODER verkürzt: SELECT C1.NAME, O1.Summe ; FROM Customer C1, Orders O1; WHERE C1.id = O1.CustormerId SQL - SELECT (7)
LEFT Alle Daten der linken Tabelle, und die übereinstimmenden der rechten Tabelle RIGHT Alle Daten der rechten Tabelle, und die übereinstimmenden der linken Tabelle INNER nur die übereinstimmenden Daten der linken und rechten Tabelle FULL Alle Daten der rechten Tabelle, sowie alle Daten der linken Tabelle, wobei übereinstimmende Sätze zugeordnet werden. SQL - SELECT (8) JOINS
SQL - SELECT (8) • AUSGABE des Ergebnisses in: • INTO CURSOR [NOFILTER] • INTO DBF | TABLE • INTO ARRAY • TO FILE [ADDITIVE] • TO PRINTER • TO SCREEN
SELECT TOPSelektion der ersten xx Sätze wobei die Order By Klausel entscheidend ist SELECT TOP PERCENTSelektion der ersten xx Prozent der Sätze wobei die Order BY Klausel entscheidend ist. Achtung: Sätze welche in der Sortierfolge überein-stimmen werden nur einmal gezählt -> event. mehr Sätze im Ergebnis als erwartet. SELECT TOP 10 NAME ; FROM CUSTOMER ; ORDER BY UMSATZ SELECT TOP 10 PERCENT NAME ; FROM CUSTOMER ; ORDER BY UMSATZ VFP Neuerungen (1)
VFP Neuerungen (2) • FORCE • Mit FORCE können Sie erzwingen, daß die WHERE Bedingung von Links nach Rechts abgearbeitet wird.(Dies macht vor allem für die Optimierung größerer Abfragen Sinn.) • NOFILTER • Mit NOFILTER können Sie erzwingen, daß ein temporäre Tabelle erstellt wird ! • Nur NOFILTER Cursor können Sie mit SELECT weiterverarbeiten
SQL - SELECT im Überblick SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]][Alias.] Select_Item [AS Column_Name][, [Alias.] Select_Item [AS Column_Name] ...] FROM [FORCE][DatabaseName!]Table [[AS] Local_Alias][[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOINDatabaseName!]Table [[AS] Local_Alias][ON JoinCondition …] [[INTO Destination]| [TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN]] [PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN] [NOWAIT] [WHERE JoinCondition [AND JoinCondition ...][AND | OR FilterCondition [AND | OR FilterCondition ...]]] [GROUP BY GroupColumn [, GroupColumn ...]] [HAVING FilterCondition] [UNION [ALL] SELECTCommand] [ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]]
Weitere SQL Befehle • INSERT INTO dbf_name [(fname1 [, fname2, ...])]VALUES (eExpression1 [, eExpression2, ...]) oder: • INSERT INTO dbf_name FROM ARRAY ArrayName | FROM MEMVAR • UPDATE [DatabaseName!]TableNameSET Column_Name = eExpression[WHERE FilterCondition] • DELETE FROM [DatabaseName!]TableName[WHERE FilterCondition]
SQL zu Wartungszwecken • CREATE DATABASE • CREATE TABLE • ALTER TABLE • CREATE CURSORtemporäre Tabelle erstellen, diese kann wie jede andere VFP Tabelle verwendet werden. (Also nicht schreibgeschützt !) • CREATE SQL VIEW
Anregungen und Fragen TMN-Systemberatung GmbH Allee 62 74072 Heilbronn http://www.tmn-systemberatung.de info@tmn-systemberatung.de