Hallo in der Runde,
ich bin neu und wollte erst wissen, mit welchem Befehl ich aus einer Datenbank mit vielen Tabellen "alle" Info zu einer ID bzw. eines Nachnamens ausgeben lassen kann ?
Danke im voraus
lg
N.A.
Alle Information zu einer ID bzw. einem Nachnamen ausgeben lassen ?
Moderator: thorben.braun
DEN Befehl dazu gibt es nicht.
Du musst schon wissen, in welcher Tabelle die ID verwendet wird und für jede Tabelle den entsprechenden Select absetzen.
Du kannst natürlich auch einen Join verwenden:
select *
from MainTable a
left join SubTable1 b on a.ID = b.ID
left join SubTable2 c on a.ID = c.ID
:
:
left join SubTable25 z on a.ID = z.ID
Du musst schon wissen, in welcher Tabelle die ID verwendet wird und für jede Tabelle den entsprechenden Select absetzen.
Du kannst natürlich auch einen Join verwenden:
select *
from MainTable a
left join SubTable1 b on a.ID = b.ID
left join SubTable2 c on a.ID = c.ID
:
:
left join SubTable25 z on a.ID = z.ID
Hallo in die Runde.
1. ER-Diagramm (Entity-Relationship-Diagramm)
2. Firebird ISQL Tool
zu 1. Im Folgenden ein solches ER-Diagramm zur Firebird Datenbank verein.fdb: zu 2. Firebird ISQL Tool am Beispiel der Firebird Datenbank (Alias) verein.fdb:
Mit isql -a verein.fdb holst Du Dir den Aufbau. So:
Bspw. erkennst Du an den CREATE TABLE Statements schon einmal die Tabellen - hier Kommunikation und Mitglieder.
Beim ALTER TABLE Statement bedarf der Fremdschlüssel (FOREIGN KEY) Deine Aufmerksamkeit. Hier ist es der einzigste Fremdschlüssel mit der Bezeichnung MITGLIED_NR.
Hast Du den Tabellenüberblick und ggfls. die Fremdschlüsselbezeichnungen zusammen, dann fragst Du, wie im Beispiel gezeigt, die infrage kommenden Tabellen mittels SELECT ... WHERE ab. Du kannst auch SELECT-Abfrage mittels JOIN verwenden. Siehe dazu: CREATE VIEW V_TELEFONLISTE und siehe auch die Antwort von bfuerchau.
Viele Grüße
Gerd
Mir fallen dazu diese Möglichkeiten bzw. Vorgehensweisen ein:
1. ER-Diagramm (Entity-Relationship-Diagramm)
2. Firebird ISQL Tool
zu 1. Im Folgenden ein solches ER-Diagramm zur Firebird Datenbank verein.fdb: zu 2. Firebird ISQL Tool am Beispiel der Firebird Datenbank (Alias) verein.fdb:
Mit isql -a verein.fdb holst Du Dir den Aufbau. So:
Code: Alles auswählen
gerd@gerd-MS-7641:~$ isql -a verein.fdb
SET SQL DIALECT 3;
/* CREATE DATABASE 'verein.fdb' PAGE_SIZE 8192 DEFAULT CHARACTER SET UTF8; */
COMMIT WORK;
/* Table: KOMMUNIKATION, Owner: GERD */
CREATE TABLE KOMMUNIKATION (ID INTEGER NOT NULL,
MITGLIED_NR INTEGER NOT NULL,
TELEFON VARCHAR(15),
PRIMARY KEY (ID));
/* Table: MITGLIEDER, Owner: GERD */
CREATE TABLE MITGLIEDER (ID INTEGER NOT NULL,
VORNAME VARCHAR(15),
NAME VARCHAR(20),
PRIMARY KEY (ID));
ALTER TABLE KOMMUNIKATION ADD CONSTRAINT FK_KOMM FOREIGN KEY (MITGLIED_NR) REFERENCES MITGLIEDER (ID) ON UPDATE CASCADE ON DELETE CASCADE;
/* View: V_TELEFONLISTE, Owner: GERD */
CREATE VIEW V_TELEFONLISTE (ID, VORNAME, NAME, TELEFON) AS
SELECT mitglieder.id, mitglieder.vorname, mitglieder.name, kommunikation.telefon
FROM mitglieder
JOIN kommunikation
ON mitglieder.id = kommunikation.mitglied_nr;
gerd@gerd-MS-7641:~$
Beim ALTER TABLE Statement bedarf der Fremdschlüssel (FOREIGN KEY) Deine Aufmerksamkeit. Hier ist es der einzigste Fremdschlüssel mit der Bezeichnung MITGLIED_NR.
Hast Du den Tabellenüberblick und ggfls. die Fremdschlüsselbezeichnungen zusammen, dann fragst Du, wie im Beispiel gezeigt, die infrage kommenden Tabellen mittels SELECT ... WHERE ab. Du kannst auch SELECT-Abfrage mittels JOIN verwenden. Siehe dazu: CREATE VIEW V_TELEFONLISTE und siehe auch die Antwort von bfuerchau.
Code: Alles auswählen
gerd@gerd-MS-7641:~$ isql verein.fdb
Database: verein.fdb, User: GERD
SQL> SELECT * FROM kommunikation WHERE mitglied_nr = 1;
ID MITGLIED_NR TELEFON
============ ============ ===============
1 1 1234888888
5 1 01769999999
SQL> SELECT * FROM mitglieder WHERE id = 1;
ID VORNAME NAME
============ =============== ====================
1 Arno Müller
SQL>
Viele Grüße
Gerd
ISQL Version: LI-V5.0.1.1469
Linux Mint 22 Cinnamon 6.2.7
Linux Mint 22 Cinnamon 6.2.7
Da kommst du um ein graphisches Tool zur Anzeige nicht drum herum.
Allein der Begriff "ID" sagt ja nichts über den Inhalt, da die ID ja Artikel, Bestellungen, Kunden oder sonstwas enthält.
Und es ist schon mühsam, für jede Tabelle den Select zu tippen.
Je nach Umgebung beitet sich z.B. Squirrel an. Das ist Eclipse-basiert (Java) und funktioniert halt auch auf Linux. Der JDBC-Treiber ist da nötig.
Für Windows gibt es z.B. auch den IBExpert.
Ich hatte mir vor 15 Jahren die kostenlose PE-Version geholt, die heute (auch mit 3.0) immer noch funktioniert. Nicht perfekt, aber für mich reichts allemal.
Aktuell ist sie mir leider zu teuer.
Wenn du Office hast, kann man sich die Daten auch via Excel->Externe Daten->ODBC-Quelle (mit dem Firebird-ODBC-Treiber) ansehen. Sich in Tabellen laden und per Korrelation (SVERWEIS) Beziehungen entdecken.
Es gibt bestimmt noch mehr. Aber um die Datenanalyse, ggf. mit Vergleich zur Anwendung, kommst du nicht herum.
Allein der Begriff "ID" sagt ja nichts über den Inhalt, da die ID ja Artikel, Bestellungen, Kunden oder sonstwas enthält.
Und es ist schon mühsam, für jede Tabelle den Select zu tippen.
Je nach Umgebung beitet sich z.B. Squirrel an. Das ist Eclipse-basiert (Java) und funktioniert halt auch auf Linux. Der JDBC-Treiber ist da nötig.
Für Windows gibt es z.B. auch den IBExpert.
Ich hatte mir vor 15 Jahren die kostenlose PE-Version geholt, die heute (auch mit 3.0) immer noch funktioniert. Nicht perfekt, aber für mich reichts allemal.
Aktuell ist sie mir leider zu teuer.
Wenn du Office hast, kann man sich die Daten auch via Excel->Externe Daten->ODBC-Quelle (mit dem Firebird-ODBC-Treiber) ansehen. Sich in Tabellen laden und per Korrelation (SVERWEIS) Beziehungen entdecken.
Es gibt bestimmt noch mehr. Aber um die Datenanalyse, ggf. mit Vergleich zur Anwendung, kommst du nicht herum.
- martin.koeditz
- Beiträge: 474
- Registriert: Sa 31. Mär 2018, 14:35
Hallo Nakhan,
wenn es um den Inhalt der Spalten geht, hilft eigentlich nur ein grafisches Frontend, wie bereits erwähnt. Möchtest du jedoch auf struktureller Ebene Informationen sammeln, kannst du auf die Systemtabellen zurückgreifen. Hierüber kannst du jede DDL-Information der Datenbank auslesen.
Folgende Tabellen sind hier besonders aufschlussreich:
RDB$FIELDS https://firebirdsql.org/file/documentat ... ds-de.html
RDB$RELATIONS https://firebirdsql.org/file/documentat ... ns-de.html
Gruß
Martin
wenn es um den Inhalt der Spalten geht, hilft eigentlich nur ein grafisches Frontend, wie bereits erwähnt. Möchtest du jedoch auf struktureller Ebene Informationen sammeln, kannst du auf die Systemtabellen zurückgreifen. Hierüber kannst du jede DDL-Information der Datenbank auslesen.
Folgende Tabellen sind hier besonders aufschlussreich:
RDB$FIELDS https://firebirdsql.org/file/documentat ... ds-de.html
RDB$RELATIONS https://firebirdsql.org/file/documentat ... ns-de.html
Gruß
Martin
Martin Köditz
it & synergy GmbH
it & synergy GmbH
Hallo Nakhan,
in Ergänzung zu Martins Posting: Wenn Du noch ein wenig mehr Hintergrund liefern kannst, können wir vermutlich besser Ratschläge geben. Angenommen, Du hast in Deinem Job ein Projekt mit Datenbank "geerbt", kennst aber die Datenbankstruktur nicht, dann musst Du Dir zunächst mal einen Überblick über die Struktur verschaffen, also mindestens, wie heißen die Tabellen, in denen das ist, was Du suchst. Wenn Du Anhaltspunkte wie bspw Feldnamen hast, kannst Du gezielter suchen. In Firebird fragst Du dafür die Systemtabellen ab, wie andere Tabellen auch. Weißt Du bspw nur, dass es eine oder mehrere Tabellen mit Namensfeldern gibt, die auch so benannt sind (muss nicht sein, manchmal sind Feldnamen kein Stück sprechend vergeben worden), kannst Du bspw so danach suchen:
Das gibt dir die Liste der Namen der Tabellen, die Felder haben, wo 'name' drin vorkommt, ohne Großkleinschreibung. Du bekommst so uU mehr als Du brauchst, weil das statement nur die Systemtabellen ausklammert, die ebenfalls Felder mit 'name' in Feldnamen haben, aber keine weitere Differenzierung, Du bekommst also auch Views. Das kann man bei Bedarf weiter verfeinern.
Mit isql auf die DB loszugehen geht zwar, aber ein DB-Admintool ist fast immer besser, Du kriegst viel schneller einen Überblick und die typischen Aufgaben sind einfacher zu erledigen. Es gibt zb (Free And Open Source) Flamerobin http://www.flamerobin.org/. Damit kommst Du sehr weit.
Happy Coding, Volker
in Ergänzung zu Martins Posting: Wenn Du noch ein wenig mehr Hintergrund liefern kannst, können wir vermutlich besser Ratschläge geben. Angenommen, Du hast in Deinem Job ein Projekt mit Datenbank "geerbt", kennst aber die Datenbankstruktur nicht, dann musst Du Dir zunächst mal einen Überblick über die Struktur verschaffen, also mindestens, wie heißen die Tabellen, in denen das ist, was Du suchst. Wenn Du Anhaltspunkte wie bspw Feldnamen hast, kannst Du gezielter suchen. In Firebird fragst Du dafür die Systemtabellen ab, wie andere Tabellen auch. Weißt Du bspw nur, dass es eine oder mehrere Tabellen mit Namensfeldern gibt, die auch so benannt sind (muss nicht sein, manchmal sind Feldnamen kein Stück sprechend vergeben worden), kannst Du bspw so danach suchen:
Code: Alles auswählen
select distinct r.rdb$relation_name
from rdb$relations r
join rdb$relation_fields f on f.rdb$relation_name = r.rdb$relation_name
where f.rdb$field_name containing 'name'
and r.rdb$system_flag = 0
Mit isql auf die DB loszugehen geht zwar, aber ein DB-Admintool ist fast immer besser, Du kriegst viel schneller einen Überblick und die typischen Aufgaben sind einfacher zu erledigen. Es gibt zb (Free And Open Source) Flamerobin http://www.flamerobin.org/. Damit kommst Du sehr weit.
Happy Coding, Volker