SQL

Dlaczego SQL musi różnić się od zwykłych języków programowania?

Język SQL nie powstał dla programistów. Powstał z myślą o nietechnicznych ludziach, którzy potrzebują dostępu do danych. 

Było to w czasach gdy bazy danych, z wolna, zastępowały tabelki na papierze. A raporty generowane przez komputery zastępowały te przygotowywane ręcznie. 

Jeśli wolisz wideo:

Jak powstał język SQL?

Wyobrażam sobie, że ktoś kto kiedyś realizował polecenia w stylu: ’Hej, potrzebuję raportu jak wyglądała sprzedaż firmy w maju 1969. Na wczoraj.’ został zastąpiony maszyną. Aby sprzedać maszynę producenci maszyny musieli zadbać aby realizowała te same polecenia. 

Stąd cała idea dookoła SQL – tak zupełnie różna od zwykłych języków programowania – nie masz wpływu na realizację zadania. To motor bazy danych decyduje w jaki sposób wybierze interesujące Cię dane. Twoja rola to precyzyjne określenie czego chcesz. 

Język którym miano wydawać dyspozycje maszynie musiał być jak najbardziej naturalny. To nietechniczni pracownicy biurowi mieli się nim posługiwać.

Prostota SQL

Stworzono go, więc bardzo prostym. Aby wybrać dane wystarczy znajomość jednego słowa – komendy SELECT. Dwoma innymi określasz jakie dane chcesz: FROM, WHERE. 

Możesz je pogrupować przy pomocy GROUP BY. A na tych grupach wykonać jakieś operacje, które zamienią grupy wielu danych w agregaty. Aby oglądać wynik w Twoim ulubionym porządku sortujesz go przy pomocy ORDER BY. Gdy danych jest za dużo to ich ilość ograniczasz klauzulą FETCH. 

A jeśli wszystkich interesujących Cię danych nie ma w jednej tabelce, to dołączasz drugą z potrzebnymi informacjami przy pomocy JOIN. Zupełnie jak w życiu znanym z biur. Kręcącym się dookoła papierowych formularzy.

Chamberlin i Boyce, tworząc SQL, testowali język mówiąc w nim do siebie. Dopiero później zauważyli, że to co wymyślili pasuje do matematycznej teorii zbiorów. 

Don Chamberlin - jeden z twórców SQL. Za Wikipedia.
Za Wikipedia

Dlatego programistom może być trudno odnaleźć się w tym świecie. Nie ma algorytmów, zmiennych, pętli. Nie ma wskaźników ani odniesień. Tabela to nie tablica. Nie jest strukturą danych.

W zwykłym języku programowania niezależnie od tego jakie dane w strukturze się znajdą, powiązanie dalej istnieje. Wskaźniki w liście się nie zmieniają. Indeksy tablicy pozostają takie same. Zmienna nazywa się tak samo. 

W SQL to dane są ze sobą powiązane

SQL bazuje na modelu relacyjnym, w którym to DANE są powiązane. Gdy dane się zmienią wiązanie też się zmienia. W szczególności gdy danych nie ma to wiązanie nie istnieje.

W SQL to dane wiążą struktury

Dane umieszczone są zupełnie niezależnie w bazie danych. Muszą mieć wspólne wartości aby udało się je powiązać. 

W zwykłych językach programowania to struktury są ze sobą powiązane. Nie dane. Na przykład listy są powiązane wskaźnikami, a komórki tablicy indeksami. 

Programista, w zwykłym języku programowania, zawsze może przeskoczyć do następnej lub poprzedniej struktury z danymi. Może odczytać dowolną daną znając jej indeks czy wskaźnik. 

W SQL nie można odwołać się do konkretnego rekordu tabeli Nie można powiązać 2 tabel gdy nie mają wspólnych danych o identycznych typach i znaczeniu. 

Deklaratywna moc SQL

Piękno i siła języka SQL tkwi w jego deklaratywnej mocy. Gdy wydajesz polecenie SQL motor bazy danych ma możliwość przeanalizowania go od razu w całości. Dzięki temu może wybrać optymalną ścieżkę dostępu do danych. 

W swoich metadanych przechowuje informacje o bazie danych i danych. O typach, ilości i zakresach danych. Na tej podstawie szacuje jak najkorzystniej te dane z bazy danych wybrać. 

Stoi to w kontraście do zwykłych języków programowania gdzie kod wykonywany jest instrukcja po instrukcji. Środowisko w którym taki program jest wykonywany nie potrafi przeanalizować co wynika z realizacji tych instrukcji. Przez co nie potrafi zoptymalizować ścieżek dostępu do danych. O te musi zadbać programista wybierając optymalny algorytm. 

Nieład bazy danych 

Dane w bazie danych przechowywane są w nieładzie. Podczas wprowadzania rzucane są, przez motor bazy danych, na stertę. Gdzie tylko jest wolna przestrzeń. 

Te najbardziej potrzebne możesz skopiować do specjalnych, łatwych do przeszukiwania, struktur nazywanych indeksami. Obecność indeksów znacznie przyspiesza czas dostępu do danych. Niezależnie od ilości danych. Prawie niezależnie 😉

Tylko motor bazy danych wie gdzie są dane. Te informacje to metadane. Przechowywane są w wewnętrznych strukturach unikalnych dla każdego motoru bazy danych. 

I to jest wygodne. Odcina użytkownika bazy danych od całego kosztownego analizowania ile przestrzeni zaalokować. Jak ją zdealokować gdy dane zostaną wykasowane? Jak ją rozszerzyć lub skurczyć gdy dane zmienią swój rozmiar? 

Wszystko to bierze na swoje barki motor bazy danych. 

W zwykłych językach programowania nic takiego nie ma miejsca. Najpierw powstają ściśle określone i powiązane ze sobą struktury. Dopiero po ich powstaniu wypełniane są danymi. Indeksy nie są potrzebne bo porządek w danych jest zachowany od samego początku powstania struktur. 

Programista zawsze wie jak nazywa się zmienna czy pod jakim adresem pamięci znajdzie dane. Wie ile rekordów pomieści tablica bo deklaruje te wielkości w momencie tworzenia struktury. 

Podsumowując 

Język SQL pomyślano jako maksymalnie prosty i naturalny. Kierowany jest do szerokiego kręgu odbiorców. To próby analizowania algorytmów motoru bazy danych oraz wpływania na nie dają odium skomplikowania. 

A Tobie łatwo uczyć się SQL?

Prowadzę szkolenia i kursy z podstaw SQL. Sprawdź ofertę moich kursów SQL.

Marcin Badtke

Przyjaźnie o SQL, bazach danych i ludziach

Może Ci się spodobać...

3 Comments

  1. super materialy!
    mamy pytanko:
    „W SQL nie można odwołać się do konkretnego rekordu tabeli ” – czy mozesz uscislic co miales na mysli? przeciez mozna wybrac dany rekord korzystajac z klucza glownego?

    1. Marcin Badtke

      Dziękuję 🙂

      Wartości klucza głównego są elementem danych w tabeli. To nie jest funkcjonalność języka SQL. Jeśli klucza głównego nie będzie to nie jesteś w stanie wybrać konkretnego rekordu. A, technicznie, możesz mieć tabele bez klucza.

  2. Marcin Badtke

    Thank you

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *