Introduktion

Slutförd

SQL-språket

SQL är en förkortning för Structured Query Language. SQL används för att kommunicera med relationsdatabaser. SQL-instruktioner används för att utföra uppgifter som att uppdatera data i en databas eller hämta data från en databas. SQL SELECT-instruktionen används till exempel för att köra frågor mot databasen och returnera en uppsättning datarader. Några vanliga hanteringssystem för relationsdatabaser som använder SQL är Microsoft SQL Server, MySQL, PostgreSQL, MariaDB och Oracle.

Det finns en SQL-språkstandard som definieras av American National Standards Institute (ANSI). Varje leverantör lägger till egna varianter och tillägg.

En SQL SELECT-fråga hämtar en tabell med data från en databas

I den här modulen får du lära dig följande:

  • Förstå vad SQL är och hur det används
  • Identifiera databasobjekt i scheman
  • Identifiera SQL-instruktionstyper
  • Använda SELECT-instruktionen för att fråga efter tabeller i en databas
  • Arbeta med datatyper
  • Hantera NULLL:er

Transact-SQL

Grundläggande SQL-instruktioner, till exempel SELECT, INSERT, UPDATE och DELETE , är tillgängliga oavsett vilket relationsdatabassystem du arbetar med. Även om dessa SQL-instruktioner är en del av ANSI SQL-standarden har många databashanteringssystem också egna tillägg. Tilläggen ger tillgång till funktioner som inte ingår i SQL-standarden och lägger till områden som säkerhetshantering och programmering. Microsoft-databassystem som SQL Server, Azure SQL Database, Microsoft Fabric och andra använder en dialekt av SQL med namnet Transact-SQL eller T-SQL. T-SQL innehåller språktillägg för att skriva lagrade procedurer och funktioner, som är programkod som lagras i databasen och som hanterar användarkonton.

SQL är ett deklarativt språk

Programmeringsspråk kan kategoriseras som procedurer eller deklarativa. Med processuella språk kan du definiera en sekvens med instruktioner som datorn följer för att utföra en uppgift. Med deklarativa språk kan du beskriva de utdata du vill ha och lämna information om de steg som krävs för att generera utdata till körningsmotorn.

SQL stöder viss procedursyntax, men att köra frågor mot data med SQL följer vanligtvis deklarativ semantik. Du använder SQL för att beskriva de resultat du vill ha, och databasmotorns frågeprocessor utvecklar en frågeplan för att hämta den. Frågeprocessorn använder statistik om data i databasen och index som definieras i tabellerna för att få fram en bra frågeplan.

Relationsdata

SQL används oftast (men inte alltid) för att fråga efter data i relationsdatabaser . En relationsdatabas är en där data har organiserats i flera tabeller (kallas tekniskt för relationer), var och en representerar en viss typ av entitet (till exempel en kund, produkt eller försäljningsorder). Attributen för dessa entiteter (till exempel en kunds namn, en produkts pris eller en försäljningsorders orderdatum) definieras som kolumner eller attribut för tabellen, och varje rad i tabellen representerar en instans av entitetstypen (till exempel en specifik kund, produkt eller försäljningsorder).

Tabellerna i databasen är relaterade till varandra med hjälp av nyckelkolumner som unikt identifierar den specifika entitet som representeras. En primärnyckel definieras för varje tabell och en referens till den här nyckeln definieras som en sekundärnyckel i alla relaterade tabeller. Det här är lättare att förstå genom att titta på ett exempel:

En relationsdatabas som innehåller fyra tabeller

Diagrammet visar en relationsdatabas som innehåller fyra tabeller:

  • Kund
  • SalesOrderHeader
  • SalesOrderDetail
  • Produkt

Varje kund identifieras av ett unikt CustomerID-fält – det här fältet är den primära nyckeln för tabellen Kund . Tabellen SalesOrderHeader har en primärnyckel med namnet OrderID för att identifiera varje order, och den innehåller även en CustomerID-sekundärnyckel som refererar till primärnyckeln i tabellen Kund så att den identifierar vilken kund som är associerad med varje beställning. Data om de enskilda objekten i en ordning lagras i tabellen SalesOrderDetail , som har en sammansatt primärnyckel som kombinerar OrderID i tabellen SalesOrderHeader med värdet LineItemNo . Kombinationen av dessa värden identifierar unikt ett radobjekt. Fältet OrderID används också som sekundärnyckel för att ange vilken ordning radartikeln tillhör, ett ProductID-fält används som sekundärnyckel till ProductID-primärnyckeln i tabellen Produkt för att ange vilken produkt som har beställts.

Uppsättningsbaserad bearbetning

Set theory är en av de matematiska grunderna i relationsmodellen för datahantering och är grundläggande för att arbeta med relationsdatabaser. Även om du kanske kan skriva frågor i T-SQL utan en grundlig förståelse av uppsättningar, kan du så småningom ha svårt att skriva några av de mer komplexa typerna av instruktioner som kan behövas för optimala prestanda.

Utan att dyka in i matematiken i setteori kan du tänka dig en uppsättning som "en samling bestämda, distinkta objekt som betraktas som en helhet.". När det gäller SQL Server-databaser kan du se en uppsättning som en samling distinkta objekt som innehåller noll eller fler medlemmar av samma typ. Tabellen Kund representerar till exempel en uppsättning: specifikt uppsättningen för alla kunder. Du ser att resultatet av en SELECT-instruktion också utgör en uppsättning.

När du lär dig mer om T-SQL-frågeinstruktioner är det viktigt att alltid tänka på hela uppsättningen i stället för enskilda medlemmar. Det här tänkesättet ger dig bättre förutsättningar att skriva set-baserad kod i stället för att tänka en rad i taget. Att arbeta med uppsättningar kräver att man tänker på åtgärder som sker "alla samtidigt" i stället för en i taget.

En viktig funktion att notera om uppsättningsteori är att det inte finns någon specifikation om någon ordning av medlemmarna i en uppsättning. Den här bristen på ordning gäller för relationsdatabastabeller. Det finns inget begrepp för en första rad, en andra rad eller en sista rad. Element kan nås (och hämtas) i valfri ordning. Om du behöver returnera resultat i en viss ordning måste du uttryckligen ange det med hjälp av en ORDER BY-sats i SELECT-frågan.