Alla kanske inte vet vad jag menar när jag säger ”Sequel”, men om jag istället använder den nu vanliga förkortningen SQL så kanske det går upp ett ljus.
SQL är inte ett namn på en databas från Microsoft utan ett namn på det programspråk som används för att kommunicera med många olika typer av databaser. Det korrekta namnet på Microsofts databas är SQL-Server (Microsoft sequel server).
Sequel står för ”Structured English QUEry Language”, men detta förkortades så småningom till bara SQL då det inte är så väldigt många paralleller till det engelska språket. Utvecklingen påbörjades i början av 1970-talet.
Microsoft är inte ensamma om att använda SQL som språk för att sköta datautbyte med en databas. MySQL, PostgreSQL och Oracle är exempel på andra. Många av dessa använder en något modifierad ”dialekt” av SQL (Microsofts kallas T-SQL), men i grunden så är de kompatibla.
För mina behov så är det PostgreSQL och det rumsliga tillägget PostGIS som gäller. I detta inlägg så testar jag lite olika kommandon i SQL (pgSQL) för att nosa lite på vad som är möjligt att göra med SQL.
Öppna DB Manager och välj en databas du är ansluten till. Klicka på ”SQL fönster” knappen och testa dina SQL frågor där. I bilden ovan har jag använt en av de vanligaste frågorna nämligen SELECT.
SELECT * from "schema"."tabell";
Detta listar samtliga rader i tabellen, vilket kanske inte är så användbart men låt oss prova ett urval på namn:
Frågan i bilden listar kolumnerna ”name” och ”type” för de rader där innehållet i kolumnen ”name” påminner om ”randstation” och ”äddningstj”. Här har jag valt att ta med så mycket som behövs av texten i det jag är intresserad av då SQL är skiftlägeskänligt, och med LIKE får jag med både ”Brandstationer” och ”brandstationer”.
Lägg märke till att ” används för schema och tabellnamn, medan ’ används för textsträngar, samt att frågan avslutas med semikolon (;).
När man fått det svar man är ute efter så kan man lägga till urvalet som lager. Då behövs även geometrin, så om man inte använder * som urval så får man lägga till ”geom” bland urvalskolumnerna. Det är god praxis att även lägga till ”id” så att man inte riskerar att få dubbletter i lagret.
Det lager som skapas använder inte ett lagerurval (Lageregenskaper, Allmänt) på traditionellt sätt, utan urvalet bakas in direkt i frågan. Om man använder ”Frågebyggaren” (Feature subset i bilden ovan) för att skapa ett urval så skapas en motsvarande textsträng i frågan till lagerkällan, men med den skillnaden att alla kolumner kommer med.
Frågebyggaren utgår nämligen från att det du skriver in är kommandot efter:
SELECT * FROM "schema"."tabell" WHERE
Så genom att skriva in frågan själv kan du anpassa urvalet.
Nu kan man göra oändligt mycket mer med SQL och PostGIS (eller andra rumsliga relationsdatabaser med SQL frågespråk).
Varför skulle man exempelvis vara begränsad till enkla filter av den typ jag beskriver här. Det går lika bra att göra rumsliga urval (om än lite längre syntax) för objekt i ett visst område, eller objekt av en viss storlek.
Med rätt konfigurerad databas så kan även mycket bearbetning göras av databasen. Exempelvis kan man via SQL be databasen ta fram kortaste väg mellan två punkter, förutsatt att det finns exempelvis topologier i datakällan.
Jag har som sagt bara varit inne och nosat på vad som är möjligt med SQL och är det något man som GIS-student skall lära sig förutom Python så är det sannolikt SQL. Jag önskar att jag kunde vrida tillbaka klockan för egen del.