Datenbank Join

Kenan89

Bekanntes Mitglied
Hallo,

heute mache ich meine ersten Schritte mit Joins.

Also ich habe zur Übung Newsletter in Java EE geschrieben.

Es funktioniert so:

Links sieht man die Themen(z.b. Spaß und Arbeit), auf die man klicken kann. Klickt man ein Thema an, sieht man, welche Einträge darin gespeichert sind, in der mitte des Bildschirms.

Die Autoren sind in einer Tabelle namens
"ID" "Autor"

Die Themen sind in einer Tabelle namens
"Themen"
"ID" "Thema" "AutorID"
(AutorID ist der Fremdschlüssel)

Die Einträge sind in einer Tabelle namens
"Einträge"
"ID" "Eintrag" "Autor" "ThemenID"
(ThemenID ist der Fremdschlüssel)

Jetzt ist die Frage, wie man das programmiert, bzw. wie der SQL-Statement ist, um z.B. vom Autor XY alles Themen herauszufinden, die er angelegt hat.


Vielleicht?
Java:
select Thema from "Themen" where AutorID=2

Danke für eine hilfreiche Antwort.

EDIT:
Hmm... Ausserdem bin ich momentan mit den sogenannten Fremdschlüsseln beschäftigt. Aber brauche ich die überhaupt? Wenn ein Eintrag erstellt wird, dann darf z.B. das Feld Autor nicht leer sein. Das
heisst in meiner Tabelle Einträge trage ich einen Autor ein und kann dann durch diese Zelle später nach allen Einträgen suchen, die Autor XY geschrieben hat.
Oder hat der Fremdschlüssel weitere Funktionen als nur Verbindungen zwischen Tabellen herzustellen?
 
Zuletzt bearbeitet:
M

maki

Gast
...
Vielleicht?
Java:
select Thema from "Themen" where AutorID=2
Interessant, da wählst du einen Titel der "Datenbank Join" lautet, beschreibst eine Tabllenstruktur und deine mögiche Antwort lautet dann "select irgendwas from irgendwo where irgendwie", so ganz ohne Join... glaubst du denn selber dass das die richtige Antwort ist? ;)

Wenn du nur die ID als Kriterium wählst, wozu dann der Join?
Brauchst doch dann nur eine Tabelle abzufragen...
Ein Join wäre zB. sinnvoll wenn man vom Author Namen auf seine verfassten Bücher kommen möchte.
 

Kenan89

Bekanntes Mitglied
glaubst du denn selber dass das die richtige Antwort ist?
Nein :)

Hmm... Ausserdem bin ich momentan mit den sogenannten Fremdschlüsseln beschäftigt. Aber brauche ich die überhaupt? Wenn ein Eintrag erstellt wird, dann darf z.B. das Feld Autor nicht leer sein. Das
heisst in meiner Tabelle Einträge trage ich einen Autor ein und kann dann durch diese Zelle später nach allen Einträgen suchen, die Autor XY geschrieben hat.
Oder hat der Fremdschlüssel weitere Funktionen als nur Verbindungen zwischen Tabellen herzustellen?

Zum Beispiel in diesem Konstrukt komme ich eigentlich vollständig ohne Fremdschlüssel klar, denn in jeder Tabelle sind die ID`s der dazugehörigen Positionen in anderen Tabellen enthalten.



Ich will z.B. alle Einträge zum Thema T2 vom User XY

PsyodoStatement schaut doch so aus:

*Wähle in Tabelle Einträge alle wo ThemaID: 2 und UserID: 1
Um auch die Usernamen anzuzeigen sage ich noch:
*Wähle in Tabelle Themen Thema wo ID: 2
*Wähle in Tabelle Autor Name wo ID: 1


EDIT: Also ich frage deswegen, weil ich heute meine ersten Schritte Richtung Joins, Fremdschlüsseln und auch auf Abfragen über mehreren Tabellen hinweg mache.
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
mit einem join...

zb so..

select t.Thema from Themen t
join Autoren a (on a.id = t.autorId)
where where a.Autor = 'Kenan'
 
M

maki

Gast
Hmm... Ausserdem bin ich momentan mit den sogenannten Fremdschlüsseln beschäftigt. Aber brauche ich die überhaupt? Wenn ein Eintrag erstellt wird, dann darf z.B. das Feld Autor nicht leer sein.
Bevor du dich an Joins machst solltest du FKs vestanden haben, sind nämlich eine direkte Vorraussetzung dafür ;)

Zum Beispiel in diesem Konstrukt komme ich eigentlich vollständig ohne Fremdschlüssel klar, denn in jeder Tabelle sind die ID`s der dazugehörigen Positionen in anderen Tabellen enthalten.
AuthorID und ThemaID in Einträge sind Fremdschlüssel, dein zus. PK (ID) ist nutzlos, überflüssig und helfen dir kein bisschen, im Gegenteil ;)

Würde sagen du liest dir nochmals die Grundlagen zur Normalisierung (Theorie bis zur 3. Normalform reicht) und "referential integrity" durch, dann sollte dir einiges klarer werden.
 

ARadauer

Top Contributor
Ich will z.B. alle Einträge zum Thema T2 vom User XY
asso...

select e.Eintrag from Einträge e
join Autoren a (on a.id = e.autorId)
join Themen t (on t.id = t.themenId)
where a.Autor = 'XY' and t.Thema = 'T2'

EDIT: Also ich frage deswegen, weil ich heute meine ersten Schritte Richtung Joins, Fremdschlüsseln und auch auf Abfragen über mehreren Tabellen hinweg mache.

warum probierst du es nicht einfach aus? es gibt 1000 anleitungen für joins...
 

Kenan89

Bekanntes Mitglied
Fremdschlüssel und bis zur 3. Normalisierung hatte ich in der Schule.
Fremdschlüssel nimmt ja den Primärschlüssel auf.
Zum Beispiel 1 Autor hat mehrere Texte.
1 Text kann mehreren Autoren zugeordnet werden.
In diesem Fall nimmt Tabelle Texte ID der AutorenTabelle als Fremdschlüssel auf.

Problem ist eben in der Schule haben wir das nie in der praxis programmiert und learning by doing ist ja sehr wichtig.

warum probierst du es nicht einfach aus? es gibt 1000 anleitungen für joins...

Ich brauche den SQL Statement zum setzen eines Fremdschlüssels. Ich habe jetzt das Feld AutorenID in Tabelle Themen angelegt. Jetzt muss ich irgendwie mit alter column AutorenID diesen auf ein Fremdschlüssel umstellen(Momentan ist es nur ein integer).

EDIT:
Java:
 ALTER TABLE "Themen"
                  ADD CONSTRAINT foreign_autor
                  FOREIGN KEY (autorID) REFERENCES "autor" (id);
Damit hat es geklappt einen Fremdschlüssel zu setzen? Ist das auch die korrekte und elegante Methode?
 
Zuletzt bearbeitet:

Kenan89

Bekanntes Mitglied
So durch einen Fremdschlüssel gelangen schonmal keine falschen Daten mehr in die Tabelle.

Jetzt werde ich mich an Joins herantasten.

Das ist das Beispiel:


Ich will jetzt alle Themen des Autors XY anzeigen. Als Ergebnis müsste ich sehen: T1 und T3.



select t.Thema from Themen t
join Autor a (on a.id = t.AutorID);

Dieser Code klappt leider nicht.
 
S

SlaterB

Gast
gibt es eine Fehlermeldung?
welche Datenbank?

es gibt diverse Syntax-Varianten, hast du außer hier im Forum auch ein Tutorial oder Lehrbuch, nach dem du dich richtest?
SQL INNER JOIN Keyword

allgemeiner Tipp:
Java-Klassen und hier DB-Tabellen und ähnliches in Einzahl benennen, Thema statt Themen usw.,
warum hast du Autor und nicht Autoren? dieser gar Mischmasch ist noch schlimmer als alles Mehrzahl
 

Kenan89

Bekanntes Mitglied
User
id name
1 Kenan
2 Hans
3 Peter

Thema
id thema userid
1 Thema1 2
2 Thema2 2
3 Thema3 1
4 Thema4 3
5 Thema5 1

Einträge
id text userid themaid
1 Hallo, wie gehts? 1 2
2 Wann kommst du? 2 2
3 Wer ist alles dort? 3 2
4 Das ist ein wichtiges 1 2
Geschäftstreffen.
5 Ja! 2 2

So, wenn ich jetzt alle Einträge, die dazugehörigen Namen, und das dazugehörige Thema ausgeben will, wie muss ich da vorgehen?

Java:
select u.name, t.thema, e.text
from "Einträge" as e
Wie geht es weiter?
 
S

SlaterB

Gast
du brauchst offensichtlich alle drei Tabellen, wie man das als Join formulieren kann, kannst du ausprobieren oder irgendwo nachschlagen,
immer geht alle Tabelle mit Komma aufzulisten und dann im WHERE gleiche Ids zu verlangen
 

Kenan89

Bekanntes Mitglied
Hmm, ich blicke immer noch nicht so richtig durch. Zwischen 2 Tabellen kann ich joinen.
Aber bei 3 wird es schon komplexer.

Sagen wir ich möchte aus Tabelle Einträge alle Einträge des Users "Muster"(autorid 1) zum Thema "Freizeit".

Meine Vorgehensweise:
select t.thema, u.user, e.text
from "eintraege" as e
join "themen" as t
join "user" as u
on e.autorid=u.id
and e.themenid=kt.id
where e.autorid=1;

Und da hänge ich... Wie geht es da weiter?
 
S

SlaterB

Gast
wie die Join-Syntax wer weiß wo aussieht, hat mich persönlich noch nie interessiert,
wenn man keine Spezialsituationen wie 'auch ein Ergebnis-Eintrag wenn gar kein Verbindungselement vorhanden ist' hat,
dann braucht man diese unbekannten Join-Schlüsselwörter überhaupt nicht,

ganz normal listet man alle Tabellen hintereinander auf:
FROM X x, Y y, Z z

und verknüpft sie passend:
WHERE x.idA = y.idA and y.idB = z.idB
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
torresbig MySQL hibernate - could not resolve entity class ... (Datenbank Anfänger) Datenbankprogrammierung 19
M Meine Datenbank lässt sich mit meiner Methode nicht ändern Datenbankprogrammierung 1
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
T SQL-Statement Datenbank nach SQL Statement schließen? Datenbankprogrammierung 7
M Datenbank Zugraff nach Umwandlung in .jar-Datei nicht mehr möglich Datenbankprogrammierung 4
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
MongoDB-Datenbank in Androidstudio einbinden Datenbankprogrammierung 1
thor_norsk Datenbank: Apache Derby Datenbankprogrammierung 6
B SQlite Datenbank, trotz Statements wurden nicht alle Zeilen erzeugt? Datenbankprogrammierung 35
M Datenbank mit REST API Datenbankprogrammierung 66
M Entfernte Datenbank Datenbankprogrammierung 11
T Datenbank: Tabelle erstellen bei Web-Applikation Datenbankprogrammierung 4
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
M MySQL Datenbank in Array Datenbankprogrammierung 2
S Den letzten Eintrag aus Datenbank ziehen (Oracle SQL Dev.) Datenbankprogrammierung 14
N Datenbank abfragen nach bestimmten Wort Datenbankprogrammierung 7
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
ma095 value NULL- Datenbank Postgresql Spring - intellij community Datenbankprogrammierung 0
raptorrs Plötzlich keine Verbindung zur Datenbank mehr möglich Datenbankprogrammierung 14
Davee SQLite SQLite Datenbank lässt sich nicht auf anderen PCs öffnen Datenbankprogrammierung 8
P Datenbank Tool - besser als oracle SQL Developer gesucht mit effizinte Verbindungsverwaltung Datenbankprogrammierung 2
X JPA (EclipseLink) und Oracle Datenbank Datenbankprogrammierung 2
T Datenbank auf einer Webseite aus einer Exceltabelle erstellen Datenbankprogrammierung 5
L SQL Datenbank Datenbankprogrammierung 7
L SQL Datenbank INSERT INTO Datenbankprogrammierung 6
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
L SQL Datenbank Tabelle erstellen Datenbankprogrammierung 6
nonickatall MySQL Auf neue Datensätze in einer Datenbank reagieren Datenbankprogrammierung 5
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
anton1 Online Datenbank Datenbankprogrammierung 7
krgewb H2-Datenbank öffnen Datenbankprogrammierung 8
J Datenbank abfragen Datenbankprogrammierung 6
P Verbindung zu einer Access Datenbank per Eclipse oder Intellij Datenbankprogrammierung 0
O SQL Abfragen mit Mini Datenbank Datenbankprogrammierung 12
Z Datenbank Choicebox wird nicht befüllt Datenbankprogrammierung 15
S Suche In SQL Datenbank mit array Datenbankprogrammierung 6
P Enum in der Datenbank Datenbankprogrammierung 1
Z SQL- Datenbank 1.PK zu 2.FK Datenbankprogrammierung 3
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
MiMa wo Datenbank verbinden/trennen? Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
DeltaPilot12 Datenbank connect Funktion Datenbankprogrammierung 7
J Oracle Datenbank-Tabelle per Combobox (oder ähnliches) auswählen Datenbankprogrammierung 3
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
J JAR-Datei und Datenbank Datenbankprogrammierung 8
Bluedaishi Datenbank Abfrage Datenbankprogrammierung 36
Kirby.exe Zeile aus der Datenbank holen wenn ein match besteht Datenbankprogrammierung 7
Kirby.exe Es werden keine Einträge in der Datenbank gemacht Datenbankprogrammierung 23
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
J Welche Kriterien haben Einfluss auf die Geschwindigkeit einer Datenbank ? Datenbankprogrammierung 4
B Frage zu Datenbank Design bei Events (ZenDesk) Datenbankprogrammierung 1
M SQLite Datenbank mit SQLite Datenbankprogrammierung 7
C String in Datenbank einfügen Datenbankprogrammierung 11
C Keinen Zugrift auf Datenbank Datenbankprogrammierung 2
C Datenbank zugreifen Datenbankprogrammierung 10
L Auf Strato Datenbank zugreifen Datenbankprogrammierung 7
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
G Datenbank Statement Datenbankprogrammierung 22
M Datenbank editierbach machen in JTable Datenbankprogrammierung 13
S Datenbank MySQL und Java Datenbankprogrammierung 8
M H2 Verbindung zur Datenbank komplett schließen Datenbankprogrammierung 11
J Aufbau meiner Datenbank/Tabelle - Verbessern? So lassen? Datenbankprogrammierung 39
J Nur CRUD über Datenbank Klasse, oder auch mehr ? Datenbankprogrammierung 2
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
L Appabsturz mit Datenbank Datenbankprogrammierung 4
J Zahlungseingänge von mehreren Kunden wie am besten abbilden in der Datenbank ? Datenbankprogrammierung 8
L Datenbank sichern Datenbankprogrammierung 8
S Daten von SQLite Datenbank nutzen Datenbankprogrammierung 5
J Datenbank VPS Server Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
NIckbrick MySQL Befehle aus Datenbank auslesen Datenbankprogrammierung 21
S Datenbank/Java true/false Datenbankprogrammierung 8
J JUNIT und CRUD-Datenbank Datenbankprogrammierung 4
F Datenbank/Datenabgleich/Wiederholungsabfrage Datenbankprogrammierung 12
@SupressWarnings() Eure bevorzugte Datenbank-Library Datenbankprogrammierung 9
C datenbank verbindung config Datenbankprogrammierung 23
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
M Datenbank vor unerlaubtem Zugriff durch Benutzer schützen Datenbankprogrammierung 3
U MySQL Aus Servlet in Datenbank schreiben Datenbankprogrammierung 4
H Datenbank Export mit Java Datenbankprogrammierung 3
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
S SQL-Statement Datenbank Zeitbereich durchsuchen Datenbankprogrammierung 2
L Messenger App - Wie am besten auf Datenbank zugreifen? Datenbankprogrammierung 4
H MySQL Datenbank auf Xampp nimmt keine Mediumblob an. Datenbankprogrammierung 0
D Datenbank Abfrage Datenbankprogrammierung 7
H MySQL Benutzer Login System mit Datenbank Informationen (Abfrage zu User ist auf DB gesichert) Datenbankprogrammierung 42
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29
DaCrazyJavaExpert Derby/JavaDB Unfindbarer Fehler im Datenbank-Code Datenbankprogrammierung 87
DaCrazyJavaExpert Derby/JavaDB Wert einer Variable in der Datenbank direkt auf 1 setzten. Datenbankprogrammierung 71
W MySQL Ausgabe von Datenbank in Java-App Datenbankprogrammierung 6
M portable Datenbank Datenbankprogrammierung 2
S Name aus der Datenbank bekommen Datenbankprogrammierung 2
K Eclipse: JBoss Hibernate Tool: Kein Zugriff auf Datenbank Datenbankprogrammierung 5
MaxG. Datenbank werte vergleichen Datenbankprogrammierung 5
MaxG. Access Datenbank Datenbankprogrammierung 48
@SupressWarnings() HSQLDB Datenbank für mein Dorfbauspiel "Time of Kings" Datenbankprogrammierung 6
K SQLite Datenbank in App integrieren: Vor Auslesen schützbar? Datenbankprogrammierung 6
K Java Datenbank auslesen Datenbankprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben