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.
Mówiliśmy o wprowadzaniu danych do bazy no to teraz
dwa słowa o wyprowadzaniu ich z bazy czyli po prostu odczycie danych
z naszej tabeli wraz z podstawami filtrowania tych danych
ten temat odczytu czy wybierania danych z bazy jest dosyć szeroki
dlatego poświęcam mu cały rozdział gdzie omawiam
szczegółowiej te elementy które teraz tylko zaznaczę zanim
jednak przejdziemy dalej dwa przykłady do zadań samodzielnych poprzedniej lekcji wprowadzanie
nowych bohaterów oczywiście poleceniem insert into heroes tym
razem chcę zademonstrować wersję w której podaję do jakich kolumn
dane mają zostać wprowadzone first name last name nie muszę się
trzymać faktycznej kolejności kolumn w bazie tak jak tu je widać po
lewej stronie mogę najpierw podać siłę mądrość ponieważ
mamy domyślną wartość przypisaną do kolumny zdrowie mogę jej w ogóle tutaj nie
podawać tylko podawać manę płeć i rasę a
jeszcze żeby lepiej to wyglądało hero id mogę podać na
początku w ten sposób mogę teraz podawać wartości mamy trzech bohaterów przy
następnej to jest 4 i tutaj po prostu wprowadzać następną
postać na przykład niech to będzie silny
krasnolud o niezbyt dużym rozumku zdrowia nie muszę
podawać będzie domyślne ale mogę podać manę i teraz żeby
nie musieć podawać kolejnego całego zapytania mogę
po prostu po kolei wpisywać dane kolejnych postaci
po przecinkach pozwoliłem sobie szybko wpisać paru nowych bohaterów zrobię mieszankę
międzynarodową teraz możemy wszystkich sześciu dodać
za jednym zamachem proszę bardzo jedno zapytanie ciach wszyscy
są dodani możemy sobie sprawdzić tutaj proszę już mamy dziewięciu bohaterów w
bazie i zauważ że zdrowie wszystkich tych nowo wpisanych
ma wartość domyślną 200 to czego nie wpisałem czego nie
było w tych danych to daty urodzeń kolumna jest definiowana jako niewymagana
może mieć wartości null więc na tym przykładzie one nie są nie zostały
wpisane wracając do zadania
aktualizacji identyfikatorów będzie to update
tabeli heroes i aktualizujemy kolumnę hero id do
wartości o 10 większą czyli do wartości hero id dodajemy 10
w ten sposób nasze identyfikatory które w tej chwili są od 1 do 9
po zaktualizowaniu powinny mieć wartości
od 11 do 19 i tak też się stało mam
nadzieję że też ci się udało uzyskać taki efekt właśnie tego typu zapytaniem
najprostszy sposób wyciągania danych z tabeli już znasz
jest to zapytanie select gwiazdka from heroes czyli wybierz
mi wszystkie dane z tabeli natomiast zazwyczaj chcemy
wybrać tylko niektóre dane po pierwsze możemy ograniczyć się tylko do niektórych
kolumn zamieniając gwiazdkę to oznacza wszystkie
kolumny na listę wybranych kolumn na przykład chcemy zobaczyć tylko
imię nazwisko i jakieś podstawowe
rzeczy rasę zdrowie i manę
mamy tylko to co chcemy lista
elementów które polecenie select zwróci nie musi się ograniczać
tylko do kolumn mogą to być dowolne wyrażenia zwracające jakąś wartość
możemy tutaj zwrócić oczywiście kolumny ale
możemy też z tą kolumną coś zrobić na przykład pomnożyć
wartość przez dwa już nie mówiąc że można po prostu zwrócić
jakąś wartość i mamy teraz hero id pomnożone przez 2 albo jakieś inne
wyrażenie tutaj mała ciekawostka jeśli nie odnosimy się do
wartości tabeli czyli do żadnej kolumny to nie potrzebujemy
nawet dodawać klauzuli from w ten
sposób podczas analizy danych mamy dostęp do podręcznego
kalkulatora w ramach wyrażenia możemy użyć
jak widać tutaj funkcji na przykład funkcji formatującej
nasze dane w tym wypadku sklejające imię i nazwisko w
jedną kolumnę i w ten sposób
rozszerzyć troszkę tą kolumnę w ten sposób mamy po prostu jedną kolumnę która wyświetla
nam imię i nazwisko żeby łatwiej zrozumieć co jest zwracane w poszczególnych
kolumnach możemy użyć aliasów dodając słowo
kluczowe as i nazwę która ma się wyświetlać w nagłówku
kolumny w ten sposób zamiast mało mówiącego
concat który oczywiście odpowiada funkcji użytej mamy nazwę
hero który jest imię nazwisko bohatera wiesz już
w jaki sposób wybierać co ma zostać wyświetlone jako rezultat zapytania
teraz co możemy zrobić żeby wybrać tylko określone dane do zapytania
dodamy znaną ci już klauzulę where która pozwala
zdefiniować predykaty czyli warunki filtrowania danych na przykład ceny
wyświetlić dane konkretnego bohatera znając jego identyfikator nie
mamy bohatera o id 4 nie ma błędu po prostu zwracane jest
puste dane ostatnio modyfikowaliśmy te identyfikatory i one są o
10 większe proszę bardzo mamy dane wybranego
bohatera warunki możemy łączyć jeszcze uwaga
na temat formatowania zapytań ponieważ
zapytanie zaczęło się robić dłuższe to złamałem
je na słowach kluczowych w ten sposób łatwiej jest się zorientować co
to za wartości głównych części zapytania z jakiej tabeli są
pobierane dane czy jaki jest warunek filtrowania jeżeli to wszystko
zapiszemy w jednej będzie to mniej czytelne wracając
do łączenia warunków mądrość zdobywa się z doświadczeniem zobaczmy
w takim razie wszystkich niedoświadczonych krasnoludów musimy wprowadzić
warunek na rasę i go połączyć
z warunkiem na mądrość używając logicznego
wyrażenia i wisdom ma być mniejsze
niż 10 mamy dwóch młodych
krasnoludów odważnie zakładam że młodych czyli jeszcze niedoświadczonych
oprócz operatora logicznego and możemy użyć operatorów
or albo operatora not możemy
też używać nawiasów żeby zmieniać kolejność wykonywania
operacji logicznych w tym wypadku są to wszystkie postacie
które nie są nie są krasnoludami albo ich mądrość jest mniejsza od 10
chciałbym powiedzieć o jeszcze jednej klauzuli która pomaga
nam uporządkować dane konkretnie pomaga nam uporządkować
rosnąco lub malejąco jeżeli wybierzemy sobie teraz
wszystkich bohaterów z tabeli heroes możemy posortować
po wybranej kolumnie na przykład po kolumnie mana od
najmniejszego do największego taki jest domyślny taka jest domyślna kolejność
sortowania jeżeli chcemy zmienić musimy wyspecyfikować
że chcemy kolejność malejąca i wtedy zobacz
że rekordy są posortowane po ilości many kolejności od największego
do najmniejszego możemy łączyć te warunki na przykład możemy możemy
mu posortować najpierw po po zdrowiu powiedzmy że rosnąco
a później w ten sposób mamy po zdrowiu sortowanie rosnąco
a w ramach tych samych wartości zdrowia mana
jest sortowana malejąco to tyle w tym rozdziale ponieważ zagadnienia
wybierania danych z bazy czyli zapytania select będziemy zgłębiać
w osobnym rozdziale to tam też pojawiają się konkretne zadania
do pracy własnej na razie mam nadzieję że po tym
rozdziale wprowadzającym w podstawowe operacje na bazie
danych będziesz już w stanie stworzyć swoje własne tabele wprowadzić
do niej dane i też wybrać to co potrzebujesz
Wybieranie i filtrowanie danych · 3 min
-- Wybranie wszystkich rekord�w z tabeli
SELECT * FROM heroes;
-- Wybranie tylko niekt�rych danych (kolumn) z tabeli
SELECT first_name, last_name, race, health, mana FROM heroes;
-- Wybieranie danych z przetwarzaniem - proste operacje na kolumnie 'hero_id'
SELECT hero_id, hero_id * 2, 4 * 4 FROM heroes;
-- Szybkie obliczenia z u?yciem SQL-a (bez odno?nika do tabeli - FROM)
SELECT sqrt(3*power(12,2));
-- U?ycie funkcji do formatowania wybieranych danych
SELECT CONCAT(first_name, ' ', last_name) AS hero, race, gender FROM heroes;
-- Proste filtrowanie do wybrania konkretnego rekordu (postaci)
SELECT CONCAT(first_name, ' ', last_name) AS hero, race, gender
FROM heroes
WHERE hero_id = 14;
-- Filtrowanie danych z wykorzystaniem operacji logicznych
SELECT CONCAT(first_name, ' ', last_name) AS hero, race, gender
FROM heroes
WHERE (NOT race = 'krasnolud') OR wisdom < 10;
-- Sortowanie danych przy wybieraniu, wed?ug paru kolumn
SELECT * FROM heroes ORDER BY health ASC, mana DESC;