Select Star SQL

De zaak Beazley

In 1994 schoot Napoleon Beazley de 63-jarige zakenman John Luttig dood in zijn garage terwijl hij probeerde de auto van zijn gezin te stelen. Omdat hij op het moment van de moord nog net geen 18 jaar oud was, ontketende de zaak Beazley een heftig debat over de doodstraf voor minderjarige delinquenten. 3 jaar nadat Beazley was geëxecuteerd, verbood het Hooggerechtshof de executie van delinquenten die onder de 18 waren op het moment van hun misdrijf (Roper v Simmons, 2005).

De zaak was ook opmerkelijk omdat het slachtoffer de vader was van federale rechter John Michael Luttig. Tijdens de beroepen bij het Hooggerechtshof wisselden drie van de negen rechters zich recuus vanwege hun persoonlijke banden met rechter Luttig, waardoor er nog maar zes overbleven om de zaak te behandelen.

Napoleon Beazley hield een gepassioneerde laatste verklaring waarin hij betoogde dat oog om oog geen rechtvaardiging vormt voor gerechtigheid. Onze taak is om zijn verklaring uit de database op te halen.


Een eerste SQL-query

De SQL-query kan eruit zien als een gewone zin, maar je moet het zien als drie Lego-blokjes: SELECT * FROM executions LIMIT 3. Net als bij Lego heeft elk blokje een vaste opmaak en moeten de verschillende blokjes op een bepaalde manier in elkaar passen.


Het SELECT-blok

Het SELECT-blok specificeert welke kolommen je wilt uitvoer. De opmaak is SELECT <column>, <column>, .... Elke kolom moet worden gescheiden door een komma, maar de spatie na de komma is optioneel. De ster (d.w.z. *) is een speciaal karakter dat aangeeft dat we alle kolommen in de tabel willen.

SQL-opmerkingen

Merk op dat bij het klikken op "Show Solution" de oplossing in de editor wordt weergegeven voorafgegaan door /*. De inhoud tussen /* en */ wordt als opmerking behandeld en wordt niet als code uitgevoerd. Dit is handig om tijdelijk code te verbergen die we niet willen uitvoeren. Om de oplossing uit te voeren, verwijder je gewoon je code of maak je er een opmerking van en haal je de opmerking uit de oplossing.

-- is een andere manier om opmerkingen aan te geven. Het wordt gebruikt om de rest van een enkele regel als opmerking te markeren. Wanneer we meerdere regels willen opmerken, is /* ... */ handiger dan -- voorafgaand aan elke regel te plaatsen.


Het FROM Blok

Het FROM blok geeft aan vanuit welke tabel we een query uitvoeren. De indeling is FROM <tabel>. Het komt altijd na het SELECT blok.

In het volgende voorbeeld, merk op dat we het FROM blok niet nodig hebben als we niets uit een tabel gebruiken.

Is het niet vreemd dat 51 / 2 resulteert in 25 in plaats van 25,5? Dit komt doordat SQL gehele deling uitvoert. Om decimale deling uit te voeren, moet ten minste een van de operanden een decimaal getal zijn, bijvoorbeeld 51.0 / 2. Een veelvoorkomend trucje is om een getal te vermenigvuldigen met 1.0 om het om te zetten naar een decimaal getal. Dit zal later in de hoofdstukken van pas komen.

Hoofdletters

Hoewel we SELECT, FROM en LIMIT in hoofdletters hebben geschreven, zijn SQL-commando's niet hoofdlettergevoelig. Je kunt zien dat de code-editor ze herkent en opmaakt als een commando, ongeacht de hoofdlettergebruik. Desalniettemin raad ik aan SQL-commandos altijd in Hoofdletters te schrijven om ze te onderscheiden van kolomnamen, tabelnamen en variabelen.

Kolomnamen, tabelnamen en variabelen zijn ook niet hoofdlettergevoelig in deze versie van SQL, hoewel ze in veel andere versies hoofdlettergevoelig zijn. Voor de zekerheid raad ik aan altijd aan te nemen dat ze hoofdlettergevoelig zijn.

Witruimte

Witruimte verwijst naar spaties, tabs, regelafbrekingen en andere tekens die op een pagina als lege ruimte worden weergegeven. Net als met hoofdletters is SQL niet erg gevoelig voor witruimte, zolang je niet twee woorden aan elkaar plakt. Dit betekent dat er gewoon minstens één witruimtekarakter rond elk commando moet zijn - het maakt niet uit welke of hoeveel je er gebruikt. Tenzij het een korte query is, geef ik er de voorkeur aan om elk commando op een nieuwe regel te zetten voor een betere leesbaarheid.


Het WHERE Blok

Het WHERE blok stelt ons in staat om de tabel te filteren op rijen die aan bepaalde voorwaarden voldoen. De indeling is WHERE <voorwaarde> en het komt altijd na het FROM blok. Hier verwijst een voorwaarde naar een booleaanse verklaring die de computer kan evalueren als waar of onwaar, zoals ex_number = 145. Je kunt je voorstellen dat de computer door elke rij in de tabel gaat en controleert of de voorwaarde waar is, en zo ja, de rij retourneert.

Het is duidelijk hoe we rekenkundige operatoren zoals < en <= kunnen gebruiken om voorwaarden te formuleren. Er zijn ook een aantal string-operatoren om met tekst te werken.

De krachtigste hiervan is waarschijnlijk LIKE. Hiermee kunnen we wildcards zoals % en _ gebruiken om verschillende tekens te matchen. Bijvoorbeeld, first_name LIKE '%roy' zal waar zijn voor rijen met voornamen ‘roy’, ‘Troy’ en ‘Deroy’, maar niet voor ‘royman’. Het jokerteken _ zal slechts één teken matchen, dus first_name LIKE '_roy' zal alleen overeenkomen met ‘Troy’.

Aanhalingstekens

In SQL worden tekstwaarden aangegeven met enkele aanhalingstekens. Backticks (dwz `) kunnen worden gebruikt om kolom- en tabelnamen aan te geven. Dit is handig wanneer de kolom- of tabelnaam hetzelfde is als een SQL-sleutelwoord en wanneer ze een spatie bevatten. Het is mogelijk om een database te hebben met een tabel genaamd 'where' en een kolom genaamd 'from'. (Wie zou zo gemeen zijn om dit te doen?!) Je zou dan SELECT `from` FROM `where` WHERE ... moeten doen. Dit is een ander voorbeeld waarom het kapitaliseren van SQL-commando's helpt.

Zoals je hebt gezien in de vorige oefening, kunnen complexe voorwaarden worden samengesteld uit eenvoudige voorwaarden met behulp van booleaanse operatoren zoals NOT, AND en OR. SQL geeft de meeste prioriteit aan NOT, dan AND en tenslotte OR. Maar als je, net als ik, te lui bent om de volgorde van prioriteit te onthouden, kun je haakjes gebruiken om de gewenste volgorde te verduidelijken.

Laten we een snelle quiz doen om je begrip te verankeren.

Nu heb je de tools die je nodig hebt om ons project af te ronden.

Is het niet verbazingwekkend hoe diepzinnig en welbespraakt Beazley is? Bedenk dat hij slechts 25 jaar oud was toen hij de verklaring maakte en sinds zijn 18e in de gevangenis zat.


Samenvatting

Het doel van dit hoofdstuk is om de basis maar krachtige SELECT <kolom> FROM <tabel> WHERE <voorwaarde> te introduceren. Hiermee kunnen we een tabel filteren door de computer rij voor rij te laten gaan en de rijen te selecteren waarvoor de WHERE clausule waar is. We hebben ook geleerd hoe we vrij complexe voorwaarden kunnen opstellen die kunnen werken op kolommen met tekst, numerieke en booleaanse waarden.

Tot nu toe hebben we op het niveau van de rij geopereerd, wat ons beperkte tot het bekijken van individuele gegevenspunten. In het volgende hoofdstuk zullen we ons richten op aggregaties, waarmee we fenomenen op systeemniveau kunnen bestuderen.