[erledigt] SQL Abfrage?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

[erledigt] SQL Abfrage?

Beitrag von fliegermichl »

Hallo,

ich hätte mal eine Frage an die SQL Experten.
Ich habe eine Tabelle "Schulen", eine "Kurse", eine "Historie", eine "Lizenz" und eine "Kontakt"
Kurse hat einen Verweis auf Schulen.
In Historie ist sowohl ein Verweis auf Kurse als auch auf Lizenz sowie auch Kontakt.

Mein Kunde möchte eine Auflistung der Kontakte sortiert nach Schule.
Kann ich das in einer einzigen Select Anweisung realsieren?

EDIT: Ja geht, ich hab es selbst herausgefunden.

Code: Alles auswählen

select s.id as sid, h.lizenzid, k.id as kid, k.meisterschule, h.kontaktID, h.bezogenetab, h.bezogeneid as bid from meisterschulen s, historie h, kurse k where h.bezogeneTab = "kurse" and h.bezogeneID = k.id and k.meisterschule = s.id

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: [erledigt] SQL Abfrage?

Beitrag von charlytango »

sieh dir mal die JOIN Klausel an:
https://www.w3schools.com/sql/sql_join.asp

Damit ist das Statement leichter lesbar und flexibler.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: [erledigt] SQL Abfrage?

Beitrag von fliegermichl »

kann ich damit auch 3 oder mehr Tabellen verwursten?

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: [erledigt] SQL Abfrage?

Beitrag von theo »

fliegermichl hat geschrieben:
Mo 1. Nov 2021, 11:49
kann ich damit auch 3 oder mehr Tabellen verwursten?
Klar. Du kannst joinen bis dir die Wurst aus den Ohren rauskommt. :mrgreen:
https://learnsql.com/blog/how-to-join-3 ... re-in-sql/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: [erledigt] SQL Abfrage?

Beitrag von af0815 »

Man muss sich bei JOINs, besonders mehrfach Joins ansehen was die Performance macht. Sinnvoller Weise haben die im Join verwendeten Spalten Indizes. Ich schaue mir oft auch an, ob ein Subselect in einem Join Sinn macht. Der Trick dabei ist, das man die lange Tabelle zuerst so weit wie möglich einschränkt und dann erst einen join macht. Das kann bei Tabellen mit vielen Datensätzen (lange Tabelle) viel an Performace bringen.

Regel: Erstellt euch Demodaten mit den doppelten der erwarteten Daten von 5Jahren.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: [erledigt] SQL Abfrage?

Beitrag von charlytango »

JOINs auf mehrere Tabellen (egal mit welcher Syntax) sind immer auch eine Frage der Performance.
Eigentlich bei fast allem was mit einer Datenbank zu tun hat. Klug gesetzte Indizes helfen schon mal und die Strategie von af0815 selbstverständlich auch.

Trotzdem sollte man auch Möglichkeit von Redundanzen/Denormalisierung im Blick behalten wenn die Performance mal nicht so mitspielt wie man es braucht.

Für ein bestimmtes Projekt mit ad Hoc Statistiken (Auftrags- und Rechnungs- Pivot-Tabelle um bei einem Telefonat sofort eine Kundenübersicht über alle Bestellungen, Konditionen etc etc zu haben) war es nicht möglich die geforderte Performance über alle nötigen Tabellen (da waren mehr als ein Dutzend Tabellen beteiligt) herzustellen. Nachdem wir dann eine eigene Tabelle nur für diese spezielle Abfrage redundant mitgeführt haben waren die Antwortzeiten blitzschnell. Das wurde alles in der DB mittels Triggern gelöst, das Programm hatte damit dann gar nichts zu tun.

Wollte nur daruf hinweisen dass man bei Verwendung einer SQL-Datenbank an mehreren Orten schrauben kann um zum Ziel zu kommen. Und jede DB hat dabei ihre eigenen Möglichkeiten und Eigenheiten.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: [erledigt] SQL Abfrage?

Beitrag von fliegermichl »

Danke euch für die Infos.
Mit Datenbanken hab ich nur äußerst spärlich zu tun.

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: [erledigt] SQL Abfrage?

Beitrag von six1 »

Ja, das entspricht auch meinen Erfahrungen @charlietango.
Die Indexe müssen exakt passen bei JOINS, sonst wird es zäh :D
Gruß, Michael

Antworten