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.
Przed nami demonstracja jeszcze jednego sposobu
łączenia danych przydaje się on jeżeli mamy
dane w dwóch tabelach które są podobne
i chcemy je albo połączyć
albo w jakiś sposób porównać na
potrzeby tej prezentacji stworzę
osobną tabelę która będzie kopią
tabeli heroes będzie
się nazywała się heroes 2 i
będzie zawierała na razie wszystko
to co jest w tabeli heroes taka
forma polecenia create table pozwala stworzyć tablice na podstawie
danych typy danych są przypisywane na
bazie tych danych które są wyciągane w ramach
zapytania w nawiasy i mamy teraz w tabelę
stworzona odświeżmy sobie żeby ją zobaczyć i ma wszystkie kolumny takie
jak jak nasza kolumna heroes to
czego nie ma to są ograniczenia czy nie ma tam żadnych
kluczy ani naszego sprawdzenia
płci ale to w tym momencie nie jest
nam potrzebne to zapytanie create table
można rozszerzyć tak żeby te ograniczenia zostały też skopiowane
teraz żeby można było jakoś porównywać zrobimy
tak że zmodyfikujemy parametr
siły mnożąc go losowo przez razy
2 w ten sposób będziemy mieli część wierszy która będzie
dokładnie odpowiadała temu co jest w starej tabeli a część
wierszy które będą miały zmodyfikowaną
tą wartość kolumny siła jak
to zrobimy zastosujemy zapytanie typu dml update
heroes 2 set
i teraz kolumna strings będzie
miała wartość swoją
przemnożoną przez wartość losową do
generowania nazw losowych mamy funkcje
random dostępną która zwraca nam wartość
od 0 do 1 jeżeli chcemy żeby to była
wartość od 1 do 2 musimy pomnożyć razy 2
i dodać 1 w tym momencie wartości
które się tutaj będą pojawiały to
są wartości jak widać z zakresu od 0
do 1 więc po pierwsze chcemy ten zakres zwiększyć i
otrzymamy wartości od jeden
do dwóch a
że będziemy chcieli uzyskać wartości od zera
od
zera do dwóch a
następnie zaokrąglić funkcją ceiling w
skrócie ceil do wartości całkowitej
w tym momencie mamy albo jeden albo dwa i
możemy przez taką wartość pomnożyć naszą
siłę uzyskując efekt taki
jak właśnie chcieliśmy teraz
mamy do dyspozycji takie możliwości możemy wyświetlić dane
z obu tabel jedno pod drugim ważne
jest żeby zgadzały się kolumny obu
zapytań które będą połączone ponieważ to są te same tabele
więc z tym nie będzie problemu możemy nawet użyć gwiazdki i będziemy
wybierać dane z tabeli heroes a następnie słowem
kluczowym union będziemy łączyć z danymi z nowej
tabeli heroes 2 w tym momencie zamiast
9 rekordów mamy jak widać 14
dlaczego 14 a nie 18 dlatego że
union wyklucza rekordy które się
dublują zwraca tylko unikalne jeżeli chcemy wszyscy wszystkie
łącznie z powtarzającymi się usimy użyć słówka union
all i wtedy mamy proszę bardzo 18 tu
kończy się na janie błysku i tutaj tutaj 9
wiersz to jest końcówka pierwszej pierwszego
zestawu danych z tabeli heroes a tutaj jest zestaw danych z tabeli
heroes 2 więc
tak union daje nam połączenie
tych danych pokazując tylko te które się różnią natomiast możemy też
zobaczyć jak wygląda część
wspólna tych dwóch tabel okazuje
się że to są tylko 4 wiersze które są wspólne
dla obu tabel to są te które których
siła nie została przemrożona losowo razy 2 natomiast
możemy też chcieć zobaczyć rekordy z
bazy heroes które których nie ma w
bazie heroes 2 i to
są te 5 postaci które w tabeli heroes
2 zostały zmodyfikowane jej siła
została wymnożona i to zapytanie pozwala nam zobaczyć tą różnicę
między heroes a heroes 2 jeżeli chcemy zobaczyć
rekordy z bazy heroes 2 których nie ma w bazie heroes po
prostu musimy zapisać to
odwrotnie proszę bardzo to są te
same osoby tylko oczywiście mają różne współczynniki siły
Inne sposoby łączenia danych · 2 min
-- Utworzenie kopii tabeli 'heroes'
CREATE TABLE heroes_2 AS (SELECT * FROM heroes;)
-- Weryfikacja wyrażenia zwracającego losową wartość liczbową 0,1 lub 2
SELECT ceil(random()*2);
-- Losowa zmiana atrybutu 'strength' dla postaci w skopiowanej tabeli
UPDATE hereos_2 SET strangth = strength * ceil(random()*2);
-- Wybranie rekordów z obu tabel (bez powtórzeń)
SELECT * FROM heroes
UNION
SELECT * FROM heroes_2;
-- Wybranie rekordów z obu tabel (z powtórzeniami)
SELECT * FROM heroes
UNION ALL
SELECT * FROM heroes_2;
-- Wybranie wspólnych rekordów dla obu tabel (mających identyczne atrybuty)
SELECT * FROM heroes
INTERSECT
SELECT * FROM heroes_2;
-- Wybranie rekordów, które znajdują się w tabeli heroes a nie znajdują się w tabeli heroes_2
SELECT * FROM heroes
EXCEPT
SELECT * FROM heroes_2;