SQL 2.0 (#1) Złączenia tabel w bazie danych | Inner, Left/Right, Full, Self JOIN
HTML-код
- Опубликовано: 11 июл 2024
- Partnerem kanału jest justjoin.it - portal z największą ilością ofert pracy z widełkami!
Szukasz ofert pracy jako developer baz danych? Zajrzyj:
▶️ bit.ly/justjoin-sql
Inne oferty od justjoin.it:
▶️ bit.ly/justjoin-python
▶️ bit.ly/justjoin-php
▶️ bit.ly/justjoin-security
Jeżeli masz ochotę zobaczyć więcej naszych filmów, podcastów i artykułów w coraz lepszej jakości, to zachęcamy do pozostawienia subskrypcji, a także do odwiedzenia prowadzonych przez nas witryn oraz do polubienia fanpage'u Pasji informatyki na Facebooku.
🔔 Subskrybuj - bit.ly/pasja-sub
Jeśli masz ochotę wesprzeć to co robimy, to możesz:
🖐 Zostać Patronem - patronite.pl/pasja-informatyki
☕️ Ufundować nam wirtualną kawę - buycoffee.to/pasja-informatyki
👉 Fanpage na Facebooku - bit.ly/pasja-fb
👉 Profil Patronite - patronite.pl/pasja-informatyki
👉 Lista Patronów - pasja-informatyki.pl/patroni
👉 Donacje na blogu - miroslawzelent.pl/donate
👉 Harmonogram publikacji - bit.ly/pasja-harmonogram
👉 Kontakt z nami - pasja-informatyki.pl/kontakt/
👉 Współpraca reklamowa - bit.ly/pasja-wspolpraca
👉 Kursy video dla technikum - pasja-informatyki.pl
👉 Blog informatyczny - miroslawzelent.pl
👉 Trenażer egzaminacyjny - egzamin-informatyk.pl
👉 Egzamin-E13.pl - egzamin-e13.pl
👉 Forum dyskusyjne - forum.pasja-informatyki.pl/
👉 Witryna podcastowa - podcast.pasja-informatyki.pl/
👉 Twitter MZ - / miroslawzelent
👉 Twitter DS - / stelmach_damian
📚 Wpis blogowy do tego odcinka:
miroslawzelent.pl/kurs-mysql/...
🕐 TIMESTAMPS (CHWILE CZASOWE):
00:00 Wstęp, partner odcinka: justjoin.it
01:40 Struktura bazy danych, potrzebne oprogramowanie
06:50 INNER JOIN
19:45 LEFT/RIGHT JOIN
34:50 FULL JOIN
37:30 Grupowanie danych i JOIN
41:42 Inne rodzaj złączeń
#pasjainformatyki #sql #join
Dziękuję za tą serię, mam nadzieję, że dzięki niej sprawnie ogarnę temat
Jedyne czego mi brakuje to treści polecenia. Niby drobiazg, ale ułatwia uczenie się i samodzielną prace :)
*Mam nadzieję, że rok 2023 będzie obfitował w treści na tym kanale* 🎁
Też mamy taką nadzieję 🙂 dzięki!
A ja mam pewność że tak będzie.
@@Pasjainformatyki bardzo lubię i cenię sobie waszą serię CTF. Nie dość że poznałem narzędzia o których wcześniej nie słyszałem, co jeszcze omawiacie szczegółowo zagadnienia, dzięki temu łatwiej zrozumieć cały koncept rozwiązywanych zadań :) Liczę na to że w tym roku pojawi się więcej zadań z serii CTF :)
Są dobre...
Po pierwszym wykładzie nic nie zrozumiałem, ale po obejrzeniu odcinków od 1 do 6 na laboratoriach wiedziałem wszystko co było potrzebne. Po drugim wykładzie od razu wróciłem. Świetna seria, dziękuje bardzo!
Piękny prezent na święta, pozdrawiam.
Dzięki! Pozdrawiamy 🙂
czekałem na serie związaną z kontynuacja sql i się doczekałem,dziekuje ❤️
Pięknie dziękuję za kontynuację kursu! Like poleciał jeszcze przed rozpoczęciem słuchania :)
Mała propozycja dla kolejnych nagrań - gdy we wcześniejszych filmikach słuchałem zadania/polecenia, było ono również w formie tekstowej wyświetlone na ekranie. Pauzowałem filmik i starałem się najpierw podołać mu samodzielnie, a później sprawdzałem poprawność wyniku. Gdy o wytycznych do zapytania tylko się mówi, jest to trudniej zrobić. Idealnie by było, gdyby treść zadania pojawiała się na ekranie wraz ze schematem połączenia tabel lub ze screenami potrzebnych/wszystkich tabel :D
Dzięki za sugestię! Z pewnością skorzystam w następnym wideo :) Pozdrawiam, DS.
Cudowne lekcje 😃😃 Bardzo pomocne jest wyświetlenie połączeń/relacji między tabelami
Świetny materiał jasny i klarowny przekaz !
Przystępnie, powoli i szeroko 10/10
Świetny materiał! Czekam na więcej #2, #3, ... 😀
jezu w końcu coś z tego rozumiem, dzięki stary
dobrze wasze materiały odświeżają wiedzę :D
No i mamy to!
Paaanie, ratujesz mój projekt zaliczeniowy z baz! Gdyby tylko prowadzący zajęcia na uniwerku umieli tak przekazywać wiedzę...
super objaśnione :)
swietny material
super seria ^^
*Dzięki*
bardzo ciekawy partner kanału
Super, że pojawił się nowa odsłona!
Pytanie do Wszystkich. Z SQL zacząłem przygode 2 tyg. temu od właśnie tego kursu. Ten temat bardzo mnie zaciekawił, a ponadto może w przyszłości przydać mi się zawodowo.
Wydaję mi się, że łapie temat ale świadom jestem, że raczkuje.
Szukam literatury godnej polecenia. W internetowych księgarniach jest tego sporo.
Czy znajdą się propozycję dla osoby, która rozpoczyna przygodę z SQL?
Z góry bardzo dziękuje za pomoc.
Bardzo dobry materiał jednak brakuje kliku rzeczy w stosunku do poprzednich materiałów z sql
1 brak polecenia na ekranie ( dużo osób już to zauważyło w kom )
2 troszeczkę za szybko pan mówi
3 zdecydowanie brakuje większego wyjaśnienia co dana funkcja robi i pokazanie na przykładzie "co by było gdyby" ( U pana wygląda to jak " tutaj macie zadanie i tak to powinno wyglądać" zamiast " dobrze teraz zajmijmy się tym zadaniem na początku musimy pobrać ta daną z tej tabeli używamy do tego itp...)
Jednak bardzo dziękuje za materiał i z pewnością dalej będę czekał na kolejne
Dokładnie, ja również uważam że ten kurs w wykonaniu Pana Mirosława był lepszy i zgadzam się z punktami wyżej. Jedyna zmiana na plus to, że teraz jest wiecej zadań domowych.
Dobry materiał, trochę szkoda że nie ma rozwiązań do zadań domowych.
35:53 w klauzulach WHERE użyłem odpowiednio do LEFT JOIN: WHERE wypozyczenia.id_wypozyczenia, a do RIGHT JOIN: WHERE wypozyczenia.id_pracownika i też śmiga, ale jak się zamieni RIGHT i LEFT to działa inaczej. Jeśli w obu klauzulach LEFT RIGHT da się po WHERE wypozyczenia.id_pracownika, to działa tak samo, ale jak się da te same w RIGHT i LEFT po WHERE wypozyczenia.id_wypozyczenia, to już znowu działa inaczej.... czegoś tu nie łapie?
Partnerem kanału jest justjoin.it - portal z największą ilością ofert pracy z widełkami!
Szukasz ofert pracy jako developer baz danych? Zajrzyj:
▶ bit.ly/justjoin-sql
Strona super, szczególnie widok mapy. Zaciekawił mnie natomiast ich model biznesowy - na czym oni zarabiają? Wiem że nie ładnie tak pytać, z góry przepraszam.
Widać dużą wiedzę tej osoby po dosłownie chwili słuchania
akurat na inf 03
36:00 smieszne ze obydwa selecty robią co chcemy mając tego samego WHERE/a. ale tak musi byc. jak sobie wyobrazisz lub rozrysujesz tabele bez klauzuli where, wszytsko ma sens.
w drugim select, WHERE wypozyczenia.id_pracownika IS NULL mozna zastapic WHERE pracownicy.id_pracownika IS NULL
Mnie dzisiaj SELF JOIN bardzo się przydał, żeby wyciągnąć odpowiednie powiazania między różnymi rekordami, które znajdowały się w tej samej tabeli. Co ciekawe była to tablica bazy danych CMS Joomla! Więc i ten JOIN się przydaje 😅
witam, jakiego thema użyto w phpmyadmin?
Panie Damianie bardzo dobry odcinek... Chciałem się zapytać jak dodałeś taki motyw do phpmyadmin to jest jakiegoś typu rozszerzenie czy jak to wygląda?
Dzięki! :) Motyw, którego używam to blueberry - łatwo znajdziesz w sieci!
@@Pasjainformatyki super, dzięki bardzo! motyw bardzo ładnie się prezentuje, jest satysfakcjonujący i dodaje klimatu do phpmyadmin ;)
komentarz dla statystyk
Mam pytanie czy bedzie odswierzona wersja poradnika do html,css I js?
Na pewno będzie kontynuowana 🙂
Co do przykładu zaczynającego się w 29:50 - czy w ogóle potrzebujemy tu używać joinów? id_wypozyczenia jak i id_pracownika które nam są potrzebne znajdują się w tabeli wypozyczenia i możemy za pomocą takiego zapytania:
SELECT w.id_wypozyczenia FROM wypozyczenia AS w WHERE w.id_pracownika IS NULL;
uzyskać taki sam efekt jak używając joinów. Myślałem chwilę nad tym i wydaje mi się że robienie tego tak jak na filmie to tylko komplikowanie sobie życia, chyba że czegoś nie zauważam. Ale poza tym przedstawienie tego jak można używać na zmianę left i right join wytłumaczone na plus, po filmie czuje że zrozumiałem jak tego właściwie używać w końcu.
Tak, tutaj można to zrobić tak jak pokazałeś, bo id_pracownika to kolumna w tablicy wypożyczenia. Dobra robota i dzięki za komentarz! :) Pozdrawiam, DS!
W 3:26 wkradł się mały chochlik i w tabeli produkty klucz główny powinien nazywać się id_produktu, a w tabeli zamowienia klucz główny powinien nazywać się id_zamowienia ;)
Ech te chochliki, czają się tu i ówdzie 😉 dzięki za komentarz! Pozdrawiam, DS 🙂
nie działa mi ta strona po wpisaniu
Where to stary standard, kiedyś była bieda :D
gdzie jest mirosław?
co mu zrobiliscie?
Odświeżałem sobie wiedzę i gdybym miał taki kurs dostępny 18 lat temu to dużo łatwiej ogarnąłbym te złączenia.
Brakło słówka o CROSS JOIN, ale także ciekawostek z innych baz danych. Może warto zrobić osobny materiał o różnicach i zaletach takich baz?
CROSS to zazwyczaj iloczyn kartezjański o czym wspominałem 🙂 tak czy inaczej dzięki za komentarz! Pozdrawiam, DS 🙂
Tylko nie zapomnijcie o ALTER i tworzeniu Użytkowników. CREATE USER, GRANT itp.
Stworzyłem coś takiego z przykładu z 37:01
SELECT wypozyczenia.id_wypozyczenia, samochody.marka, samochody.model, wypozyczenia.data_wyp, klienci.imie_klienta, klienci.nazwisko_klienta
FROM wypozyczenia
JOIN dane_wypozyczen ON dane_wypozyczen.id_wypozyczenia=wypozyczenia.id_wypozyczenia
JOIN samochody ON samochody.id_samochodu=dane_wypozyczen.id_samochodu
LEFT JOIN klienci ON klienci.id_klienta=wypozyczenia.id_klienta
UNION
SELECT wypozyczenia.id_wypozyczenia, samochody.marka, samochody.model, wypozyczenia.data_wyp, klienci.imie_klienta, klienci.nazwisko_klienta
FROM wypozyczenia
JOIN dane_wypozyczen ON dane_wypozyczen.id_wypozyczenia=wypozyczenia.id_wypozyczenia
JOIN samochody ON samochody.id_samochodu=dane_wypozyczen.id_samochodu
RIGHT JOIN klienci ON klienci.id_klienta=wypozyczenia.id_klienta
ORDER BY nazwisko_klienta ASC;
Czy komuś udało się zrobić zadanie 2 z pracy domowej w taki sposób, żeby kazda instancja samochodu pojawiał się tylko raz ze swoją ceną? Ponieważ cena za dobe jest w tabeli dane_wypozyczen (co wydaje się błędem designu bazy?) zamiast byc przypisana do samochodu, to kod wywala mi każdy samochód tyle razy, ile razy został wypożyczony, co jest mało czytelne, a mam wrażenie że jeszcze nie uczyliśmy się niczego co by kasowało powtarzające się wyniki.
Ja dodałam na końcu GROUP BY samochody.model i pokazuje (wydaje mi się) dobrze
ja zrobiłam tak SELECT samochody.marka, samochody.model, dane_wypozyczen.cena_doba, dane_wypozyczen.id_samochodu
FROM samochody left join dane_wypozyczen on samochody.id_samochodu=dane_wypozyczen.id_samochodu
GROUP BY samochody.id_samochodu;
jedynie nie wiem czemu przy BMW wychodzi mi id samochodu NULL 🤨
Kojarzycie autonomiczny system egzaminacyjny ?
Kojarzymy...
@@Pasjainformatyki a znacie jakąś podobna platformę co by działała jak ase ?
Nie kojarzę, ale wydaje mi się, że takie systemy tworzy sobie każdy ośrodek egzaminacyjny wg potrzeb.
@@Pasjainformatyki a zrobicie poradnik jak stworzyć taki system ?
Taki system jest dość złożony, trzebaby zrobić mega serię, a w każdym odcinku omówić osobną funkcjonalność, raczej nie będziemy w to wchodzić 🙂 Pozdrawiam!
Z całym szacunkiem dla DS, ale imo MZ >> DS
Zamiast kawy mógłbyś wyświetlać strukturę bazy, żebyśmy wiedzieli jakie nazwy tabel stosować😊
Struktury było już dużo dlatego wybrałem kawę ;) Dzięki za komentarz! Pozdrawiam, DS :)
Słabiutko...
Zadanie z challenge w 37min:
SELECT wypozyczenia.id_wypozyczenia, samochody.marka, samochody.model, wypozyczenia.data_wyp, klienci.imie_klienta, klienci.nazwisko_klienta
FROM wypozyczenia
JOIN dane_wypozyczen ON dane_wypozyczen.id_wypozyczenia=wypozyczenia.id_wypozyczenia
JOIN samochody ON samochody.id_samochodu=dane_wypozyczen.id_samochodu
LEFT JOIN klienci ON klienci.id_klienta=wypozyczenia.id_klienta
UNION
SELECT wypozyczenia.id_wypozyczenia, samochody.marka, samochody.model, wypozyczenia.data_wyp, klienci.imie_klienta, klienci.nazwisko_klienta
FROM wypozyczenia
JOIN dane_wypozyczen ON dane_wypozyczen.id_wypozyczenia=wypozyczenia.id_wypozyczenia
JOIN samochody ON samochody.id_samochodu=dane_wypozyczen.id_samochodu
RIGHT JOIN klienci ON klienci.id_klienta=wypozyczenia.id_klienta
ORDER BY nazwisko_klienta ASC;
Przykładowe rozwiązanie do zadania-challengu z odcinka:
SELECT
d.id_wypozyczenia,
s.marka,
s.model,
w.data_wyp,
k.imie_klienta,
k.nazwisko_klienta
FROM samochody s
INNER JOIN dane_wypozyczen d ON d.id_samochodu = s.id_samochodu
INNER JOIN wypozyczenia w ON w.id_wypozyczenia = d.id_wypozyczenia
FULL JOIN klienci k ON k.id_klienta = w.id_klienta
ORDER BY nazwisko_klienta;
Super materiał!
Rozwiązanie Challenge:
SELECT
wypozyczenia.id_wypozyczenia,
samochody.marka,
samochody.model,
wypozyczenia.data_wyp,
klienci.imie_klienta,
klienci.nazwisko_klienta
FROM samochody
INNER JOIN dane_wypozyczen ON samochody.id_samochodu = dane_wypozyczen.id_samochodu
INNER JOIN wypozyczenia ON wypozyczenia.id_wypozyczenia = dane_wypozyczen.id_wypozyczenia
LEFT JOIN klienci ON klienci.id_klienta = wypozyczenia.id_klienta
WHERE wypozyczenia.id_klienta IS NULL
UNION
SELECT
wypozyczenia.id_wypozyczenia,
samochody.marka,
samochody.model,
wypozyczenia.data_wyp,
klienci.imie_klienta,
klienci.nazwisko_klienta
FROM samochody
INNER JOIN dane_wypozyczen ON samochody.id_samochodu = dane_wypozyczen.id_samochodu
INNER JOIN wypozyczenia ON wypozyczenia.id_wypozyczenia = dane_wypozyczen.id_wypozyczenia
RIGHT JOIN klienci ON klienci.id_klienta = wypozyczenia.id_klienta
WHERE dane_wypozyczen.id_samochodu IS NULL
Mała szansa, że ktoś po takim czasie zweryfikuje ale warto wrzucić rozwiązania do zadania domowego:
Zad. 1
select imie_klienta, nazwisko_klienta, data_wyp from klienci
inner join wypozyczenia on klienci.id_klienta = wypozyczenia.id_klienta
Zad. 2
Zad. 3
select Concat(imie_pracownika, " ", nazwisko_pracownika) as imię_nazwisko from pracownicy
inner join wypozyczenia on pracownicy.id_pracownika = wypozyczenia.id_pracownika
Where data_wyp >= "2022-07-01"
and data_wyp = "2022-04-01"
and data_wyp < "2022-04-30";
Zad. 5
select sum(cena_doba*ilosc_dob) as wartość_wypożyczen, nazwisko_pracownika from samochody
inner join dane_wypozyczen on samochody.id_samochodu = dane_wypozyczen.id_samochodu
inner join wypozyczenia on dane_wypozyczen.id_wypozyczenia = wypozyczenia.id_wypozyczenia
inner join pracownicy on wypozyczenia.id_pracownika = pracownicy.id_pracownika
Where nazwisko_pracownika = "Nowacki";
Mój typ rozwiązania zadania z 37 minuty :)
to:
(SELECT
wypozyczenia.id_wypozyczenia,
samochody.marka,
samochody.model,
wypozyczenia.data_wyp,
klienci.imie_klienta,
klienci.nazwisko_klienta
FROM dane_wypozyczen
INNER JOIN samochody ON samochody.id_samochodu = dane_wypozyczen.id_samochodu
INNER JOIN wypozyczenia ON wypozyczenia.id_wypozyczenia = dane_wypozyczen.id_wypozyczenia
LEFT JOIN klienci ON klienci.id_klienta = wypozyczenia.id_klienta)
UNION
(SELECT
wypozyczenia.id_wypozyczenia,
samochody.marka,
samochody.model,
wypozyczenia.data_wyp,
klienci.imie_klienta,
klienci.nazwisko_klienta
FROM dane_wypozyczen
INNER JOIN samochody ON samochody.id_samochodu = dane_wypozyczen.id_samochodu
INNER JOIN wypozyczenia ON wypozyczenia.id_wypozyczenia = dane_wypozyczen.id_wypozyczenia
RIGHT JOIN klienci ON klienci.id_klienta = wypozyczenia.id_klienta)
ORDER BY `nazwisko_klienta` ASC;
Co to zadanka z 37 min. to mi wyszło coś takiego:
SPOJLER ;)
(SELECT wypozyczenia.id_wypozyczenia, samochody.marka, samochody.model, wypozyczenia.data_wyp, klienci.imie_klienta, klienci.nazwisko_klienta
FROM klienci
LEFT JOIN wypozyczenia ON klienci.id_klienta = wypozyczenia.id_klienta
LEFT JOIN dane_wypozyczen ON dane_wypozyczen.id_wypozyczenia = wypozyczenia.id_wypozyczenia
LEFT JOIN samochody ON dane_wypozyczen.id_samochodu = samochody.id_samochodu)
UNION
(SELECT wypozyczenia.id_wypozyczenia, samochody.marka, samochody.model, wypozyczenia.data_wyp, klienci.imie_klienta, klienci.nazwisko_klienta
FROM klienci
RIGHT JOIN wypozyczenia ON klienci.id_klienta = wypozyczenia.id_klienta
RIGHT JOIN dane_wypozyczen ON dane_wypozyczen.id_wypozyczenia = wypozyczenia.id_wypozyczenia
RIGHT JOIN samochody ON dane_wypozyczen.id_samochodu = samochody.id_samochodu)
ORDER BY nazwisko_klienta ASC;
zrobiłem to zadanie tak samo, ale niestety wziąłem po FROM wypozyczenia, a nie klienci i pokazuje taką samą liczbę rekordów, ale nie są tożsame, czyli dalej coś brakuje...
W tym zadaniu challenge są różne wyniki w zależności co się użyje po FROM. Więc nie wiem czy poniższe jest poprawne:
SELECT wypozyczenia.id_wypozyczenia, samochody.marka, samochody.model, wypozyczenia.data_wyp, klienci.imie_klienta, klienci.nazwisko_klienta
FROM klienci
LEFT JOIN wypozyczenia ON klienci.id_klienta = wypozyczenia.id_klienta
LEFT JOIN dane_wypozyczen ON dane_wypozyczen.id_wypozyczenia = wypozyczenia.id_wypozyczenia
LEFT JOIN samochody ON dane_wypozyczen.id_samochodu = samochody.id_samochodu)
UNION
(SELECT wypozyczenia.id_wypozyczenia, samochody.marka, samochody.model, wypozyczenia.data_wyp, klienci.imie_klienta, klienci.nazwisko_klienta
FROM klienci
RIGHT JOIN wypozyczenia ON klienci.id_klienta = wypozyczenia.id_klienta
RIGHT JOIN dane_wypozyczen ON dane_wypozyczen.id_wypozyczenia = wypozyczenia.id_wypozyczenia
RIGHT JOIN samochody ON dane_wypozyczen.id_samochodu = samochody.id_samochodu)
ORDER BY nazwisko_klienta ASC;
Ja zrobiłem tak:
SELECT
wypozyczenia.id_wypozyczenia,
samochody.marka,
samochody.model,
wypozyczenia.data_wyp,
klienci.imie_klienta,
klienci.nazwisko_klienta
FROM samochody
LEFT JOIN dane_wypozyczen ON dane_wypozyczen.id_samochodu=samochody.id_samochodu
LEFT JOIN wypozyczenia ON wypozyczenia.id_wypozyczenia=dane_wypozyczen.id_wypozyczenia
LEFT JOIN klienci ON klienci.id_klienta=wypozyczenia.id_klienta
UNION
SELECT
wypozyczenia.id_wypozyczenia,
samochody.marka,
samochody.model,
wypozyczenia.data_wyp,
klienci.imie_klienta,
klienci.nazwisko_klienta
FROM samochody
RIGHT JOIN dane_wypozyczen ON dane_wypozyczen.id_samochodu=samochody.id_samochodu
RIGHT JOIN wypozyczenia ON wypozyczenia.id_wypozyczenia=dane_wypozyczen.id_wypozyczenia
RIGHT JOIN klienci ON klienci.id_klienta=wypozyczenia.id_klienta
ORDER BY klienci.nazwisko_klienta ASC
Mógłby ktoś podać swoje rozwiązanie tego full joina z 37 minuty? Wydaje mi się że w moim rozwiązaniu może czegoś brakować:
SELECT
s.marka,
s.model,
w.id_wypozyczenia,
w.data_wyp,
k.imie_klienta,
k.nazwisko_klienta
FROM samochody AS s
LEFT JOIN dane_wypozyczen AS dw ON s.id_samochodu = dw.id_samochodu
LEFT JOIN wypozyczenia AS w ON w.id_wypozyczenia = dw.id_wypozyczenia
LEFT JOIN klienci AS k ON k.id_klienta = w.id_klienta
UNION
SELECT
s.marka,
s.model,
w.id_wypozyczenia,
w.data_wyp,
k.imie_klienta,
k.nazwisko_klienta
FROM samochody AS s
RIGHT JOIN dane_wypozyczen AS dw ON s.id_samochodu = dw.id_samochodu
RIGHT JOIN wypozyczenia AS w ON w.id_wypozyczenia = dw.id_wypozyczenia
RIGHT JOIN klienci AS k ON k.id_klienta = w.id_klienta;
Poniżej moje rozwiązania zadania domowego:
1.
SELECT
w.data_wyp,
k.imie_klienta,
k.nazwisko_klienta
FROM wypozyczenia AS w
LEFT JOIN klienci AS k ON k.id_klienta = w.id_klienta;
2.
SELECT
DISTINCT s.marka,
s.model,
dw.cena_doba
FROM samochody AS s
LEFT JOIN dane_wypozyczen AS dw ON s.id_samochodu = dw.id_samochodu;
3.
SELECT
p.imie_pracownika,
p.nazwisko_pracownika
FROM pracownicy AS p
RIGHT JOIN wypozyczenia AS w ON p.id_pracownika = w.id_pracownika
WHERE w.data_wyp BETWEEN '2022-07-01' AND '2022-07-31';
4.
SELECT
s.marka,
s.model
FROM samochody AS s
JOIN dane_wypozyczen AS dw ON s.id_samochodu = dw.id_samochodu
JOIN wypozyczenia AS w ON w.id_wypozyczenia = dw.id_wypozyczenia
JOIN klienci AS k ON k.id_klienta = w.id_klienta
WHERE k.nazwisko_klienta = 'Karwowski' AND w.data_wyp BETWEEN '2022-04-01' AND '2022-09-30'
ORDER BY w.data_wyp;
5.
SELECT
SUM(dw.cena_doba*dw.ilosc_dob) AS wartosc
FROM dane_wypozyczen AS dw
JOIN wypozyczenia AS w ON w.id_wypozyczenia = dw.id_wypozyczenia
RIGHT JOIN pracownicy AS p ON p.id_pracownika = w.id_pracownika
WHERE p.nazwisko_pracownika = 'Nowacki'
GROUP BY p.id_pracownika;
Pozdrawiam!😊
siemka, mam podobnie.
w klauzulach WHERE użyłem odpowiednio do LEFT JOIN: WHERE wypozyczenia.id_wypozyczenia, a do RIGHT JOIN: WHERE wypozyczenia.id_pracownika i też śmiga, ale jak się zamieni RIGHT i LEFT to działa inaczej. Jeśli w obu klauzulach LEFT RIGHT da się po WHERE wypozyczenia.id_pracownika, to działa tak samo, ale jak się da te same w RIGHT i LEFT po WHERE wypozyczenia.id_wypozyczenia, to już znowu działa inaczej.... czegoś tu nie łapie?
"Wydaje mi się że w moim rozwiązaniu może czegoś brakować:" - tak, brakuje jednej linijki: ORDER BY nazwisko_klienta
Ja zrobiłem to tak:
dotyczy zadania z 37:20
😀
SELECT dane_wypozyczen.id_wypozyczenia, samochody.marka, samochody.model, wypozyczenia.data_wyp, klienci.imie_klienta, klienci.nazwisko_klienta FROM dane_wypozyczen LEFT JOIN samochody ON samochody.id_samochodu=dane_wypozyczen.id_samochodu LEFT JOIN wypozyczenia ON wypozyczenia.id_wypozyczenia=dane_wypozyczen.id_wypozyczenia LEFT JOIN klienci ON klienci.id_klienta=wypozyczenia.id_klienta UNION SELECT dane_wypozyczen.id_wypozyczenia, samochody.marka, samochody.model, wypozyczenia.data_wyp, klienci.imie_klienta, klienci.nazwisko_klienta FROM dane_wypozyczen RIGHT JOIN samochody ON samochody.id_samochodu=dane_wypozyczen.id_samochodu RIGHT JOIN wypozyczenia ON wypozyczenia.id_wypozyczenia=dane_wypozyczen.id_wypozyczenia RIGHT JOIN klienci ON klienci.id_klienta=wypozyczenia.id_klienta ORDER BY `nazwisko_klienta` ASC
Przy ćwiczeniu w PHPmyadmin Wyszukuje mi zupełnie inny wynik, tak jakby NULL był niewidoczny... zapytanie zwraca 66 rekordów zamiast jeden.
SELECT samochody.model, samochody.marka
FROM samochody
RIGHT JOIN dane_wypozyczen ON samochody.id_samochodu=dane_wypozyczen.id_samochodu
WHERE dane_wypozyczen.id_wypozyczenia IS NULL
Dzięki wielkie. Super kurs.
SELECT
wypozyczenia.data_wyp,
CONCAT(klienci.nazwisko_klienta, " ", imie_klienta) AS Nazwisko_i_imie_klienta
FROM wypozyczenia
INNER JOIN klienci ON klienci.id_klienta=wypozyczenia.id_klienta
ORDER By wypozyczenia.data_wyp;
SELECT DISTINCT
samochody.marka,
samochody.model,
dane_wypozyczen.cena_doba
FROM samochody
INNER JOIN dane_wypozyczen ON dane_wypozyczen.id_samochodu=samochody.id_samochodu;
SELECT
pracownicy.imie_pracownika,
pracownicy.nazwisko_pracownika,
wypozyczenia.data_wyp
FROM pracownicy
INNER JOIN wypozyczenia ON wypozyczenia.id_pracownika=pracownicy.id_pracownika
WHERE
data_wyp BETWEEN '2022-07-01' AND '2022-07-31';
SELECT
samochody.marka,
samochody.model,
wypozyczenia.data_wyp,
klienci.nazwisko_klienta
FROM samochody
INNER JOIN dane_wypozyczen ON dane_wypozyczen.id_samochodu=samochody.id_samochodu
INNER JOIN wypozyczenia ON wypozyczenia.id_wypozyczenia=dane_wypozyczen.id_wypozyczenia
INNER JOIN klienci ON klienci.id_klienta=wypozyczenia.id_klienta
WHERE
wypozyczenia.data_wyp BETWEEN '2022-04-01' AND '2022-08-31'
AND klienci.nazwisko_klienta = 'Karwowski';
SELECT DISTINCT
SUM(dane_wypozyczen.cena_doba*dane_wypozyczen.ilosc_dob) AS Wartosc,
CONCAT(pracownicy.nazwisko_pracownika, " ", pracownicy.imie_pracownika) AS Pracownik
FROM dane_wypozyczen
INNER JOIN wypozyczenia ON dane_wypozyczen.id_wypozyczenia=wypozyczenia.id_wypozyczenia
INNER JOIN pracownicy ON wypozyczenia.id_pracownika=pracownicy.id_pracownika
WHERE pracownicy.nazwisko_pracownika = 'Nowacki'
GROUP By Pracownik;