Spørringer mot tabeller i SQL

Spørringer mot tabeller i SQL
av Ole Petter den 17. desember 2019
Sist oppdatert: 30 desember, 2019 kl 05:36En tabell i SQL er laget i en todimensjonal datastruktur. Vertikalt er den delt inn i kolonner, som inneholder ulike datatyper som tekst, tall, karakterer og lignende. Horisontalt er den delt opp i rader. I en bestemt kolonne som krysses med en rad er det en spesifikk verdi, for eksempel et tall.

Contents
Grunnleggende spørringer
Alle tabeller skal ha en primærnøkkel som er unik for hver rad. I eksempelet over er primærnøkkelen employeeNumber.
Hvis man skal spørre mot kun en tabell kan man gjøre det ganske kjapt og enkelt:
/* Den enkleste spørringen */
"SELECT * FROM employees";
Problemet med slike generelle spørringer er at hvis man gjør en slik generell spørring mot to eller flere tabeller, får man fort veldig mye data i retur, gjerne tusenvis av rader.
/* Spørring mot to tabeller */
"SELECT * FROM employees A, offices B";
Spørringen ovenfor vil returnere alle radene i employees-tabellen multiplisert med antall rader i offices-tabellen. Resultatet man oppnår ved en slik spørring kalles et kryssprodukt. Hvis man har 100 rader i den første tabellen, og 50 tabeller i den andre, vil man få 100*50 resultater, altså 5,000 rader.

Mer avanserte spørringer med join
Hvis man har en kolonne i employees-tabellen hvor man har en fremmednøkkel mot offices-tabellen, kan man få spesifikke resultater og unngå redundans, eller overflødige rader.
I dette eksempelet er officeId primærnøkkel i offices-tabellen, og fremmednøkkel i employees-tabellen.
/* Spørringer mot to tabeller med JOIN */
"SELECT * FROM employees A
JOIN offices B
ON B.officeId = A.officeId";

En alternativ måte å oppnå samme resultat på er å spesifisere hvilken eller hvilke kolonner i den ene tabellen som er fremmednøkkel i den andre og omvendt:
"SELECT * FROM employees A, offices B WHERE A.officeId = B.id";
For å enklere skille de to tabellene brukes et såkalt alias for tabellene, altså employees A, og offices B. Så slipper man å skrive hele tabellnavnet for så å skrive kolonnenavnet når man skal fortelle hvilken kolonne man skal flette sammen i de ulike tabellene.
En alternativ måte uten alias hadde vært å skrive «employees.officeId = offices.id», men med A som alias for employees og B som alias for offices kan man bruke aliaset for tabellen i stedet for hele tabellnavnet.
Avanserte spørringer i SQL - Blogg
[…] to kolonnene i forrige eksempel var unionskompatible siden de hadde samme verdi, altså officeId i employees-tabellen, og id i […]