
Witajcie, we wpisie o SQLu.
Myślę, że jeśli chodzi o etap rekrutacji, projekty w których SQL jest mniej lub bardziej używamy najbardziej poszukują osób z przynajmniej podstawami SQLa. Wiadomo nikt jako podstawy nie wymaga pisania triggerów albo skomplikowanych funkcji ale basic to podstawy.
Jakiś papierek istqb, java, soap, postman to często na manuala są ‘nice to have’, moim zdaniem SQL to jest ‘must to learn’. Przysiądź i naucz się tego wysokopoziomowego języka ! Ja Cię tutaj go nie nauczę, ale zainspiruje do nauki.
Wstęp do SQLa
Zacznijmy trochę od baz danych, w sensie proste nas nie interesują.
Bazy złożone relacyjne i nie relacyjne.
Inne to już inny temat więc się nie będę rozpisywać, jak ktoś chce to jest Wikipedia, Google i tak dalej.
Relacyjne posiadają relacje 1-1, 1-wiele, wiele-wielu (tabela która je łączy)
Nie relacyjne najczęściej ala klucz – wartość.
Ktoś będzie pisać dlaczego pomijasz inne rodzaje itp.
Bo skupiam się na tym by ktoś wiedział jak zrobić selecta, zamiast wiedzieć co to bazy obiektowe.
ACID – czym jest
Z baz warto wiedzieć o ACID – właściwości poprawności przetwarzania transakcyjnych, chociaż by znać rozwinięcie skrótów.
Atomicty – niepodzielność wykonanie całość albo nic
Consistency – spójność spójność będą nienaruszone zasady izolacji owej transakcji
Isolation – izolacja, posiada poziomy izolacji, o których też warto wiedzieć
read uncommitted – jedna transakcja może odczytywać wiersze, które są używane przez inne transakcje (najniższy poziom izolacji)
read committed – odczyt wierszy tylko zapisanych przez transakcje
repeatable read – transakcja nie może ani czytać ani zapisywać na wierszach używanych przez inną transakcje
serializable (szeregowalne) – pełna izolacja, wyniki zadań realizowanych współbieżnie muszą być identyczne co wyniki samych zapytań realizowanych szeregowo
I poziomy izolacji mogą być zależnie od silniku np. oracle nie ma pierwszego i trzeciego.
Także warto znać o poziomach izolacji, jeśli traficie na jakieś rozwiązania finansowe banki itp. w nowej pracy to będzie pewnie wymagana znajomość.
Durability – trwałość, ostatni punkt, transakcje które zostały zatwierdzone, zostaną zapisane jako aktualne, nienaruszone, spójne, kiedy system ulegnie nagłej awarii zasilania.
Relacyjne bazy – czyli jakie
Relacyjne czyli posiadają ze sobą relacje, nie są to oddzielne byty, ale mogą być. Tabla przecież może, nie musi być powiązana.
Co tu warto wiedzieć ?
Jakie są rodzaje relacji bazo-danowych.
Jeden do jeden przykład :
Osoba posiada jeden pesel, oczywiście, nikt normalny nie trzyma peseli w oddzielnej tabeli tylko w kolumnie. Jednak na potrzeby testów sobie tak zrobiłem.

Dobra przykład jeden do wielu – jeden oznacza się jako jeden, wiele jako znak nieskończoności ∞. Przykładem będzie adres zameldowania, pod adresem może mieszkać. Jedna osoba może mieć tylko jeden adres (tak ustalamy), ale za to jeden adres zameldowania w ‘papierach’, może mieć jedna lub wiele osób.

Ostatnia relacja wiele do wielu – jeśli wyżej przedstawiony, przeze mnie przykład dopuszczał by posiadania przez osobę więcej niż jednego adresu zameldowania, wtedy warunek byłby wiele do wielu.
Wiele do wielu warunek wymaga tabeli pośredniej, pomocnicza, łącznikowa, łącząca. (różnie są nazywane)


Jak taka szczątkowa informacja dla was to za mało poszukajcie w google, najwięcej pytań jest właśnie do wiele do wielu.
Trening pozwoli wam na zrozumienie, dlaczego i po co stosuje się tabele pośrednie.Tyle z relacji.
Najpopularniej typy danych
Wypiszę tylko najpopularniejsze typy danych w SQLu.
int, smallint, bigint – liczby całkowite, o różnej dozwolonej długości
bit – czyli bloolean 1 lub 0, true / false
char, nchar,nvarchar,varchar – char znak, varchar ciąg znaków w ciapach, z n unicode 4000bajtów max, 8000 bez n. długość
numeric, decimal, real – zmiennoprzecinkowe, stała dokładność decimal chyba najczęściej używany a potem numeric, ale w swoich firmach i ich bazy sam się przekonasz czego się używa
jest jeszcze money ale nie wiem czy ktoś tego używa
table – typ danych table, często wykorzystywane do deklaracji zmiennych np. w funkcjach tabelarycznych
i coś ciekawego jeszcze dane binarne – BINARY, varbinary i image.
Inne typy danych
Var to zmienny a binary stały, strumień danych binarnych np. obrazek zakodowany binarnie i obsłużony potem przez program.
Takie najczęściej używane wypisałem, no i jak napisałem, że image może nikt nie używa, to nie wiem, może są firmy, w których go uwielbiają.
No i bym kurde zapomniał formaty daty, czasu date, datetime,smalldatetime, time oraz DATETIMEOFFSET i też datetime2(to pewnie wykorzystywane w precyzyjnych aplikacjach które wymagają dokładności). Chyba najpopularniejszym jest tutaj datatime.
Daty można convertować na różny format też, ale nie wiem czy to nie będzie w następnym wpisie, bo się już przy-długi robi.
Resztę typów, lub rozwinięcie tych co wymieniłem poszukajcie sobie sami.
Tabela skoro wiesz już dużo
Olewamy narazie nierelacyjne silniki typu mongodb, może coś potem wspomnę. Narazie realacyjne czyli najbardziej popularne i porządna znajomość ich podstaw.
Tabele posiadają wiersze i kolumny.
Kolumny posiadają właściwości oraz typ danych.
Wiersze posiadają jeden pełny zbiór kolumn
Np. kolumna to int id, varcharname nazwa, date,aktywny
1,Grzegorz,2020-04-02,1
I takie coś to pojedynczy wiersz, proste.
Właściwości / atrybuty kolumn
not null – ustawienie czy dozwolone jest wprowadzenie wartości NULL do danej kolumny
Autoincrement / identify – czyli czy wartość całkowita ma być automatycznie ustawiana i do tego od jakiego zakresu i jaki skok.
Najczęsciej wykorzystywane przy kluczach głównych.
Wtedy nasz insert nie wymaga / nie pozwoli na ręczne wprowadzenie id chyba że użyjemy sztuczki z tymczasowym wyłączeniem identifya.
Idexowanie – optymalizacja działania bazy per jedna lub wiele kolumn danej tabeli.
Default – wartość domyślna można ustalić np. dla bita że wartość to np. false
jest jeszcze bez znaku, dopełnianie zerami i pewnie inne ale nie używałem tego.
Key – właściwość czy dana kolumna jest traktowana jako klucz
Klucze co to, typy
Główne – primary, można go tworzyć na poziomie tworzenia bazy
CREATE TABLE person{id lin not null,id2 int not null,name varchar(max),name2varchar(8000),PRIMARY KEY (id)
--CONSTRAINT PRIMARY KEY
--pkperson (id,id2)
}
lub ALTER TABLE `nazwa_tabeli`
ADD PRIMARY KEY (`nazwa_kolumny`)
O tym poczytajcie i popróbujcie sami, to tylko zajawka.
Obce – żeby sobie tabele łączyć, klucz pochodzi z obcej jak wynika z nazwy tabeli.
Są też klucze złożone – jeśli jeden klucz nie wystarcza i musimy użyć więcej niż jednego klucza głównego w danej tabeli.
SQL czym jest jakie są słowa kluczowe
SQL to zapytania do bazy różnego typu.
I kolejna rzecz do zapamiętania :
DML – manipulacja danych np. insert, update
DDL – definicja danych np. create, drop
DCL – kontrola danych np. grant, deny
DQL – definicja zapytań np. selet * from tabela
To zajawka więc poczytajcie resztę na wiki – > https://pl.wikipedia.org/wiki/SQL
Przykłady zapytań dla typów
Ostatnim zajmę się najbardziej ale dam po jednym przykładowym zapytaniu z każdej sekcji.
DML – insert into tabela values(‘test’,1,0,NULL)
insert można z podawaniem kolumn i wstawianie to do takich które są not null lub można insert into tabela (column1,column2) values(wartosc1,wartosc2)
DDL – drop table nazwa tabeli
create table tabelkanowa{srodek}
DCL – GRANT SELECT, INSERT, UPDATE ON osoby TO uzytkownik
Najlepsza sekcja DQL
SELECT
FROM
JOIN
WHERE
lub GROUP BY
order by
jeśli group by to :
HAVING BY
Przykład zapytania
Select o.nazwisko, imie, aa.ulica from osoby o
inner join adresosoba a
on a.osobaid = o.id
inner join adres aa
on aa.id = a.adresid
order by 1 descselect distinct(nazwisko)
from osoba
where wiek > 20select imie + ' ' + nazwisko
from osoba
where nazwisko like '%owal%'select count(z.wynagrodzenie)
from zarobki select sum(kasa), krajnazwa
from kupujacy
group by krajnazwa
order by sum(kasa) DESC;
Co robią te zapytki
Opisuje w skrócie zapytania, które wymyśliłem przed chwilą.
1. Wyświetla nazwisko imie i ulice z łączania tabeli w relacji wiele wiele najpierw łączymy się do tabeli pośredniej a potem pośrednia z docelową, z której chcemy coś brać proste, używamy aliasów przy nazwach tabel np. literka a, aby nie wpisywać całej nazwy tabeli kropka kolumna tylko aliasować.
2. Wyświetla unikalne nazwiska osób których wiek wiekszy niż 20
3. Wyświetla jako jedną kolumne polaczenie imienia spacje i nazwisko
gdzie nazwisko zawiera dowolny początek i koniec ale w środku ma ciąg znaków ‘owal’.
4. Wyświetla ilość wierszy danej kolumny, jak dalibyśmy whera to zawęzi się ilość.
5. Ostatnia zapytka to wykorzystanie groupowania i ordera
Sumujemy kasę gościa np. wydana i obok wyświetlamy nazwę kraju i do tego wykorzystana została funkcja grupowania według jakiejś kolumny tutaj nazwa kraju i na końcu sortowanie sumy malejąco od największej.
Joiny czyli łączenia
Join to słowo kluczowe join – łączyć, czyli łączenie tabel ze sobą, lub tabeli samej ze sobą.
Najpopularniejszy join to inner join – to join części wspólnej.
Czyli odrzucający różnice, które nie występują w obu tabelach.
Left outer join lub left join bierze wszystko z lewej tabeli plus część wspólną.
Prawy outer join lub right join odwrotnie lecz nie jest za często używany np. w SQLite jest usunięty, bo aby zrobić to samo co prawy join wystarczy zamienić kolejność tabel i już.
Self join – laczenie tabeli sama ze sobą
select costam from table1 t1, table1 t2 — robimy aliasy na tą samą tabele ale inne i dajemy where t1.columna = t2.columnainna i tyle mamy połączoną tabele z samą sobą.
Full join
Full outer join – join wszystkiego z prawej lewej i część wspólna
Za pomocą wherów można przekształcić full outer joina w joina, który bierze tylko unikalne wartośći z tabeli a i tabeli b
where a.value is null or b.value is null
I to samo można zrobić z left joinem lub right joinem, czyli brać tylko z prawej lub lewej tabeli bez częsci wspolnej coś takiego where b.value — lub a.value is null i tyle.
Union
UNION – połączy dwa zapytania jeśli mają taką samą liczbę kolumn, kolumny posiadają taki sam typ danych i są w tym samym porządku order by. TAKI UNION JEST DOMYSLNIE DISTINCTOWY czyli unikalne
SELECT nazwa from tabel1
UNION
SELECT nazwa2 from table2
Jest też UNION ALL to samo tylko duble bez unikalnych wartości
Źródła wiedzy
Numer 1 do nauki SQLa, bez posiadania postawionej bazy jest dobry serwis : https://www.w3schools.com/sql/default.asp
Stronka ma podział na sekcje posortowane wg. najlepszej kolejności nauki
Np. group by będzie dalej niż where, którego pierwsze poznajemy.


Mamy ogólny edytor SQL, w którym możemy robie robić własne zapytania. Lub jest on jako ‘try it yourself’ w danej sekcji, jako ćwiczenie per rozdział, który przerabiamy.
Mój osobisty faworyt to ćwiczenia w serwisie hackerrank.com

Jeśli chcecie coś więcej i nie chce wam się instalować nie wiadomo jakiego silnika, możecie sięgnąć po SQLITE, pisałem o niej inżyniera.
https://addons.mozilla.org/pl/firefox/addon/sqlite-manager-webext/
Pluginem do przeglądarki możecie stworzyć i wykonywać zapytania ctrl + enter.



Jest też taki kreator dla początkujących, ja zamiast wyklikania wole kodzić.

Wpiszcie sobie w google sqlite manager i coś poszukajcie ciekawego.
A może mysql ? Najszybciej pobrać XAMPP taka kolekcja narzędzi, w której jest między innymi mysql i np. jakiś manager bazy mysql workbench lub heidi. Ja jednak na waszym miejscu bym się pomęczył, odpuścił SQLITE (chyba, że jesteście ciekawscy) i na początek podstawił tego XAMPPa.
Sami już decydujecie czego chcecie.
Podsumowanie wpisu
Na dziś tyle. Następny wpis początek będzie jak postawiłem serwer mysql właśnie za pomocą xampp oraz serwer MSSQL i zaimportowanie bardzo fajnej bazy przykładowej prosto od MSa czyli AdventureWorks.
Z tematów SQL porusze dalej jakieś zajawkowe przykłady plus T-SQL jakiś mały wstęp przykładowy trigger, funkcja oraz procedura ale także widok o.
Dzięki za przeczytanie.
Pamiętajcie #zostańwdomu – > https://gregkaqa.pl/index.php/koronawirus/
Sprawdz sekcje sław – > https://gregkaqa.pl/index.php/sekcja-slaw/
Jeśli lubisz zapisz się do newslettera – > https://gregkaqa.pl/index.php/newsletter/