![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
O to pole:
kategoria_id w tabeli ksiazki przechowuje info o kategori do której ksiązka nalezy. Czego tu nie rozumiesz? |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
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) Ten post edytował sowiq 5.10.2012, 15:59:01 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 200 Pomógł: 1 Dołączył: 4.08.2012 Ostrzeżenie: (10%) ![]() ![]() |
KEY to zwykły indeks?
nie rozumiem uzycia kropek w zapytaniu, głownie o nie mi chodzi |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
nie rozumiem uzycia kropek w zapytaniu, głownie o nie mi chodzi Po pierwsze nie napisałeś, że o to Ci chodzi. Po drugie to na tyle oczywiste, że jakbyś się przez kilka sekund zastanowił, to sam byś do tego doszedł. Kropką rozdzielana jest nazwa tabeli i nazwa kolumny. Jeśli robisz zapytanie z jednej tabelki, to wystarczy podawać nazwy kolumn. Ale jeśli (jak w Twoim przykładzie) wykonujesz zapytanie pobierające dane z kilku tabel, to przed nazwami kolumn dodaje się nazwy tabel, np.: tabela1.kolumna_x, tabela7.kolumna_56. Dodawanie nazwy tabeli jest w MySQL wymagane tylko jeśli w co najmniej dwóch tabelach, o które pytasz w zapytaniu, istnieją tak samo nazwane kolumny, o które pytasz. Ten post edytował sowiq 5.10.2012, 16:07:15 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 200 Pomógł: 1 Dołączył: 4.08.2012 Ostrzeżenie: (10%) ![]() ![]() |
wielkie dzieki, teraz rozumiem.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Ech, sowiq
Dodawanie nazwy tabeli jest w MySQL wymagane tylko jeśli w co najmniej dwóch tabelach, o które pytasz w zapytaniu, istnieją tak samo nazwane kolumny, o które pytasz. Nieprawda. Nie zawsze jest wymagane. Należy podać (jeśli są takie same pola) przy: łączeniu (JOIN), warunkach (WHERE), sortowaniu (ORDER BY) i grupowaniu(GROUP BY). Przy zwykłym SELECT nie musi być... Problemy jakie z tego wynikną - cóż, takie same, jakby były prefiksowane nazwą tabeli... Znacznie lepiej takie pola dodatkowo aliasować. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@mmmmmmm, może nie wyraziłem się zbyt jasno.
Cytat istnieją tak samo nazwane kolumny, o które pytasz. Miałem przez to na myśli jawne umieszczenie ich nazw w zapytaniu, czyli dokładnie to, co napisałeś. |
|
|
-Gość- |
![]()
Post
#9
|
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: 23.08.2025 - 08:50 |