Abfragen einer Datenbank

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Benutzeravatar
ChristianAC
***
Beiträge: 91
Registriert: So, 30.11.2014 23:59

Abfragen einer Datenbank

Beitrag von ChristianAC » Fr, 14.04.2017 03:24

Guten Tag,

der Ball rollt wieder, bei Herren- und Damen-WM-Qualifikationen sowie in der Europa Champions League.
So möchte ich denn auch auf eine Datenbank hinweisen, um die sich hier:
viewtopic.php?f=8&t=67989
im Thread gekümmert wurde.
RobertG hat mir dankenswerterweise die Strukturänderung gemacht. Nun hätte ich aber fünf Abfragen, die mir schon auf den Nägeln brennen. Ich kriege es echt nicht alleine hin, vielleicht könnt Ihr mir von der Pike auf helfen:
Nr.1 : Welches Land hatte mal einen Klub im EL_SZ, aber nicht in CL, CL_AF oder CL_VF ?
Ergebnis: Wales
Nr.2 : Welches Land hatte mal einen Klub in CL, aber nicht in EL_SZ, CL_AF oder CL_VF ?
Ergebnis: Kasachstan
Nr.3 : Welcher Club spielte einmal sogar CL_AF (sowie freilich damit auch impliziert CL),
aber nie CL_VF oder EL_SZ ?
Lösung: Real Sociedad San Sebastian und KAA Gent
Nr.4 : Welcher Klub spielte einmal sogar CL_VF (und somit auch CL_AF und CL),
aber nie EL_SZ ?
erwartete Lösung: Leicester City & APOEL Nikosia
Abfrage Nr.5 : Welcher Verband hatte die meisten unterschiedlichen Klubs konkret im EL_SZ ?
erwartete Ergebnismenge: Deutschland und Spanien mit je 18
hier wäre bitte auch eine Abfrage für die drittmeisten unterschiedlichen im EL_SZ nur
vorzunehmen.

Was ich bisher hinkriegte, war dürftig:

Code: Alles auswählen

SELECT "Klubname" FROM "Fußball_Europapokal" WHERE ( "EL_SZ" > 1999 OR "CL" > 1999 ) AND "Klubname" LIKE '%spor'
brachte mir einige türkische Vereine.
Überdies ist das nur eine Abfrage von der alten "Spaghetti"-Code-Datenbank,und die Abfrage ist wenig exakt und unelegant,vielmehr mit heißer Nadel gestrickt. Dafür hatte ich überdies schon zwei Stunden gebraucht...
Ich bräuchte also einmal einen souveränen SQL-Professionellen.

Ich hoffe, Ihr könnt mir helfen
Gruß, Chris *schon einmal frohe Ostern wünscht*
Internetrechner mit Win 7 OO 3.0.0 sowie Notebook mit XP und AOO 4.1.1
VideoPoker-Spiel

F3K Total
********
Beiträge: 3150
Registriert: Mo, 28.02.2011 17:49

Re: Abfragen einer Datenbank

Beitrag von F3K Total » Fr, 14.04.2017 20:16

  1. Code: Alles auswählen

    SELECT "Land"."Land" FROM "Rest", "Club", "Land" WHERE "Rest"."Club_ID" = "Club"."ID" AND "Club"."Land_ID" = "Land"."ID" GROUP BY "Land"."Land" HAVING ( ( COUNT( "Rest"."EL_SZ" ) > 0 AND COUNT( "Rest"."CL_AF" ) = 0 AND COUNT( "Rest"."CL_VF" ) = 0 AND COUNT( "Rest"."CL" ) = 0 ) )
  2. Code: Alles auswählen

    SELECT "Land"."Land" FROM "Rest", "Club", "Land" WHERE "Rest"."Club_ID" = "Club"."ID" AND "Club"."Land_ID" = "Land"."ID" GROUP BY "Land"."Land" HAVING ( ( COUNT( "Rest"."EL_SZ" ) = 0 AND COUNT( "Rest"."CL_AF" ) = 0 AND COUNT( "Rest"."CL_VF" ) = 0 AND COUNT( "Rest"."CL" ) > 0 ) )
  3. Code: Alles auswählen

    SELECT "Club"."Club" FROM "Club", "Land", "Rest" WHERE "Club"."Land_ID" = "Land"."ID" AND "Rest"."Club_ID" = "Club"."ID" GROUP BY "Club"."Club" HAVING ( ( COUNT( "Rest"."EL_SZ" ) = 0 AND COUNT( "Rest"."CL_AF" ) > 0 AND COUNT( "Rest"."CL_VF" ) > 0 AND COUNT( "Rest"."CL" ) > 0 ) )
  4. Code: Alles auswählen

    SELECT "Club"."Club" FROM "Club", "Land", "Rest" WHERE "Club"."Land_ID" = "Land"."ID" AND "Rest"."Club_ID" = "Club"."ID" GROUP BY "Club"."Club" HAVING ( ( COUNT( "Rest"."EL_SZ" ) = 0 AND COUNT( "Rest"."CL_AF" ) > 0 AND COUNT( "Rest"."CL_VF" ) > 0 AND COUNT( "Rest"."CL" ) > 0 ) )
  5. Code: Alles auswählen

    SELECT "Land"."Land", COUNT( "Club"."ID" ) "ANZAHL" FROM "Rest", "Club", "Land" WHERE "Rest"."Club_ID" = "Club"."ID" AND "Club"."Land_ID" = "Land"."ID" GROUP BY "Land"."Land", "Club"."ID" HAVING ( ( COUNT( "Rest"."EL_SZ" ) > 0 ) ) ORDER BY COUNT( "Club"."ID" ) DESC
R

Benutzeravatar
ChristianAC
***
Beiträge: 91
Registriert: So, 30.11.2014 23:59

Re: Abfragen einer Datenbank

Beitrag von ChristianAC » Fr, 14.04.2017 20:31

Suuu-per,

vielen Dank F3K Total,
ich werde mir das mal in Ruhe ansehen, habe vielen Dank.
Ich dachte, es wäre mit JOINs zu machen,
aber das sieht ja schon vertrackt aus.

Frohe Ostern, Christian

[EDIT]
Hey, Okay, die ersten vier Abfragen laufen wunderbar;
bitte in der dritten, liebe Leute, der Vollständigkeit halber die Folge =0,>0,=0,>0 machen (also beim 3.Parameter ein = statt >),
dann bekommen wir auch Gent und Sociedad heraus.
Ja, in der vierten habe ich Real Madrid ganz vergessen, die waren immer mind. CL-AF.

Jetzt wollte ich nochmal bezüglich der allerletzten Abfrage etwas fragen. Und zwar,die, die vorliegt, ist auch interessant und komplex,
aber ich bräuchte quasi nur die 18 deutschen Vereine (das sind z.B. Bayern, Borussias, ja sogar Alemannia hier aus meiner Stadt ;o) mit ihrem Land,
sowie die 18 spanischen; also 36 Datensätze resultierend aus der Abfrage/Datenbank. Vereinsname 1x gelistet, sortiert wohl vielleicht zweckmässig nach Alphabet (erst nach Verband, so dass da dann z.B. 18 x Deutschland untereineander steht, und dann nach Klub; dabei stehe Klub aber links von Land).
Und dann auch noch die drittmeisten (das müsste übrigens Italien und England sein (mit 16 je)) in dieser Weise
Ich hatte es etwas mißverständlich definiert,sry..

Okay, ich melde mich noch einmal diesbezüglich.
Soweit: Karfreitag gerettet ;-) Grüssle
[/EDIT]
Internetrechner mit Win 7 OO 3.0.0 sowie Notebook mit XP und AOO 4.1.1
VideoPoker-Spiel

F3K Total
********
Beiträge: 3150
Registriert: Mo, 28.02.2011 17:49

Re: Abfragen einer Datenbank

Beitrag von F3K Total » Fr, 14.04.2017 23:23

ChristianAC hat geschrieben:...Ich dachte, es wäre mit JOINs zu machen
Geht auch, Abfrage 1 mit JOINs:

Code: Alles auswählen

SELECT "Land"."Land" FROM "Rest" LEFT JOIN "Club" ON  "Rest"."Club_ID" = "Club"."ID"  LEFT JOIN "Land" ON "Club"."Land_ID" = "Land"."ID" GROUP BY "Land"."Land" HAVING ( ( COUNT( "Rest"."EL_SZ" ) > 0 AND COUNT( "Rest"."CL_AF" ) = 0 AND COUNT( "Rest"."CL_VF" ) = 0 AND COUNT( "Rest"."CL" ) = 0 ) )
Du hast genügend Beispiele bekommen, mach dir jetzt mal schön selber einen Kopf.
R

Benutzeravatar
ChristianAC
***
Beiträge: 91
Registriert: So, 30.11.2014 23:59

Re: Abfragen einer Datenbank

Beitrag von ChristianAC » Fr, 14.04.2017 23:54

Okay, toll, vielen Dank für all diese Beispiele,wirklich
(muss ich jetzt erstmal alles analysieren)

Jupp, ich werd's versuchen,drauf zu kommen;

Grüssle

PS: Sonst melde ich mich nach Ostern noch einmal,
bis dann.
Internetrechner mit Win 7 OO 3.0.0 sowie Notebook mit XP und AOO 4.1.1
VideoPoker-Spiel

F3K Total
********
Beiträge: 3150
Registriert: Mo, 28.02.2011 17:49

Re: Abfragen einer Datenbank

Beitrag von F3K Total » Sa, 15.04.2017 00:07

ChristianAC hat geschrieben:
Fr, 14.04.2017 23:54
ich werd's versuchen,drauf zu kommen;
Ich denke, versuchen reicht da nicht, SQL lernen hilft! Zum Beispiel hier: R

Benutzeravatar
ChristianAC
***
Beiträge: 91
Registriert: So, 30.11.2014 23:59

Re: Abfragen einer Datenbank

Beitrag von ChristianAC » Sa, 15.04.2017 00:12

Okay, ich habe die Abfragen schon eingesetzt,verstehe sie aber nicht richtig,
das Wissen muss sich erst mal setzen,bevor man weiter sehen kann.

Danke für die Links, Gruß Chris

[Edit]Ich denke, ich schaue, dass ich nur die sozusagen "Anzeige-Funktionen" von SQL mir aneigne; mit Update, Delete, Create, Alter,Union etc. kann man wohl viel Murks anstellen; will mir ja net meine schöne DB zerschießen...[/Edit]

Frohe Ostern
Internetrechner mit Win 7 OO 3.0.0 sowie Notebook mit XP und AOO 4.1.1
VideoPoker-Spiel

Benutzeravatar
ChristianAC
***
Beiträge: 91
Registriert: So, 30.11.2014 23:59

BASE-Frage

Beitrag von ChristianAC » Mo, 01.05.2017 03:22

Guten Tag,

uh, wohl eher eine Zeit, um einen Maibaum zu setzen :-P

Ich wollte noch einmal nachfragen, ich habe jetzt einmal einen Screenshot gemacht,
wie die Ergebnismenge der Abfrage aussehen müsste,die ich noch brauche.
!Screenshot_Abfrage.png
!Screenshot_Abfrage.png (41.95 KiB) 3384 mal betrachtet
Ich hoffe, das verdeutlicht mein Ansinnen

Weil doch mein Heimatklub (...) hier auch dabei ist,
wäre es sehr nett,mir könnte jemand die Abfrage bauen.
Ich weiss nur soweit, dass es ja wohl mit DISTINCT gehe, mit ORDER BY Land, Vereinsname
sowie dann mit einem kombinierten SUM und MAX,
aber gerade Letzteres übersteigt dann doch meine rudimentären SQL-Kenntnisse.
Wie genau hätte die Syntax zu lauten? ( hier der Link nochmal zur Datenbank,Originalthread: viewtopic.php?f=8&t=67989#p268671 )

Es geht darum, die Vereine darzustellen, die je konkret das EL_SZ gespielt haben, also mind. 1x.
Und es soll dann der Top-Verband mit den meisten verschiedenen Vereinen im konkret EL_SZ ausgefiltert werden.
Da dies zwei sind, bin ich mal gespannt, ob das hinhaut. Ich krieg's alleine einfach nicht hin :-{

Mit freundlichem Gruß ChristianAC

PS: Ich möchte mich auch bedanken für die tollen Hilfen, die ich hier schon bekommen habe.
Internetrechner mit Win 7 OO 3.0.0 sowie Notebook mit XP und AOO 4.1.1
VideoPoker-Spiel

RobertG
*******
Beiträge: 1638
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfragen einer Datenbank

Beitrag von RobertG » Mo, 01.05.2017 10:52

Hallo ChristianAC,

ich habe das jetzt einmal mit der Originaltabelle aus Deinem Datenbankbeispiel zusammengesetzt. Das ist etwas kniffelig, weil Du zuerst einmal die Abfrage mit DISTINCT benötigst, dann daraus die Anzahl der Ländernamen erstellen musst, hier dann wieder das Maximum ermitteln musst und dann das Ganze wieder mit der Ausgangstabelle überein bringen musst.

Dazu habe ich zwei Ansichten erstellt:
Ansicht 1 dient dazu, die Anzahl der Landesnamen zu ermitteln, wenn sie pro Verein nur einmal auftauchen dürfen.
Ansicht 2 dient dazu, lediglich das Maximum der Anzahl darzustellen.

Anschließend habe ich mit Hilfe dieser beiden Ansichten und der Ausgangstabelle eine Abfrage erstellt, die Vereine und Länder so anzeigt, wie es in Deinem Screenshot zum Ausdruck gebracht ist.

Gruß

Robert
Dateianhänge
Fußball_EC_2000bis2017_2.odb
(77.28 KiB) 46-mal heruntergeladen

Benutzeravatar
ChristianAC
***
Beiträge: 91
Registriert: So, 30.11.2014 23:59

Re: Abfragen einer Datenbank

Beitrag von ChristianAC » Mo, 01.05.2017 12:17

Hallo RobertG,

wieder einmal herzlichen Dank.
Vor allem für's "Reindenken"...
Das schaue ich mir gleich an!!!!

Gruss Chris


[EDITh 01.05.17, 14:43 Uhr:]
Hallo zusammen, Robert, Total und andere,
eine Sache hätte ich jetzt noch, das ist wohl gleich die diffizilste:
Du hast mir das ja jetzt sehr schön mit Zwischenschritten gezeigt.
Ich glaube, ich habe es auch soweit kapiert?!
Ist es aber denn auch möglich,das auch in EINE einzige Abfrage zu kriegen?
Also alles mit einer „Monsterformel“. Dann hätte ich das gekapselt und komprimiert vorliegen
und könnte die Abfrage als eine einzige einreihen zu meinen eigenen (Versuchen).
Ich denke, es müsste doch theoretisch möglich sein, mit einer Abfrage, die zwei oder drei
SELECTs enthält, und COUNT und MAX so etwas hinzubekommen,oder? Oder stößt SQL dabei an seine Grenzen?
Zudem: ist eine Version auch möglich, wo ich die zwei „Superiors“ Real Madrid und Real San Sebastian nicht dabeihabe?
Sorry, ich weiß, ist viel verlangt; lasst Euch ruhig etwas Muße damit. Wäre toll, wenn das ginge.

Gruss MFG Chris
[/EDITh]
[2.EDIT] Ich möchte mich an dieser Stelle einmal ausdrücklich besonders einmal bei Robert bedanken,
der sich immer toll kümmert. Und weil ich weiß, dass BASE schon mal eine Zumutung sein kann
(ich glaube, wenn Multitasking beim Wort genommen wird, besonders da werden viele DB-Dateien unbrauchbar; auch schon erlebt)
,bewundere ich den "langen Atem". Da können die Apache-Leute wirklich noch etwas,nein,viel viel verbessern.[2.EDIT Ende]
Zuletzt geändert von ChristianAC am Do, 27.07.2017 02:46, insgesamt 1-mal geändert.
Internetrechner mit Win 7 OO 3.0.0 sowie Notebook mit XP und AOO 4.1.1
VideoPoker-Spiel

Benutzeravatar
ChristianAC
***
Beiträge: 91
Registriert: So, 30.11.2014 23:59

Re: Abfragen einer Datenbank

Beitrag von ChristianAC » Mo, 29.05.2017 23:51

Guten Tag an alle & auch an Robert,

ich wollte noch einmal fragen: RobertG,
ist es möglich, das Letzte in eine einzige,professionelle Abfrage zu packen?
Ich würde gerne mein Datenbankprojekt etwas entschlackt halten,
ich habe es jetzt auch für die aktuelle Saison erweitert.
(Im Dezember kommt ja dann hoffentlich überdies noch der 1.FC Köln dazu... :lol:
die Chancen dazu stehen ganz,naja,relativ gut)

weil es doch um meine Heimat Aachen und den hiesigen Klub geht,
der gerade einen Punktabzug in der 4. Liga hatte,
und weil es eben diese Kuriosität, dass es gleich zwei Top-Verbände sind,gibt,
hätte ich es so gerne, dass alles in einer Abfrage, ohne Hilfstabellen, vorliegt.

Ist das möglich?
Ich hatte Anfang Mai dazu meinen letzten Beitrag in diesem Thread noch mal editiert,
mich dann aber nicht mehr gemeldet. Bitte mal schauen.

[EDITH]
Hallöchen noch einmal,

da fehlte noch ein klein wenig,denke ich doch?!... 24 Europa-League-Vereine der vergangenen Saison möchte ich Euch natürlich nicht "vorenthalten".
Ich habe die Eingabe für Euch gemacht....
Stöbert mal ein bißchen drin;ist wichtig. Auch der Fussball kann so einige Aha-Erlebnisse produzieren!!
Ich freue mich über Jede und Jeden, den das interessiert!

PS: auch die Ergebnismengen der Abfragen haben sich ein bissel verändert
(Gent,Nikosia); habe noch ein, zwei Abfragen hinzugefügt
Grüssle, C
[EDITH Ende]
Dateianhänge
Fußball_EC_2000bis2017.odb
zum 30.6.17
(79.87 KiB) 31-mal heruntergeladen
Zuletzt geändert von ChristianAC am Do, 27.07.2017 02:39, insgesamt 1-mal geändert.
Internetrechner mit Win 7 OO 3.0.0 sowie Notebook mit XP und AOO 4.1.1
VideoPoker-Spiel

RobertG
*******
Beiträge: 1638
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfragen einer Datenbank

Beitrag von RobertG » Mi, 31.05.2017 21:48

Hallo Christian,

ich kapiere von dem, was Du erreichen willst, nahezu nichts. Wenn Du auf irgendeine Weise das so als Screenshot zeigen könntest, wie das Ergebnis mit den Beispieldaten (anhand der letzten Beispieldatei) aussehen sollte, dann komme ich vielleicht darauf, was Du denn erreichen willst.

Gruß

Robert

ChristianAC_

Re: Abfragen einer Datenbank

Beitrag von ChristianAC_ » Mi, 31.05.2017 21:53

Hallo Robert,

also, genau so die Ergebnismenge wie oben in dem Screenshot,
nur ohne Hilfstabellen,sondern in einer komplexeren Abfrage,
ich würde so gerne die Datenbank entschlackt halten.

Gruss ChristianAC

RobertG
*******
Beiträge: 1638
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfragen einer Datenbank

Beitrag von RobertG » Do, 01.06.2017 12:02

Hallo Christian,

Ansichten und Abfragen blähen die Datenbank nicht auf. Natürlich könntest Du versuchen, alles zusammen in eine Abfrage mit Unterabfrage, die wieder auf eine Unterabfrage aufbaut, zu verkomplizieren. Dadurch erzeugst Du aber nur deutlich unübersichtlicheren Code ohne an Geschwindigkeit zu gewinnen oder auch an Speicherbedarf zu minimieren. Eher dürfte das auf eine langsamere Version hinauslaufen, da Ansichten schneller arbeiten all Abfragen. Dies liegt daran, dass Ansichten direkt beim Laden der Datenbank von der Datenbank verwaltet werden, der Abfragecode wird hingegen bei der Ausführung der Abfrage erst komplett zur Datenbank geschickt.

Nachtrag: Wenn Dich nur stört, dass so viele Ansichten sichtbar sind, dann kannst Du auch unter
Extras > Tabellenfilter
diese Ansichten als "nicht sichtbar für die GUI" definieren. Die Ansichten sind dann zwar vorhanden, stören aber nicht beim Überblick über die Tabellen.

Gruß

Robert

ChristianAC_

Re: Abfragen einer Datenbank

Beitrag von ChristianAC_ » Do, 01.06.2017 19:55

Hallo RobertG,

ich bleibe mal hartnäckig *g. Ich kann verstehen, dass Du die funktionierende Abfrage nicht zu
einer Monsterabfrage ummodeln möchtest. Denn das mit der Performance sehe ich auch ein.
Nichtsdestotrotz wäre mir das egal mit der Performance. Gäbe es eine Möglichkeit, die
Hilfsqueries auszublenden, wäre das gut. Fakt ist, dass ich diese komplexe Abfrage nie allein
hinbekäme.
Überdies haben wir hier noch die Sache Real Madrid und Real Sociedad San Sebastian. Zum aktuellen
Stand haben beide mal sozusagen "über" der Europa League gespielt, aber nie konkret IM
EL-Seizième. Diese sollten in der Query nicht auftauchen. Ergebnismenge also genau so wie im
Screenshot oben.
Gruss ChristianAC

Anmerkung: Okay, ich sehe gerade Deinen Nachtrag. Das ist eine gute Möglichkeit.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste