Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   suche nach SQL Schulungsunterlagen (https://www.delphipraxis.net/187201-suche-nach-sql-schulungsunterlagen.html)

waldforest 6. Nov 2015 09:35

Datenbank: Firebird • Version: 2.5 • Zugriff über: Zeos

suche nach SQL Schulungsunterlagen
 
Hallo,
ich möchte mich intensiver mit SQL-Abfragen befassen, die über die Grundlagen hinaus gehen. Im Netz findet man sehr viele Infos zu einfachen Abfragen. Ich suche eine gute Unterlage, ideal mit Fallbeispielen, bei denen es mehr um verschachtelte Abfragen, Auswertungen mit Aggregatsfunctionen geht.

z.B. Umsatz und Absatzauswertungen, Einkaufsplanung auf Basis Historien (z.B. in Wochen und Monatssicht in Bezug auf Summen, Mittel- und Maximalwerte).

Ich würde dies gerne über SQL, oder ggf einer Procedure in Firebird erledigen.Leider habe ich bisher noch nichts wirklich brauchbares gefunden wie man so etwas in Firebird realisieren kann.

In Excel lässt sich die relativ einfach über Pivots realisieren.

Oder geht das nicht und muss es über eine Proc in Firebird abwickeln?

Lemmy 6. Nov 2015 09:49

AW: suche nach SQL Schulungsunterlagen
 
Hallo,

das "The Firebird Book Second Edition" hast du schon?

Der Rest: Kommt darauf an: jede Struktur sieht anders aus und erfordert daher eine andere Vorgehensweise. Wichtig ist, dass Du entsprechende Tools verwendest, mit denen Du Flaschenhälse finden kannst (fehlende Indizes, schlechte Joins,..) sprich eine Performanceanalyse für Queries bietet.

StoredProcedure oder nicht: Kommt halt darauf an: Hast Du einen Datenbankserver (d.h. die Datenbank läuft auf einem anderen Rechner) und es ist möglich, dass durch die StoredProcedure die Menge an Daten die übers Netzwerk gehen deutlich eingeschränkt werden können, weil eben Auswertungen auf viele Daten auf dem Server passieren und nur noch wenige Daten übertragen werden, würde die Nutzung einer StoredProcedure schon Vorteile haben.

Grüße

jobo 6. Nov 2015 11:21

AW: suche nach SQL Schulungsunterlagen
 
Zu Unterlagen kann ich nichts sagen, außer die google Suche zu empfehlen.

zu Pivot und StoredProcs:
Leider fremdeln die meisten DB mit diesen Anforderungen, eine StoredProc ist sicher eine Lösung, aber eben handgestrickt und steif. Auch die, die es können, machen es nicht besonders flexibel. Für eine Visualisierung verwendet man lieber entsprechende Reportkomponenten.*
Ich würde daher in der Verarbeitung so lange wie möglich in Listenform bleiben und dann final per Reportkompo oder SP die Pivot-Transformation machen.
Im Zweifel kannst Du die Pivot-Transformation natürlich auch nach wie vor dem Spreadsheet überlassen. Die können das prima und komfortabel.

Den Performanceaspekt, den Jumpy schon ansprach, solltest Du jedenfalls nicht unberücksichtigt lassen. Also Daten eindampfen, Aggregation usw. per SQL, ggF. SP, Transformation dann je nach Bedarf mit geeigneten Mitteln. Je flexibler das sein muss, desto weniger würde ich es in der DB machen.

* Wenn Du via Client oder sonst wie in der Lage bist, dynamisch SQL zusammenzubasteln, kannst Du einen deutlichen Komfortgewinn realisieren, wenn Du das dann im Falle von FB als Parameter an eine Aggregat bzw. Pivot SP übergibtst.

Hansa 6. Nov 2015 12:00

AW: suche nach SQL Schulungsunterlagen
 
Zitat:

Zitat von jobo (Beitrag 1320753)
Leider fremdeln die meisten DB mit diesen Anforderungen, eine StoredProc ist sicher eine Lösung, aber eben handgestrickt und steif. Auch die, die es können, machen es nicht besonders flexibel.

Wieso ist das unflexibel ? Es gibt doch Parameter. Ich brauche z.B. einen Vorjahresvergleich über Kunden-Artikel-Statistik. D.h. ich brauche folgende Parameter : Ku.-Nr., Jahr, Vergleichsjahr, VonMonat, von - bis Art.-Nr. usw. In der DB ist dann eine SP, die diese Parameter verarbeitet. Und ich setze sie in meinem Delphi-Programm und fertig ! Die SP hat in der DB halt ca. 150 Zeilen, und ? Du kannst das ganze auch ohne Stored Procedure machen, dann sind die 150 Zeilen eben in Deinem Delphi-Programm. Ergebnis bleibt aber gleich.

TRomano 6. Nov 2015 12:13

AW: suche nach SQL Schulungsunterlagen
 
Über den Sinn, oder eben nicht Sinn, von Stored Procedures kann man wie immer stattlich streiten. Letzten Endes entscheidet man, ob man wirklich immer ein Rollout für viele Rechner machen will (bei einer Delphi-Version) oder ob man es nur server-seitig macht (script) ...
Und eventuell eine andere Frage ist es, ob man es in Delphi auch wirklich mit 150 Zeilen (wie im genannten Beispiel) hinbekommt. Ist nicht immer so. Und drittens schätzt man ab, ob es Sinn macht vom Client aus mehrere Statements an den Server zu schicken, oder ob man an den Server sozusagen nur ein paar Parameter schickt und das gesamte Ergebnis zurückbekommt.
So einfach oder kompliziert ist es eben ...

jobo 6. Nov 2015 12:16

AW: suche nach SQL Schulungsunterlagen
 
@hansa: Wenn es mit einem Parameter getan ist oder mit 2 oder mit 5 usw, ok. Dafür sind die Systeme ja ausgelegt.
Ich meinte speziell die Pivotfunktion und die Umsetzung (wenn sie überhaupt in einem Produkt existiert, bei fb glaub ich nicht), die leider eine explizite Definition (Angabe) der gewünschten Spalten erfordert. Das wiederspricht der Natur einer Liste, die idr beliebig lang ist.
Pivotisiert man bspw. irgendwelche Geldsummen über 12 Monate ist das unproblematisch, weil es (bis auf das 13. Monatsgehalt) wahrscheinlich keine Varianten gibt. Versucht man das gleiche über verkaufte Produkte, sieht es schon ganz anders aus. An der Stelle wird es unflexibel und man ist besser bedient, wenn man das dazu notwendige SQL dynamisch zusammenbaut (und das dann meinetwegen wieder als Parameter übergibt).

Lemmy 6. Nov 2015 12:33

AW: suche nach SQL Schulungsunterlagen
 
Zitat:

Zitat von TRomano (Beitrag 1320756)
Über den Sinn, oder eben nicht Sinn, von Stored Procedures kann man wie immer stattlich streiten. Letzten Endes entscheidet man, ob man wirklich immer ein Rollout für viele Rechner machen will (bei einer Delphi-Version) oder ob man es nur server-seitig macht (script) ...

völlig richtig. Oder wenn es beides mal der selbe Aufwand ist seine 1.000 Kunden mit dem Update zu versorgen spielt das dann (fast) keine Rolle mehr. Es kommt also immer darauf an ;-)


Zitat:

Zitat von TRomano (Beitrag 1320756)
Und eventuell eine andere Frage ist es, ob man es in Delphi auch wirklich mit 150 Zeilen (wie im genannten Beispiel) hinbekommt. Ist nicht immer so. Und drittens schätzt man ab, ob es Sinn macht vom Client aus mehrere Statements an den Server zu schicken, oder ob man an den Server sozusagen nur ein paar Parameter schickt und das gesamte Ergebnis zurückbekommt.
So einfach oder kompliziert ist es eben ...

leider.. bisher hätte ich auch gedacht, dass es recht einfach ist - aber vor kurzem hatte ich einen Fall da war es deutlich schneller einen join über mehrere größere Tabelle "manuell" zu machen, d.h. erst eine Tabelle abrufen und in eine Objektstruktur zu packen, dann die andere Tabelle abrufen und die Daten dann mit denen in der Objektstruktur zusammen führen....

Hansa 6. Nov 2015 12:44

AW: suche nach SQL Schulungsunterlagen
 
Zitat:

Zitat von TRomano (Beitrag 1320756)
Über den Sinn, oder eben nicht Sinn, von Stored Procedures kann man wie immer stattlich streiten.

Hier wird nicht gestritten. :warn: Aber ich sags mal so : wenn ich vor der Frage stehe, eine SP zu schreiben oder 150 Zeilen in Delphi, dann nehme ich die SP. Die brauche ich nämlich nur vorab in IBExpert testen und dann lediglich die Parameter per Delphi setzen.

@Jobo : Wieso soll es bei verkauften Produkten Ärger geben ? Genau darum geht es bei mir. Die Parameter betreffen auch hauptsächlich die Where-Klausel. Die Datenmenge soll ja von Anfang an gering gehalten werden.

Und die 150 Zeilen kommen in meinem Beispiel nur zustande, weil es eben um 12 Monate geht. Ergibt halt solche Konstrukte (hier 1 Monat und das mal 12 + Where + Var.-Deklarationen) :

Code:
    SUM (CASE MONAT WHEN 1 Then
           CASE :WERTTYP
             WHEN 0 THEN MENGE
             WHEN 1 THEN UMSATZ
             ...geht bis 4
           ELSE
             0
         END
         ELSE 0 END) as Mon1,

Sir Rufo 6. Nov 2015 13:05

AW: suche nach SQL Schulungsunterlagen
 
Es führt zwar ein wenig weg von den Schulungsunterlagen ... :stupid:

Die Argumente pro/contra SP bei einem Pivot (bzw. bei einer komplexeren Abfrage) kann ich auf jeden Fall nachvollziehen.

Die beste Alternative ist eigentlich eine Zwischenschicht die eben genau zwischen dem Client und der Datenbank hängt. Ob die Ergebnisse nun über eine SP (weil die sich eben sehr schön auf dem SQL-Server umsetzen lässt) oder aus einer nachgelagerten Verarbeitung (weil sich das nur mit Kopfstand und Salto rückwärts auf dem SQL-Server berwrkstelligen lässt) spielt dann für den Client keine Geige mehr. Der bekommt die Daten im vereinbarten (und mundgerechten) Format und zeigt diese dann an.

p80286 6. Nov 2015 13:20

AW: suche nach SQL Schulungsunterlagen
 
Zitat:

Zitat von Hansa (Beitrag 1320762)
Zitat:

Zitat von TRomano (Beitrag 1320756)
Über den Sinn, oder eben nicht Sinn, von Stored Procedures kann man wie immer stattlich streiten.

Hier wird nicht gestritten. :warn: Aber ich sags mal so : wenn ich vor der Frage stehe, eine SP zu schreiben oder 150 Zeilen in Delphi, dann nehme ich die SP.

Da mir vor einiger Zeit eine SP über den Weg gelaufen ist, die Freitext in drei Felder aufgespalten hat (warum Felder da steht doch alles) stehe ich den Verfechtern der SP eher skeptisch gegenüber. Nichts desto trotz "Es kommt darauf an". Wenn Du "nur" Datenverwaltung mit einer DB betreibst, hast Du andere Anforderungen, als wenn Du vor allem Statistik betreiben willst. Willst Du beides machen, dann richte Die DB auch so ein, daß beides gleich gut geht. Alles andere ist sparen am falschen Platz.

Gruß
K-H

P.S.
manchmal geht kein Weg an einer SP vorbei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz