Podstawy
4 godz. 8 min · Bazy Danych · Full-stack i Programowanie
Pierwszy rozdział wprowadza w historię powstania języka. Wspomnimy o standardach, wykorzystywanych wersjach i podzbiorach SQL’a. Zaraz potem wskoczymy w pierwsze poważne operacje, które pozwolą na pełny cykl tworzenia, zasilania bazy danych i wyciągnięcia z niej wybranych informacji. Rozwikłamy też tajemniczy akronim - CRUD.
Skoro potrafimy już tworzyć bazę i tabele, w które możemy wstawić nowe wiersze, dowiemy się więcej o bardzo ważnej funkcji bazy danych: weryfikacji danych. Zostaną zaprezentowane mechanizmy i techniki, które pomogą utrzymać spójność danych.
W kolejnych lekcjach znajduje się opis serca SQL’a, czyli polecenia wybierającego dane i możliwości i opcji z nim związanych. Od przekształcenia bazy danych w prosty kalkulator, aż do warunków filtrowania wybieranych danych (klauzulą WHERE), sortowania ich (klauzulą ORDER BY), czy ograniczania dużych zestawów wynikowych - w tym wsparcia do paginacji.
SQL jest językiem obsługi relacyjnych baz danych. Dlatego najwyższy czas, aby wspomnieć o relacjach i tym w jaki sposób rozszerzają one możliwości wyszukiwania danych oraz pozwalają zobrazować powiązania między danymi w bazie. Dowiesz się o różnych rodzajach połączeń między tabelami i jak te połączenia (zwane JOIN’ami) pozwalają wybrać to, czego potrzebujesz.
Kolejny rozdział dotyczy grupowania danych (wykorzystując klauzulę GROUP BY) i związanych z tym nowymi możliwościami. Dowiesz się tutaj też w jaki sposób agregować pogrupowane dane i jak takie zagregowane dane filtrować.
Przekonasz się, w jaki sposób można zapamiętywać trudne lub często wykonywane zapytania, wykorzystując do tego widoki (VIEWS) i jak można poprawić wydajność pobierania z nich danych. Przykładowo zastosujemy widoki zmaterializowane (MATERIALISED VIEWS). W tym rozdziale przećwiczysz też możliwość zapisywania danych przez widoki.
Z baz danych korzysta zwykle wielu użytkowników. Aby operacje, które wykonują na wspólnej bazie nie spowodowały nieoczekiwanych konsekwencji, wykorzystuje się mechanizm transakcji. W tym rozdziale wytłumaczymy Ci w jaki sposób użytkownicy mogą modyfikować równolegle te same dane. Tutaj też dowiesz się o poziomach izolacji transakcji i jak używać ich w różnych sytuacjach bazodanowych.
Przy pracy z większą ilością danych, bardzo szybko doświadczysz spowolnienia wykonywania zapytań. O tym jak je przyspieszyć dowiesz się właśnie w tym rozdziale. Zwiększanie wydajności zapytań jest tematem rozległym i zaawansowanym. Tutaj będziesz miał szansę poznać podstawy, w tym - po co są i jak używać indeksów, w jaki sposób analizować jak zapytania są wykonywane i jakie jeszcze są metody wydajniejszego odczytywania danych.
Kurs jest dla osób początkujących, rozpoczynających przygodę z bazami danych. Nie wymaga się znajomości SQL'a ani zaawansowanej wiedzy dotyczącej baz danych. Warto wiedzieć co to są relacyjne bazy danych. Dobrze mieć dostęp do ulubionego silnika bazy danych, ale nie jest to wymagane.
Witaj do tej pory tworzyliśmy niezbyt
dużo zapytania wyobraź sobie że dostałeś skomplikowane zlecenie
na zestawienie danych i po dniu pracy udało ci się stworzyć potężne
zapytanie na kilkanaście linijek uzyskałeś potrzebne dane
i wysłałeś zleceniodawcy inkasując premię za szybko wykonaną
robotę czujesz że kurs sql eduweba zwrócił już
ci się kolejny raz wiesz jednak że to nie jest ostatnie zlecenie i
to zapytanie przyda ci się w przyszłości mógłbyś je po prostu skopiować
sobie i zapisać w pliku albo napisać skrypt który by uruchamiał
to zapytanie ale dlaczego nie zapisać tego zapytania w samej bazie
najbliżej struktury z której korzysta i tutaj przechodzą z
pomocą widoki które chcę przedstawić ci w tym rozdziale widoki
to za pytania zapisane w bazie pod określoną nazwą widoki
zachowują się jak wirtualne tabele można z nich odczytywać zapytania
select a także do nich zapisywać przez insert lub aktualizować
przez update zapisywanie i aktualizacja są jednak
ograniczone pewnymi założeniami o widokach pozwalających
na aktualizacje opowiem na następnej lekcji a teraz zobaczmy
jak się tworzy podstawowe widoki załóżmy że
nasza baza obsługuje grę przygodową i w grze mamy
opcje wyszukiwania bohaterów chroniących drużynę to znaczy
interesują nas bohaterowie z dużym zdrowiem ponieważ spodziewam
się że będzie to bardzo często używane zapytanie to mogę ułatwić korzystanie
z niego przez stworzenie widoku dodatkowo nazwa
widoku od razu informuje jakiego typu danych mogę się spodziewać stworzony
widok pozwala na wybieranie danych jak z
tabeli co za chwilę przećwiczymy już na naszej
bazie danych przy
okazji demonstracji tworzenia widoków chciałbym zaprezentować ci typowe
sytuacje w których się je wykorzystuje widoki
po pierwsze uproszczają wykorzystanie dużych zapytań jak
pamiętasz w poprzednim rozdziale stworzyliśmy na koniec duże
zapytanie które grupowało nam bohaterów
naszych wybierając tylko elfy
i krasnoludy które mają więcej niż jeden element
ekwipunku i zwracając nam ile
tych elementów każdy z nich ma zapytanie
było bardzo duże stwórzmy teraz widok który będzie zawierał
to zapytanie widok tworzy się używając
polecenia dtl create view i podając jego
nazwę nazwijmy go heroes
equipment count nazwa powinna mniej więcej
mówić o tym co dany widok będzie zwracał i po słówku as następuje
zapytanie które jest podpięte pod widok ja je tutaj
wkleję nie będziemy przypisywać takiego dużego zapytania tak
stworzony widok powinno nam się pojawić tutaj na liście widoków
możemy teraz do tego widoku odnosić
się jak d tabeli na przykład zwykłym
zapytaniem select dostaniemy listę bohaterów zgodną z zapytaniem
które jest podpięte pod widok możemy stosować na
nim filtrowanie dalsze tak jak w normalnych zapytaniach typu select
na przykład jeżeli chcemy tylko same elfy w tym momencie tylko
jednego dzięki temu jak widzisz nie musimy stosować wielkiego
podzapytania które robi różne dziwne rzeczy tylko mamy czytelną
i jasną nazwę i takie zapytanie wygląda dość jasno
można zrozumieć że są to wszystkie elementy z widoku który zwraca
liczności ekwipunku bohaterów co więcej z takim widokiem
możemy zjoinować inną tabelę jeżeli potrzebujemy więcej
danych niż taki widok nam zwraca w tym momencie mamy
tylko imię nazwisko i rasę jeżeli chcielibyśmy na
przykład zobaczyć też płeć tego bohatera który został zwrócony
wystarczy że zrobię join dodajmy sobie aliasy
zrobię join z widokiem tutaj
nie mamy identyfikatora więc powiedzmy że na nasze potrzeby połączy
te dwie tabelę używając po prostu first name i last
name w naszym przypadku jest to wystarczający
warunek złączenia mamy unikalnych bohaterów i w
tym momencie możemy wybrać sobie wszystko z naszego
widoku plus kolumnę gender z tabeli heroes
a to prawda teraz jeżeli połączyliśmy widok z tabelą musimy
wskazać nasz warunek dotyczy kolumny w widoku czy tabeli i
możemy sobie rozszerzać zwracane dane o co tylko chcemy
łącząc widok z innymi tabelami albo innymi widokami
po tej lekcji jestem pewien że
potrafisz stworzyć prosty widok dlatego zadanie do przepracowania
będzie troszkę bardziej wymagające ale na pewno także
bardziej satysfakcjonujące chciałbym żebyś stworzył
nowy widok który będzie bazował na widoku tank heroes o
którym mówiliśmy na początku lekcji chciałbym żebyś rozszerzył informację
którą zwraca o dodatkową kolumnę która będzie mówiła
czy bohater posiada jakiś ekwipunek czy nie pamiętaj że
widoki można traktować jak tabele i używać ich w
zapytaniach jeżeli będziesz miał już gotowe rozwiązanie albo będziesz
miał wątpliwości zajrzyj na początek następnej lekcji gdzie
omówimy sobie rozwiązanie tego zadania
Tworzenie widoków i ich użycie · 3 min
-- Stworzenie widoku wyświetlającego elfów i krasnoludów posiadających więcej niż jeden element ekwpunku
CREATE VIEW heroes_equipment_count AS
SELECT first_name, last_name, race, COUNT(equipment_id)
FROM heroes h
JOIN equipment e ON h.hero_id = e.hero_id
WHERE race IN ('elf', 'krasnolud')
GROUP BY first_name, last_name, race
HAVING COUNT(equipment_id) > 1;
-- Zapytanie wykorzystujące powyższy widok, do wyświetlenia tylko elfów posiadających więcej niż jeden element ekwipunku
SELECT * FROM heroes_equipment_count
WHERE race = 'elf';
-- Zapytanie łączące widok i tabelę w celu wyświetlenia dodatkowych informacji (gender) nie zawartych w widoku
SELECT hec.*, h.gender
FROM heroes_equipment_count AS hec
JOIN heroes AS h ON hec.first_name = h.first_name AND hec.last_name = h.last_name
WHERE hec.race = 'elf';