Tahák

Pokud někdo má zájem dělat u nás v Adastře, možná se se mnou nepotká osobně, ale já se s ním pravděpodobně potkám přes monitor. Abych byl přesný … potkám se s jeho testem. Za tu dobu co ty testíky opravuji, tak už jsem viděl hromadu šíleností. Dnes mi ale přišel test, který mě rozesmál a málem rozplakal 🙁

Tato hláška hovoří za vše (snad bude čitelná):

tahak-hlaska

Takže, milá dítka (slečny, dámy, pánové), jsem se rozhodl, připravit pro vás menší TAHÁK. Nejde ani snad o to napsat přesné odpovědi, ale pochopit, co se po uchazečích o práci u nás vlastně chce. Nemá smysl drtit se odpovědi nazpaměť, stačí jen trochu přemýšlet.

Pojmy

Taková klasika snad ve všech testech co jsem kdy viděl. Tady je seznam databázových termínů, které by člověk měl znát, nebo aspoň tušit co to znamená. Vysvětlovat nebudu, google je chytřejší: ODBC, JDBC, RDBMS, OLAP, OLTP, SQL, FETCH, ROWSET, RESULTSET, DDL, DML, PRIMARY KEY, FOREIGN KEY, CONSTRAINT, INDEX, VIEW, PROCEDURE, FUNCTION, TRIGGER, XML.
Pro ty pečlivější jsou doporučená klíčová slova: B-Tree, row size, index size, tablespace, partitioning, sliding window, cascading, E-R model, replication, high availability, massive parallel, Power Query, Hadoop.

Teoretické příklady

Jednoduché SQL příkazy. Žádná raketová věda, ale je na nich vidět, kdo už s databází trochu přišel do styku. Většinou se jedná o napsání jedno až dvouřádkového příkazu s použitím těch úplně nejzákladnějších příkazů (SELECT, UPDATE, DELETE, CREATE, ALTER, DROP). Můžete také dostat jednoduchý dotaz do databáze a úkolem je vysvětlit co vlastně dělá. U některých příkladů se také pozná, jak věci domýšlíte do konce. Předvedu na následující otázce:

Napište příkaz, který vytvoří tabulku „City“, která slouží jako číselník měst

Kdo napíše pouze „CREATE TABLE City“ má s bídou polovinu příkladu. Ta tabulka snad nemá žádné sloupce? A když číselník, tak zřejmě ID jako primární klíč a aspoň název města ne? Takže bych příště poprosil alespoň o odpověď (samozřejmě, že na typu databáze nesejde, klidně ORA nebo MySQL, já to píšu v T-SQL):

CREATE TABLE City (CityID int not null primary key, Name varchar(200))

Logické příklady

Tady vás firemní test opravdu trápit nebude 🙂 Chceme tu ale vidět, jak umíte myslet v kontextu databáze a jestli jste dávali pozor při matematice v páté třídě (a samozřejmě také jak umíte číst). Klasika je, že se objeví požadavek aplikovat slevu 10%. Jsou borci, kteří výslednou cenu spočtou jako Cena=Cena-10/100*Cena. Teoreticky je to správně, ale prakticky? Je třeba si uvědomit, jak se vlastně volí datový typ a jaké je pořadí vyhodnocení příkazu. Klasicky se spočte (int)10/(int)100*(decimal)Cena a to je (světe div se) 0 – dokud se neobjeví první decimal, tak se jede v integeru a potom platí (int)0.1=0. Takže výsledkem pro tento zápis je, že se vůbec nic nezmění. Nehledě na to, že je to zbytečně složité, jako by nestačilo napsat Cena*=0.9!

Podobné je to s datumovou logikou. Pokud je požadován první den v měsíci, tak je možné datum rozparsovat, den nahradit jedničkou a zase slepit. Co když ale bude požadován první den měsíce následujícího? Rozparsovat, přidat 1 k měsíci a najednou mám po prosinci 13. měsíc. My nesmíme ani naznačovat, tak nebudu radit jak to spočítat přes EOMONTH
nebo LAST_DAY.

No a nakonec jsem si nechal to čtení … když je napsáno v roce 2001 tak zaprvé tam musí být WHERE a když už tam je, tak si dát pozor na to, aby tam bylo 1.1.2001 i 31.12.2001 (větší nebo rovno!) a naopak tam nebylo 1.1.2002 (jak tomu je s oblibou při použití BETWEEN). Pokud je datový typ datetime, tak pro změnu pozor na fakt, že den končí až ve 23:59:59 (a nějaký drobný k tomu).

Praktické příklady

A tady se opravdu ukáže, co kdo umí. Je třeba se zorientovat v jednoduchém datovém modelu a pak napsat pár selectíků. Už nejsou tak úplně primitivní, ale dá se to. Počítá se s tím, že se může psát na papír, takže to jsou joiny 2-3 tabulek. Jako přípravu doporučuji nastudovat celý SELECT statement. Když říkám celý, myslím všechny možné varianty – tedy JOINY tabulek, GROUP, WHERE, WITH …. A když říkám nastudovat, tak myslím pochopit.

A rada na závěr

Číst, číst, číst!!! Není blbější chyba, než napsat docela složitý SELECT a na konci dát podmínku na jiný sloupec.

Comments are closed.