Każdy webdeveloper powinen znać podstawy SQL – języka baz danych. Nie da się stworzyć żadnej, poważnej aplikacji, która nie wymagałaby przechowywania informacji. Nawet w prostych projektach dla początkujących spotkacie się choćby z zapisywaniem danych takich jak np. loginy i hasła użytkowników, zadania w to-do liście czy kontakty w książce telefonicznej. Prawdopodobnie nie ma webdevelopera, back-endowca, full-stacka, który nigdy nie dotknie zapytań SQL. Przygotowałam dla was krótkie, ale szczegółowe wprowadzenie do SQL podstawy dla początkujących.
Co to jest SQL?
Język SQL (ang. Structured Query Language) istnieje od lat 70 i wciąż jest najpopularniejszym językiem zapytań (ang. query language), służącym do tworzenia, edycji, zarządzania relacyjnymi bazami danych (istnieją też bazy nierelacyjne, ale o nich będzie innym razem).
Kurs SQL podstawy w 60 min
Znajomość języka SQL jest przydatną umiejętnością. Jeśli chcecie obsługiwać dowolny system zarządzania relacyjnymi bazami danych taki jak mySQL, PostgreSQL, Firebird, Microsoft SQL Server, potrzebujecie znajomości języka zapytań.
Dane w bazie składowane są w tabelach (tj. relacjach) (można sobie to porównać z tabelą w Excelu). Między tabelami mogą występować zależności – związki między relacjami.
Mam nadzieję, że poniższy schemat przybliży wam działanie SQL i baz danych:
Programista jest użytkownikiem zaawansowanym. Tworzy bazę oraz aplikację np. aplikację webową dla użytkowników końcowych.
Aplikacja jak i programista kontaktuje się z systemem zarządzania bazą danych (np. mySQL) za pomocą języka SQL – przesyła / pobiera / modyfikuje dane w bazie. To system zarządzania wykonuje zadane operacje. Schemat jest informacją jak składowane są dane w bazie.
Aby wykonywać zapytania SQL potrzebujemy środowiska dla naszej bazy danych. Inaczej potrzebny jest nam serwer – wykupiona usługa hostingowa, albo postawiony lokalnie za pomocą np. xampp’a lub wamp’a (w przypadku mySQL). Żeby uniknąć ustawiania środowiska lokalnego skorzystamy z interpretera online trySQL od w3school.
Teoria za nami 😉
Zaczynamy praktyczną naukę języka SQL. Podstawy, które powinen znać każdy programista. Oto skondensowany, 60 minutowy kurs SQL dla początkujących!
1. Utwórz tabelę
Do tworzenia nowych tabel w SQL wykorzystywana jest instrukcja CREATE TABLE
. Jako argumenty podajemy wszystkie nazwy kolumn, które chcemy mieć w tabeli, oraz ich typy danych.
Stworzymy sobie prostą tabelę z postaciami z literackimi (Heroes
– dobrze jest nazywać tabele w języku angielskim jako rzeczowniki w liczbie mnogiej). Nasza tabela składa się z 3 kolumn:
- id – Numer/identyfikatorpostaci (int – liczba całkowita)
- name – Imię i nazwisko (string – ciąg maksymalnie 25 znaków)
- siblings – liczba rodzeństwa bohatera (int – liczba całkowita)
Tak wygląda nasze pierwsze polecenie SQL:
CREATE TABLE Heroes (id int, name varchar(25), siblings int);
W waszej bazie zostały dokonane zmiany – pojawiła się nowa tabela, która jest pusta.
Podczas tworzenia tabel zalecane jest dodanie klucza podstawowego do jednej z kolumn (zazwyczaj id) – jest to wartość niepowtarzalna (unikalna). Każdy wiersz może zostać wskazany na podstawie swojego identyfikatora, dodatkowo przyspiesza to wykonywanie zapytania. Dla różnych systemów zarządzania bazami (np. mySQL, PostgreSQL, Firebird, Microsoft SQL Server) klucz podstawowy można dodać na różne sposoby. Stąd nie będziemy ich omawiać, a więcej o kluczach podstawowych przeczytacie tutaj.
2. Wstawianie wierszy
Wypełnimy naszą tabelę danymi. Aby dodać wiersze z postaciami wykorzystamy instrukcję INSERT
. Możemy to zrobić na dwa sposoby.
1) Pierwszy sposób to wstawianie bez podawania nazw kolumn. SQL zakłada, że podaliśmy wartości we właściwiej kolejności
INSERT INTO Heroes VALUES (1, 'Harry Potter', 0);
Zapis jest krótszy, ale ma pewną wadę. Jeśli w przyszłości postanowimy dodać do tabeli dodatkową kolumnę np. tytuł powieści, to zapytanie przestanie działać.
2) Drugi sposób rozwiązuje powyższy problem. Poniższe zapytanie uwzględnia nazwę kolumn, więc nawet jeśli zmodyfikujemy tabelę, jak długo będą w niej istnieć kolumny – id, name, sibilings, będzie wykonywać się prawidłowo:
INSERT INTO Heroes (id, name, siblings) VALUES (2, 'Ron Weasley', 6);
Teraz nasza tabela zawiera dwa rekordy:
Ćwiczenie: Możesz dodać więcej postaci lub wielokrotnie ten sam wiersz – ponieważ nie mamy ustawionego primary key (klucza podstawowego) takie operacje są możliwe, chociaż jest to działanie niepożądane.
3. Wybieranie / wyświetlanie danych
Zapytania typu SELECT
to główni sprzymierzeńcy programistów i absolutne SQL podstawy. Pozwalają wyciągnąć dane z bazy danych. Są używane dosłownie wszędzie, gdzie trzeba dane z bazy wyświetlić.
Najprostszym zapytaniem SQL jest zapytanie wyświetlające wszystko. Jeśli utworzyliśmy kilka różnych rekordów w bazie, wszystkie możemy wyświetlić za pomocą:
SELECT * FROM Heroes;
Gwiazdka (*) oznacza, że chcemy pobrać wszystkie dostępne kolumny. Dodatkowo, ponieważ bazy danych zwykle składają się z więcej niż jednej tabeli, słowo kluczowe FROM
określa, którą tabelę mamy na myśli.
TrySQL zawiera kilka przykładowych tabeli, dlatego możemy wyświetlić:
SELECT * FROM Categories;
Zazwyczaj jednak nie chcemy na raz mieć wszystkich kolumn z tabeli. Za pomocą SQL możemy wybrać tylko te, które potrzebujemy. Zamiast *
użyjemy nazw kolumn.
SELECT name FROM Heroes;
Możemy pobrać kilka kolumn wymieniajac je po przecinku:
SELECT CategoryName, Description FROM Categories;
W wielu przypadkach zależy nam, by dane były posortowane. W tym celu możemy użyć w SQL instrukcji ORDER BY
. Domyślnie dane sortowane są rosnąco – ASC, możemy też posortować malejąco – DESC:
SELECT CategoryName, Description FROM Categories ORDER BY CategoryName DESC;
Ćwiczenie: Spróbuj napisać zapytanie sortujące rosnąco, ale według drugiej kolumny. Poeksperymentuj z pozostałymi tabelami dostępnymi na TrySQL.
4. Klauzula WHERE
Umiemy wybrać całe kolumny. Teraz zmodyfikujemy nasze zapytania tak, aby wybrać tylko te wiersze, które zawierają w kolumnie odpowinią wartość (wszystkich bohaterów mających 2 rodzeństwa). Tutaj z pomocą przychodzi klauzala WHERE
, która pozwala odfiltrować dane w zależności od warunku.
SELECT * FROM Heroes WHERE siblings = 2;
W mojej tabeli akurat nie ma takich postaci. Jednak możemy skorzystać z tabeli Customers z TrySQL:
SELECT * FROM Customers WHERE Country = 'UK';
W SQL, tak jak w innych językach programowania, możemy użyć operatora modulo – dzielenia z resztą (np. 5 % 2 = 1 – bo reszta z dzielenia 5/2 wynosi 1).
Dzięki czemu szybko znajdziemy wszystkie postacie, których identyfikator jest parzysty.
SELECT * FROM Heroes WHERE (id % 2) = 0;
Ćwiczenie: Znajdź wszystkich klientów z tabeli Customers, którzy pochodzą z Londynu.
5. Operatory AND/OR
Może się zdarzyć, że chcemy, by wiersze spełniały więcej niż jeden warunek. Kilka warunków możemy połączyć za pomocą operatorów logicznych AND
i OR
.
AND – oznacza logiczne „i/oraz” – oba warunki muszą zostać spełnione
OR – oznacza logiczne „lub” – jeden z dwóch warunków musi być spełniony
Baza danych na TrySQL zawiera tabelę Products. Wybierzmy z niej tylko te produkty, które są słodyczami (kategoria 3) oraz ich cena jest wyższa niż 40.
Na początek stwórzmy dwa zapytania:
SELECT * FROM Products WHERE CategoryID = 3;
SELECT * FROM Products WHERE Price > 40;
Gdy je połączymy otrzymamy trzy wiersze:
SELECT * FROM Products WHERE CategoryID = 3 AND Price > 40;
Ćwiczenie: Znajdź wszystkie napoje, których cena nie przekracza 30. Spróbuj znaleźć wszystkie produkty, które są przyprawą lub słodyczami.
6. Operatory IN / BETWEEN / LIKE
Wyrażenie WHERE
pozwala na użycie dodatkowych instrukcji i tworzenie jeszcze lepszych warunków:
IN
– porównuje kolumnę z wieloma możliwymi wartościami. Zwróci wartość true, jeśli uda się dopasować chociaż jedną wartość.BETWEEN
– sprawdza, czy wartość mieści się w zadanym zakresieLIKE
– wyszukuje określony wzorzec
Przykładowo chcemy wybrać z tabeli produkty będące przyprawą lub słodyczami. Możemy pominąć użycie operatora OR. Zamiast tego użyć IN (wartość1, wartość2) i otrzymać ten sam wynik:
SELECT * FROM Products WHERE CategoryID IN (2,3);
Gdybyśmy chcieli wybrać produkty, których cena mieści się w naszym budżecie np. 30-50 stworzylibyśmy następujące zapytanie:
SELECT * FROM Products WHERE Price BETWEEN 20 AND 50;
Możemy też wybrać produkty, których nazwa pasuje do pewnego wzoru np. zaczyna się od 3 tych samych liter – „Cha”
SELECT * FROM Products WHERE ProductName LIKE 'Cha%';
I tutaj pojawia się zaskoczenie. O ile w przypadku wartości liczbowych znak % oznacza symbol modulu – dzielenie z resztą, tak w przypadku stringów % pozwala dopasować dowolny ciąg znaków.
Zapytanie wzorzec '%art%'
dopasuje wszystkie wyrazy, które w środku zawierają słowo art:
SELECT * FROM Products WHERE ProductName LIKE '%art%';
Wszystkie powyższe operacje można odwrócić, umieszczając NOT
przed nimi.
Ćwiczenie:
Spróbuj użyć NOT BETWEEN
dla przykładu wyżej.
Znajdź produkty, które zawierają literę A oraz RT w jednej nazwie produktu (podpowiem, że jest takich nazw 6).
7. Funkcje
Język SQL jest wyposażony w funkcje, które wykonują wiele przydatnych czynności. Oto przykłady najczęściej używanych:
COUNT()
– zlicza liczbę wierszySUM()
– zwraca całkowitą sumę wartości w danej kolumnie liczboweAVG()
– zwraca średnią z wartościMIN()
/MAX()
– zwraca najmniejszą / największą wartość
Prosto policzymy wszystkie produkty w bazie:
SELECT COUNT(*) FROM Products;
Znajdźmy jaką cenę ma najdroższy produkt:
SELECT MAX(Price) FROM Products;
Ćwiczenie: Użyj SUM oraz klauzurę WHERE, aby z sumować koszt wszystkich produktów, które są napojami.
8. Zagnieżdżenia
Jeżeli w poprzednim punkcie w trakcie eksperymentów przyszło wam do głowy szukanie produktu (wiersza) o najwyższej cenie, to mogło się to okazać trudne/niemożliwe z wykorzystaniem samej klauzuli WHERE. To dlatego, że najpierw musimy wykonać obliczenia np. uzyskać cennę najdroższego produktu, a dopiero później możemy tę wartość wykorzystać w porównaniu.
Załóżmy, że tym razem chcemy mieć nazwę oraz ilość produktu o najniższej cenie.
Wyciągnięcie tych dwóch kolumn nie powinno sprawić nam problemu:
SELECT ProductName, Unit FROM Products;
Podobnie znalezienie najniższej ceny nie jest dla nas czymś nowym:
SELECT MIN(Price) FROM Products;
Teraz te dwa zapytania chcemy połączyć za pomocą klauzyli WHERE
:
FROM Products
WHERE Price = (
SELECT MIN(Price) FROM Products
);
Ćwiczenie: Zmień powyższe zapytanie tak, aby zwróciło nazwę, kategorię oraz cenę napojów, których cena jest wyższa niż średnia z cen wszystkich produktów.
9. Łączenie tabeli
W złożonych bazach danych istnieją połączenia – relacje między tabelami.
Prosty, codzienny przykład z życia. W sklepie internetowym możemy mieć tabelę przechowującą zamówienia, która będzie w relacji z tabelą klienci. Nie dziwi nas, że na podstawie zamówienia możemy znaleźć zamawiającego lub na podstawie informacji o kliencie wylistować wszystkie jego dotychczasowe zakupy.
Jak to wygląda w bazie?
W tabeli zamówienia nie mamy informacji o adresie na jaki paczka została wysłana, ale mamy informację o identyfikatorze klienta. Tabelę Orders z tablą Customers łączy w relację kolumna CustomerID. Stąd możemy stworzyć zapytanie, które wyciagnie dla nas np. identyfikator zamówienia, identyfikator kuriera oraz kraj do jakiego została nada przesyłka.
Jeśli chcemy utworzyć zapytanie, które zwraca wszystko, co musimy wiedzieć o zamówieniu, możemy użyć INNER JOIN
do wybrania kolumn z obu tabel.
FROM Orders
INNER JOIN Customers ON
Orders.CustomerID = Customers.CustomerID;
UżycieJOIN
oraz INNER JOIN
oznacza dokładnie to samo – słowo inner można pominąć. Jest to najprostszy i najczęstszy typ łączenia tabeli, ale istnieje kilka innych opcji (słowa w nawiasie można pominąć):
- (INNER) JOIN – zwraca część wspólną dwoch tabel – tylko rekordy, które mają pasujące wartości w obu tabelach
- LEFT (OUTER) JOIN – zwraca wszystkie rekordy tabeli po lewej stronie operatora JOIN oraz rekordy dopasowane z prawej tabeli
- RIGHT (OUTER) JOIN – zwraca wszystkie rekordy tabeli po prawej stronie operatora JOIN oraz rekordy dopasowane z lewej tabeli
- FULL (OUTER) JOIN – zwraca wszystkie rekordy, gdy występuje dopasowanie w lewej lub prawej tabeli
MySQL nie obsługuje polecenia full join. Wówczas konieczne jest połączenie tabeli prawej oraz lewej i uwspólnienie danych za pomocą instrukcji UNION
.
Ponadto możne także spotkać pojęcie self join – oznacza połączenie lub porównywania tabeli samej ze sobą.
Ćwiczenie: Stwórz zapytanie, które zwróci numer zamówienia, numer klienta oraz nazwę kuriera.
10. Aliasy
Spojrzymy na poprzedni przykład. Mógł się początkowo wydawać bardziej skomplikowany, tylko dlatego, że używamy formatu nazwa_tabeli.nazwa_kolumny. Dzięki aliasom, możemy znacznie skrócić ten zapis:
FROM Orders AS o
INNER JOIN Customers AS c
ON o.CustomerID = c.CustomerID;
Słowo AS
jest opcjonalne:
FROM Orders o
INNER JOIN Customers c
ON o.CustomerID = c.CustomerID;
Kod z wykorzystaniem aliasów zadziała dokładnie tak samo, jak kod z pełnymi nazwami, a przy wyciąganiu wielu kolumn z tabeli o dłuższych nazwach będzie bardziej czytelny.
11. Aktualizowanie danych
Często zdarza się, że musimy zmienić dane w bazie. SQL pozwala zaktualizować wiersze za pomocą instrukcji UPDATE
.
Aby zaktualizować wiersz w tabeli potrzebujemy:
UPDATE...SET...WHERE
- Nazwę tabeli, w której dokonujemy zmian
- Nowe wartości w kolumnach
- Wiersze, które mają zostać zaktualizowane – wskazane za pomocą klauzuli
WHERE
Uwaga: Jeżeli pominiemy ostatni punkt – wskazanie wierszy do aktualizacji, to zmodyfikujemy wszystkie wiersze w tabeli (!)
Jak mogliśmy do tej pory zauważyć klienci z Wielkiej Brytanii mają w kolumnie kraj akronim – UK. Chcemy zamienić go na pełną nazwę:
SET COUNTRY = 'United Kingdom’
WHERE Country = 'UK’;
Ćwiczenie: Załóżmy, że użytkownikcza imieniem Elizabeth Lincoln zmieniła nazwisko na Favreau. Nanieś poprawkę w systemie.
12. Usuwanie wierszy
Wreszcie zdarza się tak, że musimy usunąć dane z tabeli. W języku SQL mamy dostępną instrukcję DELETE
– wystarczy wybrać odpowiednią tabelę i wiersz, które chcemy usunąć.
Usuńmy z bazy jednego użytkownika:
WHERE CustomerID = 2;
Teraz gdy wyświetlimy SELECT * FROM Customers;
nie mamy już klienta o identyfikatorze 2.
Uwaga: Przed usunięciem zawsze upewnij się, że klauzulaWHERE znajduje się w zapytaniu. Inaczej zostaną usunięte wszystkie wiersze w tabeli (!)
13. Usuwanie tabeli
Ostatecznie możemy chcieć usunąć całą zawartość – wszystkie wiersze, pozostawiając strukturę tabeli. Prawidłowo zrobimy to poleceniem TRUNCATE TABLE
:
TRUNCATE TABLE Heroes;
*** komenda truncate nie jest już dostępna, chociaż była, pozostał po niej ślad w formie przykładu w3school.
Ten sam efekt usunięcia zawartości tabeli uzyskamy:
DELETE FROM Heroes;
Po tej komendzie tabela znowu jest pusta.
Jeżeli chcemy usunąć tabelę w całości – tj wszystkie ślady, że taka tabela była w naszym systemie, należy wykonać polecenie DROP TABLE
:
DROP TABLE Heroes;
Pamiętajcie jednak zachowywać ostrożność przy poleceniach TRUNCATE oraz DROP – tych operacji nie możecie cofnąć.
Sprawdź swoją wiedzę!
Jeśli chcecie sprawdzić czy opanowaliście podstawy SQL zapraszam was do zrobienia prostego quizu [ sql-quiz ].
Bardziej praktyczne zadania znajdziecie w interaktywnych ćwiczeniach SQL:
Materiały do nauki SQL od podstaw
Ten krótki kurs pokrył najważniejsze, najczęściej używane zapytania SQL podstawy to jednak oczywiście nie koniec. Jak sie uczyć baz danych?
Jeżeli chcecie poznać SQL lepiej tutaj garść materiałów godnych polecenia.
W języku polskim:
– KhanAcademy: Zarządzanie danymi i tworzenie zapytań – kurs SQL wideo z interaktywnymi zadaniami
– Technologie przetwarzania baz danych (Politechnika Poznańska) – wykłady SQL podstawy (mocno rozbudowane) + zadania (w sekcji pozostałe znajduje się skrypt do wygenerowania tabel ćwiczeniowych)
Po angielsku kursy interaktywne:
– Try SQL – krótki interaktywny tutorial w formie wideo + zadania SQL podstawy
– kurs SQL Bolt – interaktywne lekcje krok po kroku – teoria + zadania
– SQL Zoo – kurs SQL krok po kroku też w formie interaktywnego quizu
– PostgreSQL Exercises – interaktywny quiz z wiedzy o SQL podstawy na przykładzie tabel psql
– Data Bases – kilka mniejszych kursów dotyczących baz danych zrobionych przez Stanford University, ale udostępnionych publicznie za darmo.
Jak uczyć się programowania bazy danych?
Pytając w ten sposób za pewne masz na myśli język PL/SQL. PL/SQL, czyli Procedural Language/SQL, jest rozszerzeniem języka SQL używanym w systemach zarządzania bazami danych Oracle (jego odpowiedniki istnieją też w innych systemach np. PL/pgSQL. PL/SQL łączy w sobie standardowe operacje SQL, takie jak zapytania i polecenia aktualizacji danych, z konstrukcjami proceduralnymi, w tym warunkami, pętlami itp – czyli elementami typowymi dla języków programowania.
Dzięki za kolejny wartościowy wpis :)!
Super! Akurat zaczynam się wdrażać w pracy w bazy danych i Twój kurs był jak znalazł! <3
Przede wszystkim dziękuję za ten artykuł!!! bardzo jestem wdzięczna! ponieważ właśnie się uczę SQL od ledwo miesiąca i brnę przez trzy różne kursy. Tutaj szybko i prosto podałaś mi podstawy.
Robię dwa polskie a jeden angielki kurs. I chyba zacznę grzebać w tej stronie w3schools. Chyba przesadzam, bo się boję egzaminu microsofta w Anglii.
Mam kilka pytań. Bo przerobiłam wszystkie ćwiczenia, ale gdzieś czegoś nie rozumiem albo mi brakuje.
1- w podrozdziale o operatorach AND i OR – brakuje mi opisu o OR (zaraz sprawdzą na w3sch o tym)Nie chcę źle zabrzmieć,że się czepiam broń boże! ale chyba go ucięło, albo już mnie zamroczyło z nadmiaru wiedzy i go nie widzę.
2- nie wiem jak zrobić zapytanie do ćwiczenia pod rozdziału 6-operatory. No nie wiem! czy mogłabyś mi podać odpowiedź. Bo naprawdę, głowię się i głowię i nie mogę tego rozgryźć.
3-nie działa mi kwerenda TRUNCATE o kasowaniu wszystkiego w tabeli,ale nie jej struktury ( w tym w3schl try sql) -ale działa DROP. Na stronie podali DELETE FROM ale też nie działa. Szukałam w googlu podpowiedzi,ale nie udało mi się znaleźć odpowiednika. Czy mogłabyś podać działający odpowiednik?
a teraz najgłupsze pytania:
4-dlaczego przy dłuższych zapytaniach piszemy w osobnych linijkach?
5-w podrozdziale 7-Funkcje- (ostatnie długie zapytanie) dlaczego nawiasy są osobno, dlaczego ostatni SELECT jest z tabulatorem, a dlaczego ostatni nawias i średnik są osobno w ostatniej linijce?
Palę się ze wstydu pisząc te pytania,ale kto nie pyta ten się wstydzi całe życie jak to mówią;) mam nadzieję,że mi wybaczysz prostotę pytań.
Dziękuję za poświęcony czas na odpowiedź! 🙂
1. dzięki za uwagę, faktycznie nia dałam opisów and i or zakładając, że kod wystarczy – już naprawione
2. Nie ma problemu
po pierwsze zaprzeczenia z NOT:
^ myślę, że z tym etapem sobie poradziłaś. Na pewno zauważyłaś, że
NOT
to najprostsze zaprzeczenieW drugim zadaniu wiemy, że % zastępuje dowolny znak w ciągu znaków.
stąd produkty na pewno będą miały ciąg znaków przed A, jakieś znaki po A a przed RT i możliwe, że też po RT. Druga sytuacja, to gdy litery są zamienione – zarówno A i RT jest w wyrażeniu, ale odwrotnie najpierw RT później A
stąd:
3. Dziwne, ale faktycznie teraz TRUNCATE nie działa na w3school.
Nic straconego, żeby tę metodę przetestować potrzebujesz dowolny interpreter sql (oracle sql/my sql/psql/ ms sql server) byle nie sqlite. Możesz więc skorzystać z wielu onlinowych interpreterów
np. mySQL: https://paiza.io/projects/xc2VVagxjwwkF7yoqcUC7A?language=mysql
4. Kod jest tak zapisywany, żeby przyjemniej się go czytało ale możesz wszystko zapisać jednym ciągiem 😉
;D
5. Jak wyżej taki zapis ma na celu pokazanie co jest w czym zagnieżdżone – stąd wcięcie i przeniesienie nawiasu do nowej linii
Bardzo dobrze, że pytasz! nie jest to jakaś sztywna konwencja ;D tak zapisywaliśmy je na studiach, był nacisk na używanie wcięć w protokołach (łatwiej nawet samodzielnie znaleźć błąd w takim zapisie), ale jeśli robisz coś w konsoli możesz pisać wszystko w jednej linii ;p
Czy ktoś dysponuje materiałami dostępnymi pod podanym w treści linkiem „– Technologie przetwarzania baz danych (Politechnika Poznańska) – wykłady SQL (…)”
Wróciłam z urlopu chciałam się zabrać za naukę a tutaj zonk, link nieaktywny 🙁
Zaktualizowałam link, ale nie wiem na jak długo, bo politechnika swoje kursy przenosi do systemu moodle 🙂
nazwa „relacyjne” nie odnosi się do zależności pomiędzy tabelami, tylko do jednej tabeli, gdzie poszczególne kolumny są ze sobą relacji. Na samym początku błąd jest 😉
dzięki za zwrócenie uwagi, poprawione! 😉
Siema, w punkcie 9. Zagnieżdżania w ćwiczeniu takie zapytanie będzie poprawne?
SELECT ProductName, categoryID, price
FROM Products
WHERE Price > (SELECT AVG(Price) FROM Products) AND CategoryID = 1;
punkt 13: w editorze na http://www.w3schools.com, który nam podałaś, komenda TRUNCATE TABLE zwraca ostrzeżenie 'Error 1: could not prepare statement (1 near „TRUNCATE”: syntax error)’
Muszę ten wpis przejrzeć, co się zmieniło, bo wszystkie query sprawdzałam w trakcie pisania posta. Dzięki za zwrócenie uwagi
punkt 13: gdy wpisuję na stronce, którą podałaś komendę TRUNCATE TABLE dostaję komunikat: Error 1: could not prepare statement (1 near „TRUNCATE”: syntax error) i pytanie do punktu 9: czemu nagle w zapytaniach pojawiły się kropki ? chodzi o: Orders.OrderID, Orders.ShipperID, Customers.Country punkt 8: … nie wiem jak zrobić zadanie. jeszcze pogłówkuję, ale jak coś to będę pytać 😀
Szukam więcej informacji na temat funkcji count.
Na przykład – klienci z różnych miast kupują produkty z różnych kategorii.
Chcę otrzymać listę miast z których co najmniej dwóch klientów dokonało zakupu z jakiejś określonej kategorii, oraz liczbę tych klientów.
Jedna tabela to miasta, druga to klienci, trzecia to zamowienia, czwarta to produkty, piata to kategorie produktów…
Bawię się SQLem od parunastu lat, ale zawsze miałem problem z liczeniem…
Super kurs dzięki!
Szybko i treściwie, bardzo ok. Zrobiłam też 8,5 h kursu z Udemy od Jose Portilla, gdzie przez połowę dowiedziałam się tyle co tu.
Świetny kurs. Dzięki.
Jedna mała uwaga: „Najprostrzym” piszemy przez „sz”. Wiem, zdarza się 😉
Dzięki, poprawione!
Super wpis, brakowało czegoś takiego po polsku.
Mam jedno pytanie.
Jeśli mamy tabele z kolumnami np. data, kwota, miejsce i chcemy dostać odpowiedź w jakim miejscu była największa kwota to jak to zrobić? Wiem jak znaleźć największą kwotę używamy MAX(kwota). Ale wtedy znajduje nam największą kwotę bez informacji gdzie była wpłata…
Przećwicz zagnieżdżenia (pkt.8)
czy wie ktoś jak rozwiązać zadanie „Spróbuj użyć NOT BETWEEN dla przykładu wyżej. Znajdź produkty, które zawierają literę A oraz RT w jednej nazwie produktu (podpowiem, że jest takich nazw 6).” Nie wiem jak zastosować tutaj NOT BETWEEN
to są 2 zadania
1. Spróbuj użyć NOT BETWEEN dla przykładu wyżej.
Zadanie z przykładu powyżej to:
„Znajdź wszystkie napoje, których cena nie przekracza 30.” -> not between 0-30 pewnie
2. Znajdź produkty, które zawierają literę A oraz RT w jednej nazwie produktu.
Bardzo fajny kurs dla ludzi który tylko słyszeli o SQL. Właściwie mam tylko jedno pytanie a dotyczy ono tej instrukcji:
Dlaczego w sytuacji, kiedy i tak piszemy SELECT FROM ORDERS nazwy pól są przedrostkowane („Orders.”)?
Hej, czy do drugiej części ćwiczenia z pkt. 6. mogę zastosować taki zapis?
W jednym z komentarzy dałaś troszkę inną odp. z zamianą miejsc i zastanawiam się czy w takim razie, czy mój zapis jest wystarczający.
Podało 6 wyników, więc chyba jest dobrze? 🙂
tak to jest dobra odpowiedź, łączysz za pomocą AND więc oba warunki muszą być w danym słowie spełnione
zaktualziować lekka literówka, ale kurs przydatny 😀
pkt 7) ćwiczenie
SELECT * FROM Products WHERE CategoryID = 1 AND SUM(Price)
gdzie zrobiłam błąd?
Proszę bardzo 🙂
Trochę się pobawiłam, ale w końcu dało radę. Mam nadzieję, że policzyło dobrze… wzór jest dla category=3, bo jest najliczniejszą grupą produktów (13 produktów). Posiłkowałam się tutorialem SQL z w3schools, tam jest więcej funkcji, warto przyjrzeć się przykładom, aczkolwiek kurs Rity na początek był bezcenny 1
Super kurs! Szybko i tresciwie. Bardzo dziekuje 🙂
Bardzo fajny kurs. Odświeżyłem sobie podstawy SQL.
Dziękuję za opracowanie.
Kors ok, brakuje jedynie praktycznego użycia w PHP. To znaczy łączenie się bazą danych i wyświetlanie pozycji z bazy danych dla strony www.
Hej mam pytanko, czy ta odpowiedź do ćwiczenia 8 jest ok? 😀
SELECT productname, categoryID, price
FROM Products
WHERE categoryID = 1 AND price > (
SELECT AVG(Price) FROM Products
);
Hej, wydaje mi się, że masz tutaj błąd => SELECT AVG(Price) FROM Products
Wynik = 28.86. Z tego co zrozumiałem to w ten sposób sprawdzasz średnią cenę dla całej tabeli Products, a nie tylko dla napojów. Osobiście zrobiłem to tak:
SELECT AVG(Price) FROM Products WHERE CategoryID = 2
Wynik = 23.06 i chyba to jest prawidłowa średnia cena dla zadania.
Fajne podstawy!
Ja do SQL mam sentyment, bo moja pierwsza komercyjna praca była w charakterze programisty bazodanowego i było to prawie dwa lata intensywnej pracy z bazami danych – od MSSQL po Firebirda. 🙂
Pozdrawiam, Mateusz.
Hej, ja jestem osobą bardzo początkującą i chciałbym nauczyć się SQL. Na początku kursu zostało wskazane jak wygląda pierwsze polecenie, a mianowicie polecenie do tworzenia tabeli. Pytanie, gdzie ja mam sobie to polecenie wpisać? Bo raczej nie w Wordzie 😛
Cześć Rita:)
Bardzo Ci dziękuję za ten kurs, cieszę się że trafiłam na coś TAK dobrego na początku przygody z SQL.
Wszystko tak przejrzyście i logicznie, świetnie się czyta:))
Mam jedno pytanie o SQL.
Chciałam zapytać co jeśli chcemy wiedzieć które słowa zawierają np. literę 'a’?
Czy '%a%’ wystarczy czy ta komenda pokazuje tylko słowa które mają w środku literę 'a’?
A może powinnam użyć komendy OR i napisać:
'%a%’ OR 'a%’ OR '%a’
?
Dziękuję bardzo! :))
Wpis bardzo fajny, ale interaktywne ćwiczenia nie działają. Przycisk Check nie wywołuje żadnej akcji (testowane na Chrome i Edge), więc strata czasu 🙁
Dzięki za ten artykuł. Fajnie rozjaśnia podstawy. Czy masz może aktualny link do materiałów z Politechniki? Link znów nie działa 🙁
Bardzo pomocy wpis. Wielka pomoc 🙂 Mam pytanie do 8 Cwiczenia, czy jest poprawne:
SELECT ProductName, CategoryID, Price
FROM Products
WHERE categoryID = 1 AND (
SELECT AVG(Price) FROM Products
);
Pozdrawiam Serdecznie
Bardzo pomocy wpis. Dziękuję za pomoc.
Mam też pytanie odnośnie 8 cwiczenia(Zagnieżdżanie), czy jest poprawne:
SELECT productname, categoryID, price
FROM Products
WHERE categoryID = 1 AND (
SELECT AVG(Price) FROM Products
);
Pozdrawiam Serdecznie
Super kurs, dziękuję bardzo za rozjaśnienie SQL 🙂
wszedłem przez przypadek, bo przypominam sobie info o sql do rozmowy o prace i na prawdę świetna robota, skomasowana masa wiedzy w żołnierskich słowach, bez lania wody, pozdrawiam
niejasna jest część dotycząca aliasów. Czy alias tworzymy od pierwszej litery? Jeśłi tak to co jeśli są dwie tabele o nazwach zaczynających się na tą samą literę?
dzięki za celną uwagę, alias może być dowolną nazwą
Super napisane. Bardzo przystępnie podana wiedza. Bardzo dziękuję !!!
Fantastyczny wykład, temat SQL bardzo zrozumiale opisany nawet dla takich żółtodziobów jak ja 😛
Dziękuję bardzo i pozdrawiam 🙂
Wszystko z SQL ładnie zebrane w pigułce 🙂
Fajnie by było jednak wrócić do „podlinkowywania” w osobnym oknie/karcie.
A tak w ogóle to REWELACJA. Na styku „prościzna” vs. „nie na moją głowę” czyli idealnie na samodokształt (vide grafy).
Przypomniały mi się czasy pierwszego roku PRAWDZIWEGO studiowania.
Pozdro 🙂
Nie no, to jest po prostu super. Dlaczego dopiero teraz trafiłam na Twój mega wartościowy blog?! Dziękuję za dobrą robotę i wsparcie początkujacych♥️
Cześć,
trafiłam na Twój artykuł i zapowiada się ciekawie. Stworzyłam swoją pierwszą tabelę 🙂 i już tutaj zaczynają się schody – przy dodawaniu wierszy (pkt. 2) pojawia się komunikat: Error 1: could not prepare statement (1 not an error)
Jaka może być przyczyna?