SQL - jak uložit databázi

Všechny ostatní programy, které nemají samostatnou sekci

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Wikan 16. 1. 2022 18:53

Nevíš si rady, protože u toho vůbec nepřemýšlíš.
Ten příklad se týká tabulek Reader, Borrowed_Books, Book. Proč do toho pleteš tabulku Uzivatele?
[Book].[Name] = [Uzivatele].[Id] - vážná máš pocit, že jméno knihy se bude shodovat s ID nějakého uživatele?
Tabulku Reader máš jak ve FROM, tak i v JOIN. V podstatě říkáš, že chceš tabulku Reader propojil se sebe samou.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 16. 1. 2022 19:00

Kód: Vybrat vše
SELECT [Surname], [Reader].[Name], [Book].[Name]
FROM [Reader], [Book]
JOIN [Borrowed_Books] ON [Book].[AutorId] = [Reader].[Id]
ORDER BY [Name];


Dobře, a jak by to vypadalo účelně?
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 16. 1. 2022 19:05

[Book].[AutorId] = [Reader].[Id] - v zadání žádné AutorId není. I kdyby ano, mělo by smysl propojovat autora se čtenářem? V podstatě tím říkáš, že chceš aby ti to vrátilo čtenáře, kteří se půjčili svou vlastní knihu.
A kde tam máš na základě čeho je tam připojena tabulka Borrowed_Books?
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 16. 1. 2022 19:09

Vytvořit SELECT, který vrátí jména veškerách čtenářů, kteří si v historii vzali alespoň jednu knihu. K jejich jménům (Reader – Surname + Name) doplnit jméno knihy (Book – Name). Dále zjisti, jak dlouho ji meli u sebe - nepotřebujeme zobrazovat čtenáře, kteří knihy mají u sebe, a ještě je nevrátili

Borrowed Books bych tam připojil na základě příkazu "Date_To != NULL"... protože null (podle mě) jsou ty, které jsou ještě zapůjčené...
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 16. 1. 2022 19:12

A jak poznáš, který řádek v té tabulce Borrowed_Books se týká konkrétní knihy a konkrétního čtenáře?
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 16. 1. 2022 19:14

Reader.Id && Book.Id
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 16. 1. 2022 19:16

Tenhle výraz nic neznamená. Navíc se ty sloupce ani tak nejmenují.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 16. 1. 2022 19:19

Jo, chtěl sem napsat Reader_Id a Book_Id.
Pak máš možná na mysli ty klíče, v nejlevějším sloupci.

https://ibb.co/xLP76T5
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 16. 1. 2022 19:21

Ne, nic takového jsem vážně nemyslel.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 16. 1. 2022 19:24

Tak pak už fakt nevim... Maximálně pak Date_From, to je u každé položky...
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 16. 1. 2022 19:27

Kód: Vybrat vše
SELECT *
FROM TabulkaA
JOIN TabulkaB ON TabulkaB.X = TabulkaA.X
JOIN TabulkaC ON TabulkaC.Y = TabulkaB.Y
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 16. 1. 2022 19:35

Kód: Vybrat vše
SELECT *
FROM TabulkaA
JOIN TabulkaB ON TabulkaB.X = TabulkaA.X
JOIN TabulkaC ON TabulkaC.Y = TabulkaB.Y


Vytvořit SELECT, který vrátí jména veškerách čtenářů, kteří si v historii vzali alespoň jednu knihu. K jejich jménům (Reader – Surname + Name) doplnit jméno knihy (Book – Name). Dále zjisti, jak dlouho ji meli u sebe - nepotřebujeme zobrazovat čtenáře, kteří knihy mají u sebe, a ještě je nevrátili



Kód: Vybrat vše
SELECT *
FROM [Reader]  // jakou tabulku dám "jako první" je jedno?
JOIN [Book] On [Book].[Book_Id] = [Reader].[Book_Id]
JOIN [Borrowed_Books] ON [Borrowed_Books].[Date_To] = [Book].[Date_To]
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 16. 1. 2022 19:37

Tabulka Book má sloupec Date_To?
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 16. 1. 2022 19:40

SELECT *
FROM TabulkaA
JOIN TabulkaB ON TabulkaB.X = TabulkaA.X
JOIN TabulkaC ON TabulkaC.Y = TabulkaB.Y

SELECT *
FROM [Reader] // jakou tabulku dám "jako první" je jedno?
JOIN [Book] On [Book].[Book_Id] = [Reader].[Book_Id]
JOIN [Borrowed_Books] ON [Borrowed_Books].[Date_To] = [Book].[Date_To]
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 16. 1. 2022 19:42

To jsi mi neodpověděl na otázku.
Wikan
Moderátor
Uživatelský avatar

Předchozí stránkaDalší stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků