---
# System prepended metadata

title: Instuderingsfrågor SQL FACIT
tags: [övningsuppgifter]

---

# Instuderingsfrågor SQL FACIT

1. Vad är skillnaden mellan en databas och en tabell?
**En databas innehåller flera tabeller. En tabell innehåller rader och kolumner.**

3. Vad är syftet med WHERE-villkoret i en SQL-query?
**Att filtrera rader baserat på ett givet villkor.**

5. Vad gör LIMIT och ge ett exempel på när man vill använda det?
**Det begränsar antalet rader som queryn returnerar. Det vill vi använda i samband med att vi sorterar data och vi vill ha de x största eller minsta värdena.**

7. Vad händer om du inte anger alla kolumner vid en INSERT-operation? Kan man lämna några kolumner tomma?
**Om man inte anger kolumnnamnen får man ett fel. Annars kan man bara specifiera de kolumner man vill ange, och övriga kolumner fylls med null eller default värde. Är någon av de icke-angivna kolumnerna markerade som NOT NULL får man ett fel.**

9. Hur använder man GROUP BY och vad är syftet med det?
**GROUP BY används tillsammans med aggregerande funktioner för att säga vilka rader som ska aggregeras.**

11. Vad är skillnaden mellan HAVING och WHERE?
**HAVING anger ett villkor efter datat har aggregerats av en aggregerande funktion, och därför kan vi använda resultatet från funktionen i villkoret. WHERE anger ett villkor som kollas för aggregeringen.**

13. Vad används ordet AS till?
**För att ange ett alias till ett kolumnnamn.**

15. Vad innebär NOT NULL-begränsningen i SQL? Ge ett exempel på när man vill använda den och när man inte vill använda den.
**Att en kolumnen inte får innehålla tomma värden (NULL).
Man kan vilja använda NOT NULL på kolumner som ID, namn, eller andra attribut där det är nödvändigt att alltid ha ett värde.
Kolumner som kommentarer eller telefonnummer där det inte alltid är obligatoriskt att ange ett värde.**

17. Vad är ett standardvärde (default value) i SQL? Hur fungerar det och varför skulle du använda ett sådant?
**Ett standardvärde är ett förinställt värde som automatiskt sätts i en kolumn om inget annat värde anges vid en INSERT-operation. Det används för att säkerställa att kolumner alltid får ett giltigt värde om ingen input tillhandahålls.**


19. Vad gör en CHECK-begränsning i SQL, och hur skrivs den?
**CHECK-begränsningen används för att säkerställa att värden i en kolumn uppfyller ett visst villkor. Det är ett sätt att validera data som matas in i databasen. CHECK skrivs följt av ett villkor som antingen är sant eller falskt.**

21. Vad är skillnaden mellan INTEGER och REAL i SQL? Ge ett exempel på ett användningsområden för båda typerna.
**Båda innehåller siffror, men en INTEGER innehåller heltal och en REAL innehåller decimaltal. En INTEGER vill man använda när man räknar antal, och en REAL när man har något man mäter (vikt, volym, längd etc)**


Utifrån tabellen som heter `Employees`, vad kommer du få för resultat om du kör följande queries?
![image](https://hackmd.io/_uploads/SyIdbPgpA.png)


a. `SELECT first_name, last_name FROM Employees WHERE department = 'HR';`
**|Eva|Davis|**
b. `SELECT first_name, salary FROM Employees WHERE salary > 60000;`
**|Bob|75000|**
c. `SELECT COUNT(*) FROM Employees WHERE department = 'IT';`
**2**
d. 
```sql
SELECT first_name, salary 
FROM Employees 
WHERE hire_date > '2020-01-01' 
ORDER BY salary DESC;
```
| Column 1 | Column 2 | 
| -------- | -------- | 
|Charlie|60000|
|Eva|58000|
|Alice|55000|
|David|52000|




e. 
```sql
SELECT COUNT(*), department 
FROM Employees 
GROUP BY department 
HAVING COUNT(*) > 1;
```
| Column 1 | Column 2 | 
| -------- | -------- | 
|2|HR|
|2|IT|
f. 
```sql
SELECT department, MAX(salary) - MIN(salary) AS salary_difference 
FROM Employees 
GROUP BY department;
```
| Column 1 | Column 2 | 
| -------- | -------- | 
|HR|3000|
|IT|15000|
|Sales|0|

Nedan är två queries som inte kommer att köra. Förklara vad som är fel och hur man kan åtgärda det.

```sql
SELECT first_name, last_name, AVG(salary) 
FROM Employees;
```
**Man kan inte selecta kolumner som inte grupperas när man använder aggregerande funktioner.**


```sql
SELECT first_name, last_name 
FROM Employees 
WHERE salary > AVG(salary);
```
**Man kan inte använda aggregerande funktioner i en WHERE-sats**