![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 200 Pomógł: 1 Dołączył: 4.08.2012 Ostrzeżenie: (10%) ![]() ![]() |
witam, na wikibooks czytam kurs o relacjach i jest taki przykład
"Przy każdym rekordzie w tabeli ksiazki pole kategoria_id przechowuje numeryczny ID rekordu kategorii, do którego dana książka jest przypisana." po wpisaniu SELECT kategorie.nazwa FROM ksiazki, kategorie WHERE kategorie.id = ksiazki.kategoria_id AND ksiazki.id = 3; pojawia sie +-------------------+ | nazwa------------| +-------------------+ | Literatura polska | +-------------------+ 1 row in set (0.02 sec) czy moglibyscie mi wytłumaczyc w ktorym miejscu kategoria_id przechowuje numeryczny ID rekordu kategorii? czy chodzi o PRIMARY KEY (id)? jesli tak to skad wiadomo ze chodzi o id kategorii a nie id rekordu ksiazki? a takze wyjasnic dlaczego w zapytaniu wystepuje ta kropka? po prostu prosiłbym o wytłuamczenie mi podstaw działania relacji bo przeczytalem dwa kursy i nie do konca to rozumiem Ten post edytował michat34 5.10.2012, 15:57:33 |
|
|
![]() |
-Gość- |
![]()
Post
#2
|
Goście ![]() |
Kolego, radzę znaleźć jakiś lepszy (nowszy) kurs. Do tego typu zapytań stosuje się od bardzo dawna konstrukcję JOIN, a nie iloraz kartezjański (FROM ksiazki, kategorie) @sowiq Nie wiem czy nie widzisz, ale to nie jest iloczyn kartezjański, w warunku WHERE jest warunek złączenia tabel, a poniższe zapytania są równoważne:
Z dokumentacji MySQL podają również bardziej rozbudowany przykład: Cytat This is a conservative extension if we consider each comma in a list of table_reference items as equivalent to an inner join. For example:
SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c) is equivalent to: SELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c) In MySQL, JOIN, CROSS JOIN, and INNER JOIN are syntactic equivalents (they can replace each other). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 07:25 |