sql select from where, podstawy

0

Mam tabele

CREATE TABLE ksiazka(
    id_ksiazka NUMBER(6) CONSTRAINT ksiazka_pk PRIMARY KEY,
    tytul VARCHAR2(30) CONSTRAINT ksiazka_tytul_nn NOT NULL
) 
 CREATE TABLE autor(
    id_autor NUMBER(6) CONSTRAINT autor_pk PRIMARY KEY,
    nazwisko VARCHAR2(20) CONSTRAINT autor_nazwisko_nn NOT NULL,
    imie VARCHAR2(20) CONSTRAINT autor_imie_nn NOT NULL
)
 CREATE TABLE autor_ksiazki(
    waznosc NUMBER(2),
--  najwazniejszy autor ma waznosci o wartosci 1, kolejny 2, itd.
    id_ksiazka NUMBER(6) CONSTRAINT ak_ksiazka_fk REFERENCES ksiazka(id_ksiazka),
    id_autor NUMBER(6) CONSTRAINT ak_autor_fk REFERENCES autor(id_autor),
    CONSTRAINT ak_pk PRIMARY KEY (id_ksiazka, id_autor)

I musze wyświetlić wszystkie tytuły ksiazek henryka sienkiewicza (id_autor = 1)

pisze zapytanie tak

select ksiazka.tytul from ksiazka, autor_ksiazki where autor_ksiazki.id_autor = 1; 

Output:
TYTUL

Potop
Nad Niemnem
Lalka
Wesele
Granica
W pustyni i w puszczy
Literatura polska
...

Próbowałem na kilka innych sposobów i wciąż nie wychodziło to pisze z pytaniem co jest nie tak ?

0
  1. Jak joinujesz tabele to rób to explicite!
  2. Nie bardzo w ogole rozumiem co ta tabela autor_ksiazki ma niby prezentować
  3. Co ci wypisuje:
SELECT ksiazka.tytul, autor.nazwisko
FROM ksiazka 
INNER JOIN autor_ksiazki ON ksiazka.id = autor_ksiazki.id_ksiazka
INNER JOIN autor ON autor.id_autor = autor_ksiazki.id_autor
WHERE autor.id_autor = 1; 
0

O elegancko działa, dziękuje
widze te joiny musze przyswoić bo słabo je rozumiem.

A te tabele to gotowe przez wykładowce to nie wnikam co i jak tam :) Dzięki jeszcze raz!

0

można jeszcze tak(w MsSql na pewno):

SELECT ksiazka.tytul 
FROM ksiazka
,autor_ksiazki 
WHERE autor_ksiazki.id_ksiazka = ksiazka.id_ksiazka 
AND autor_ksiazki.id_autor = 1

1 użytkowników online, w tym zalogowanych: 0, gości: 1