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 Letzte Erweiterung von 1992 wird SQL2 oder SQL92 genannt. Heute die Abfragesprache für alle relationalen Datenbanksysteme © 1999 TMN-Systemberatung GmbH SQL - SELECT (1) SELECT Select_Item FROM Table Sortierung ORDER BY Feldname ASC (Default) | DESC Selektion WHERE Klausel © 1999 TMN-Systemberatung GmbH 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 (2) BETWEEN ; Wert1 AND Wert2 (Grenzwerte sind inklusive) IN (Wert1,Wert2,Wert3) Wertegruppe prüfen LIKE Zeichenkettenvergleich mit Wildcards: – – „_“ ein bel. Zeichen „%“ beliebige Anzahl bel. Zeichen © 1999 TMN-Systemberatung GmbH 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 (3) GROUP BY (Gruppierung) mit GROUP BY können Sie Sätze des Ergebnis Cursors zu einem Satz zusammenfassen AS Klausel Der entstehenden Spalte einen definieren Namen zuordnen COUNT(*) Anzahl der Datensätze zählen. © 1999 TMN-Systemberatung GmbH SELECT COUNTRY, ; COUNT(*) AS ANZAHL ; FROM CUSTOMER ; GROUP BY COUNTRY SQL - SELECT (4) HAVING - Einschränken des Ergebnis Cursors FUNKTIONEN: – – – MIN, MAX SUM, AVG, COUNT Sinnvoller Einsatz nur bei Gruppierung © 1999 TMN-Systemberatung GmbH SELECT Region, ; COUNT (*) AS ANZAHL ; FROM CUSTOMER ; GROUP BY REGION ; HAVING ANZAHL > 1 (Alle Regionen, welche mehr als einen Datensatz enthalten) SQL - SELECT (5) SELECT COUNT DISTINCT PLZ; DISTINCT AS ANZAHL ; Nur unterschiedliche Werte werden beachtet. FROM CUSTOMER (Anzahl der unterschiedlichen Postleitzahlen in der Tabelle ausgeben) UNTERABFRAGEN © 1999 TMN-Systemberatung GmbH SELECT NAME FROM CUSTORMER ; WHERE UMSATZ >= ; ( SELECT AVG(UMSATZ) ; FROM STATISTIK ) (Alle Kunden, welche den Max Umsatz erreicht haben heraussuchen) SQL - SELECT (6) UNTERABFRAGEN mit WHERE : – ALL ANY EXISTS – IN – sowie mit NOT kombiniert (Rushmoore greift nicht ! ) – – © 1999 TMN-Systemberatung GmbH WHERE UMSATZ > ALL (SELECT...) WHERE UMSATZ < ANY (SELECT...) WHERE EXISTS (SELECT...) (Vergleich Unterabfrage leer .T. / .F.) WHERE KDNR IN (SELECT KDNR FROM ...) SQL - SELECT (7) SELECT über mehrere Tabellen SELECT Customer.NAME, ; Orders.Summe ; FROM Customer, Orders ; WHERE Customer.id = ; Orders.CustormerId lokaler Alias ODER verkürzt: SELECT C1.NAME, O1.Summe ; FROM Customer C1, Orders O1; WHERE C1.id = O1.CustormerId © 1999 TMN-Systemberatung GmbH SQL - SELECT (8) LEFT – RIGHT – Alle Daten der rechten Tabelle, und die übereinstimmenden der linken Tabelle INNER – Alle Daten der linken Tabelle, und die übereinstimmenden der rechten Tabelle JOINS 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. © 1999 TMN-Systemberatung GmbH SQL - SELECT (8) AUSGABE des Ergebnisses in: – – – – – – INTO CURSOR [NOFILTER] INTO DBF | TABLE INTO ARRAY TO FILE [ADDITIVE] TO PRINTER TO SCREEN © 1999 TMN-Systemberatung GmbH VFP Neuerungen (1) SELECT TOP Selektion der ersten xx Sätze wobei die Order By Klausel entscheidend ist SELECT TOP PERCENT Selektion der ersten xx Prozent der Sätze wobei die Order BY Klausel entscheidend ist. Achtung: Sätze welche in der Sortierfolge übereinstimmen werden nur einmal gezählt -> event. mehr Sätze im Ergebnis als erwartet. © 1999 TMN-Systemberatung GmbH SELECT TOP 10 NAME ; FROM CUSTOMER ; ORDER BY UMSATZ SELECT TOP 10 PERCENT NAME ; FROM CUSTOMER ; ORDER BY UMSATZ 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 © 1999 TMN-Systemberatung GmbH 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] JOIN DatabaseName!]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] ...]] © 1999 TMN-Systemberatung GmbH Weitere SQL Befehle INSERT INTO dbf_name [(fname1 [, fname2, ...])] VALUES (eExpression1 [, eExpression2, ...]) oder: INSERT INTO dbf_name FROM ARRAY ArrayName | FROM MEMVAR UPDATE [DatabaseName!]TableName SET Column_Name = eExpression [WHERE FilterCondition] DELETE FROM [DatabaseName!]TableName [WHERE FilterCondition] © 1999 TMN-Systemberatung GmbH SQL zu Wartungszwecken CREATE DATABASE CREATE TABLE ALTER TABLE CREATE CURSOR temporäre Tabelle erstellen, diese kann wie jede andere VFP Tabelle verwendet werden. (Also nicht schreibgeschützt !) CREATE SQL VIEW © 1999 TMN-Systemberatung GmbH Anregungen und Fragen TMN-Systemberatung GmbH Allee 62 74072 Heilbronn http://www.tmn-systemberatung.de [email protected] © 1999 TMN-Systemberatung GmbH