@@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 :)
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ę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
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.
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.
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.
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 😅
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
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?
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?
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?
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 ;)
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!
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;
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;
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!
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
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;
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
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";
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
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;
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...
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?
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;
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
*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...
Jedyne czego mi brakuje to treści polecenia. Niby drobiazg, ale ułatwia uczenie się i samodzielną prace :)
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ę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.
Dziękuję za tą serię, mam nadzieję, że dzięki niej sprawnie ogarnę temat
Piękny prezent na święta, pozdrawiam.
Dzięki! Pozdrawiamy 🙂
czekałem na serie związaną z kontynuacja sql i się doczekałem,dziekuje ❤️
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, ... 😀
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.
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.
Paaanie, ratujesz mój projekt zaliczeniowy z baz! Gdyby tylko prowadzący zajęcia na uniwerku umieli tak przekazywać wiedzę...
jezu w końcu coś z tego rozumiem, dzięki stary
No i mamy to!
super objaśnione :)
swietny material
Widać dużą wiedzę tej osoby po dosłownie chwili słuchania
*Dzięki*
bardzo ciekawy partner kanału
super seria ^^
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.
Dobry materiał, trochę szkoda że nie ma rozwiązań do zadań domowych.
dobrze wasze materiały odświeżają wiedzę :D
akurat na inf 03
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 😅
komentarz dla statystyk
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
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?
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 🙂
gdzie jest mirosław?
co mu zrobiliscie?
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 ;)
Tylko nie zapomnijcie o ALTER i tworzeniu Użytkowników. CREATE USER, GRANT itp.
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 🙂
Where to stary standard, kiedyś była bieda :D
witam, jakiego thema użyto w phpmyadmin?
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!
Mam pytanie czy bedzie odswierzona wersja poradnika do html,css I js?
Na pewno będzie kontynuowana 🙂
nie działa mi ta strona po wpisaniu
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;
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;
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 :)
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
Słabiutko...
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
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;
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
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";
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
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;
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...
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
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;
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