A junior SQL developer at tillit

Wanneer je in IT terechtkomt kies je ervoor om heel je carrière te blijven studeren. Het is echter een groot vakgebied met verschillende mogelijkheden.. Op dit moment ben ik mij aan het verdiepen in de wereld van SQL. Ik wist op voorhand dat het een uitdaging ging worden maar de interesse is er, let’s tame this beast shall we?

De eerste maand ben ik vooral bezig geweest met het SQL framework te leren kennen dat tillit heeft geïmplementeerd bij Atlas Copco. Het is een complex proces van migratie waarbij de data een heel aantal stappen doorloopt alvorens het zijn eindbestemming bereikt. Het was onbegonnen werk om dit op mijn eentje te doen. Dankzij de hulp van mijn collega’s ben ik op korte tijd al een heel stuk wijzer geworden.

Maar wat is een SQL developer als hij enkel het proces conceptueel begrijpt? Om mijn kennis omtrent de syntax van SQL bij te schaven heeft Tillit ervoor gezorgd dat ik een week op curus kan gaan bij Global Knowledge in Nieuwegein. Als kers op de taart krijg ik hierna ook de kans om mijn SQL certificate te behalen. Hieronder geef ik jullie een idee hoe mijn 5-daagse SQL avontuur in Nederland eruit zag.

Zondag 03/12:

Ik vertrek in de namiddag rond 16u, Google Maps heeft mij verteld dat het 1.5 uur rijden is maar je weet nooit wat je onderweg kan tegenkomen. Over het algemeen is het een vlotte rit en 150 km verder kom ik aan op mijn bestemming: hotel Bastion in Utrecht. Ik word onthaald door een knappe Nederlandse griet die mij de sleutel van mijn kamer overhandigd.

De kamer zelf is pico bello, er staat zelfs een klein bureautje aan het raam waar ik ’s avonds nog wat kan werken. Nadat ik mijn spullen heb uitgepakt spring ik terug in de auto om te kijken waar de training morgen plaatsvind. Na amper 7 minuten rijden ben ik er al. Dat wordt morgenvroeg een half uurtje langer in bed liggen!

Maandag 04/12:

KEY TOPICS: SQL server 2016, T-SQL querying en SELECT

Het onbijtbuffet is meer dan in orde, van een vers ommeletje dat ze voor jou klaarmaken tot verschillende soorten charcuterie, fruit, ontbijtgranen.. Kortom keuze genoeg. Maar goed, we zijn hier deze week niet om te relaxen maar om een expert in SQL te worden. Na mijn ontbijt vertrek ik dan ook richting Nieuwegein.

Bij het onthaal van Global Knowledge krijg ik een badge die mij toegang geeft tot de trainingsfloor. Ik zit op de eerste verdieping, lokaal 5. Tot mijn verbazing ben ik de eerste die toekomt. Nadat ik mij heb geïnstalleerd stromen de rest van de studenten binnen. Mijn lesgever is trouwens geen onbekende: Marc Mertens, de secretaris van het evenement Dataminds. Hier heeft Tillit een paar maanden geleden ook met een standje gestaan.

We beginnen met een korte introductie van de groep: 1 Belg en 8 Nederlanders.. Nee wacht, de deur gaat open, er komt nog een Limburger binnen die een half uur te laat is omdat hij 3 uur in de file heeft gestaan.. Ben ik blij dat ik op hotel zit. Thank you Tillit!

Daarna verteld Marc ons de weekplanning: 80% “SELECT”, 10% “STORED PROCEDURES” en 10% “SECURITY”. Na elk theoretisch stuk maken we individueel een lab waarop we de theorie toepassen. Er is een text file beschikbaar waarin we ons eindresultaat kunnen controleren en een SQL file met de oplossing. Natuurlijk als je even verduidelijking wil kun je Marc altijd bij je roepen.

Hij vermeld er wel bij dat het onmogelijk is om heel de cursus in detail te bekijken. We gaan de belangrijkste elementen eruit halen en die uitbundig bezien. Ik heb zin om erin te vliegen en te kijken hoe het met mijn SQL kennis gesteld is. Lets go!

We maken gebruik van Hyper-V manager die ons toegang geeft tot een VM waarop SQL server al is geïnstalleerd. Ik heb op mijn laptop de curus openstaan dit zorgt voor een gemakkelijke manier van werken als ik iets moet opzoeken.

Marc begint met uitleg te geven over relational databases en een introductie van de belangrijkste components van SSMS. De voormiddag vliegt zo snel voorbij dat ik amper door heb dat het al 12 uur is. Etenstijd! We krijgen elk een bonnetje waarmee we in een restaurant verderop kunnen gaan eten.Tijdens het middagmaal komt de sfeer in de groep los en na een stevige maaltijd is iedereen er terug klaar voor.

In de nammidag krijg ik iets te horen dat ik nog niet wist. De volgorde van uitvoering van een SQL query, het queryplan. Wanneer je een SQL query opbouwt ziet het er als volgt uit:

  • SELECT
  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • ORDER BY

Maar de volgorde van uitvoering gebeurt anders:     

  • FROM à kiest de tabellen waaruit je data wil halen
  • WHERE à zet een filter op de data
  • GROUP BY à groepering van de data
  • HAVING à zet een filter op de gegroepeerde data
  • SELECT à toont je de finale data na alle voorgaande stappen
  • ORDER BY àsorteert de finale data

Voor de rest van de dag zijn we bezig geweest met de verschillende soorten joins en wanneer je deze het best kan gebruiken. Tot hiertoe ben ik nog goed mee maar ik heb de rest van de modules al eens vluchtig bekeken en er zijn veel termen waar ik wel al van gehoord heb maar geen idee van heb wat ze juist doen. De SQL-coaster is rolling and I am in the front seat!

 

Dinsdag 05/12:

KEY TOPICS : querying multiple tables, sorting/filtering data en data types

We doen eerst een herhaling van het laatste dat we gisteren hebben gezien: LEFT, RIGHT, INNER, FULL, CROSS en SELF-join. Een fundamenteel principe van SQL dat je goed moet beheersen. Marc heeft een paar keer gezegd hoe belangrijk het is dat je een goed beeld hebt van je datastructuur. Iets waar ik tijdens mijn eerste maand op AC problemen mee had omdat ik niet goed wist op welke tables ik moest joinen.

Daarna hebben we een stuk gedaan omtrent: WHERE, ORDER. TOP en OFFSET-FETCH. Hier heb ik wel een paar dingen gezien die ik niet wist:

  • WHERE Name LIKE '%[0-9BC]' geeft mij alle namen die eindigen op een cijfer tussen 0 en 9 of op BC
  • WHERE Name LIKE '%[^0-9BC]' geeft mij alle namen die niet eindigen op een cijfer tussen 0 en 9 of op BC

De OFFSET-FETCH was ook iets nieuws voor mij. Het is vergelijkbaar met de TOP maar tegen deze kan je nog zeggen om een aantral rows te skippen (OFFSET 10 ROWS) en naar de volgende (FETCH NEXT 20 ROWS ONLY) te gaan.

Wat ik ook niet wist is dat er een verschil is tussen ANSI (Oracle, IBM, ect..) en NON-ANSI (SQL):

  • SELECT 'AAA' + 'BBB' à NON-ANSI
  • SELECT CONCACT('AAA','BBB') à ANSI

 

  • ISNULL(Name,’’) à NON-ANSI
  • COALESCE(Name,’’) à ANSI

Wanneer je deze uitvoert bekom je hetzelfde resultaat maar Marc opteerde ervoor om zoveel mogelijk syntax te schrijven die ANSI compliant is. In de meeste DB wordt er wel een mix van de twee gebruikt.

Wanneer we hiermee klaar waren zaten we al in de late middag en heeft Marc nog een uur verteld over de verschillende data types maar je kon zien dat heel de groep overvol zat met informatie. We zijn dan ook een kwartiertje vroeger gestopt. Op naar morgen!

 

Woensdag 06/12:

KEY TOPICS :  Functions, Grouping & Aggregating

In de morgend houden we ons vooral bezig met string functies: LEFT, RIGHT, SUBSTRING, LEN, DATALENGTH, CHARINDEX, REPLACE, UPPER, LOWER, REPLICATE, LTRIM, RTRIM, STUFF en SOUNDEX.

De meeste van deze kende ik wel maar er zaten er toch een paar bij die nieuw waren:

  • SELECT REPLICATE ([KEVIN’, 4) à zet de naam ‘KEVIN’ 4 keer achter elkaar
  • SELECT STUFF ('GK is niet leerzaam', 7, 4, 'zeer') à Gaat naar de vierde positie in de string en verandert de eerste 4 characters
  • SELECT SOUNDEX ('Faresyn'), SOUNDEX ('Faresein') à Deze wordt gebruikt om namen die hetzelfde klinken bijeen te plaatsen

Daarna hebben we een paar date en time functies bekeken:

  • DATEFROMPARTS(2017,12,23) à voorkomt problemen met locality settings (de taal op je SQL)
  • EONMONTH(sysdatetime(),-1) à geeft mij de laatste dag van de vorige maand, wanneer ik de -1 wegdoe geeft hij mij dit voor de huidige maand
  • SET language dutch/english kan je datum problemen voorkomen (manier van schrijven)
  1. ‘12/23/2017’ à amerika en ‘23/12/2017’ à nederlands

Dan de conversie functies:

  • SELECT CAST (sysdatetime() AS VARCHAR (100)) en SELECT CONVERT(varchar(100), sysdatetime(), 105) à bepaalt hoe de datum moet worden getoond
  • SELECT format(sysdatetime(),’D’) à ... naar string
  • SELECT parse(‘abcd’ AS date) à van string naar ...
  • SELECT try_parse(‘abcd’ as date) à geeft null terug als het niet lukt

Om af te sluiten hebben we de aggregate functies bekeken (SUM, MIN, MAX, AVG, COUNT). Nu Marc zei dat er ook een aantal statische functies waren (STDEV, STDEVP, VAR, VARP) die minder belangrijk zijn maar als er mensen uitleg over wouden ze het maar moesten zeggen.

 Nu je moet weten dat Marc in zijn vrije tijd Wiskunde lessen volgt en een Fysicus van opleiding is.. Ik dacht bij mezelf “Als er nu iemand zijn hand opsteekt..”, gevolgd door een Nederlands klinkende “Nou ja”. Het half uur daarop heb ik nog nooit zoveel tekens bij elkaar gezien die ik niet kan plaatsen. Aan het einde van de uitleg zat de helft van de groep dan ook voor zich uit te staren alsof ze een SQL spook hadden gezien. Hiermee werd de dag dan ook afgesloten en iedereen keerde vol verstomming huiswaarts.

 

Donderdag 07/12:

KEY TOPICS : Subqueries, Table expression, SET operators, Window functions

Marc had ons gewaarschuwd voor donderdag dat het de zwaarste dag van de week ging worden. En hij had geen ongelijk.. Er was ook geen tijd meer om de bijhorende labo’s te maken omdat we anders al de theorie er niet door zouden krijgen. Ik vond het wel jammer dat we dit stuk alleen maar theoretisch hebben gezien omdat er tijdens de oefeningen toch nog altijd vragen kunnen opduiken die je niet direct terugvind in de cursus. Dit was dan ook het enige minpuntje van de curus.

We beginnen de dag met subqueries. Waar we voordien enkel queries hebben geschreven als een single statement zijn subqueries genest m.a.w. het resultaat van de binneste query wordt teruggegeven aan de buitenste query:

SELECT FirstName,LastName

FROM Tillit.Employees

WHERE EmployeeID IN (

SELECT EmployeeID

FROM Tillit.Functions

WHERE JobTitle = ‘Junior’);

Daarna hebben we een deel gezien over table expressions met als hoofdpunten derived columns en CTE’s. Ze lijken heel erg op elkaar maar ik vind persoonlijk dat CTE’s makkelijker te lezen zijn. Derived columns zijn meestal genest en zijn daardoor soms moeilijker om te begrijpen.

Hierna heeft Marc uitleg gegeven over de SET operators:

  • Union à neemt alles
  • Intersect à neemt alleen maar degene die in beiden voorkomen
  • Except à neemt alleen de employees zonder de customers
  • Cross apply à kijkt rij per rij
  • Outer apply à kijkt rij per rij en geeft een null mee als hij niks vind

We hebben de dag afgesloten met Window functions. Ik vond dit persoonlijk het moeilijkste van heel de cursus en doordat we dit zo laat in de namiddag hebben gezien was de concentratie om nog goed te kunnen volgen al een heel stuk verloren. Maar geen nood ik heb de cursus en oefeningen en kan op mijn gemak alles thuis nog eens bezien!

 

 

Vrijdag 08/12:

KEY TOPICS : Pivoting, DML, Stored procedures, Transactions

De laatste dag van de week. Ik kan nog altijd niet goed geloven hoe snel deze voorbij is gevlogen. Het zal waarschijnlijk komen door het goed gezelschap van mensen die allemaal met hetzelfde doel bij elkaar zitten, nl. een SQL guru worden.

We starten met het laatste deel van de SELECT, pivoting. Marc zegt zelf dat dit eigenlijk het best wordt gedaan in Excel maar het kan ook in SQL en staat in de cursus dus we moeten erover gaan:

  • Pivoting à rotating data from a rows-based orientation to a columns-based orientation
  • Unpivoting à rotating data from a columns-based orientation to a row-based orientation

Hierna schakelen we over op DML (Data Manipulation Language):

  • INSERT à het toevoegen van data
  • UPDATE à het vernieuwen van data
  • DELETE à het verwijderen van data (truncate [extent per extent], delete [rij per rij]
  • MERGE à doet updates, deletes en insertes

Daarna transactions:

  • ACID
    • ATOMICITY (BEGIN TRAN … COMMIT TRAN/ROLLBACK TRAN
    • CONSISTENCY
    • ISOLATION,
    • DURABILITY
  • NESTED TRANSACTIONS (dat je een stukje van een transactie kan rollbacke)
  • SAVE TRAN (dan kun je naar een bepaal punt rollbacke)
  • XACT_ABORT

We sluiten de dag af met een heel klein stukje omtrent stored procedures. Het is eigenlijk meer eens proeven want Marc zegt zelf dat dit meer thuishoort in een andere cursus en dat het merendeel van aanwezigen hier ook niet waren om dit te bezien. Je moet eerste leren stappen alvorens je kan lopen.

En zo sluit ik mijn week bij GK af. Het was een leuke en leerrijke ervaring. Niet alleen op het gebied van SQL maar ik heb er ook een paar leuke connecties bij uit Nederland! Nu alles thuis goed herhalen zodat ik, hopelijk, binnekort mijn Microsoft certificate op zak heb.

Veni,Vidi,Vici