# Kommandon

\[ [Installera verktyg](/sqlite/installera-sqlite-verktyg.md) | [**Kommandon**](/sqlite/kommandon.md) | [Relationer](/sqlite/relationer.md) | [Joins](/sqlite/joins.md) ]

## CREATE TABLE

Skapar en tabell.&#x20;

```sql
CREATE TABLE users (
	id INTEGER PRIMARY KEY AUTOINCREMENT,
	name TEXT NOT NULL,
	password TEXT NOT NULL,
	email TEXT NOT NULL
);
```

Ovanstående skapar tabellen **users** med kolumnerna **id**, **name**, **password** och **email**.

* **INTEGER** betyder att kolumnen bara kan innehålla siffror, på samma sätt som en integer-variabel i C#..
* **TEXT** betyder att kolumnen bara kan innehålla text, lite som en string.
* **PRIMARY KEY** betyder att det är värdet i den kolumnen som är unikt och används för att identifiera varje rad.
* **AUTOINCREMENT** betyder att om man lägger till en rad i tabellen utan att ange ett värde för denna kolumn så ges den ett automatiskt nytt värde.
* **NOT NULL** betyder att man inte får lämna kolumnen tom.

<table><thead><tr><th width="86">id🔑</th><th width="134">name</th><th width="153">password</th><th>email</th></tr></thead><tbody><tr><td></td><td></td><td></td><td></td></tr></tbody></table>

## DROP TABLE

Raderar en tabell.

```
DROP TABLE users;
```

## ALTER TABLE

Gör ändringar i en existerande tabell

### RENAME

Byter namn på tabellen.

```sql
ALTER TABLE users
RENAME TO students;
```

### ADD COLUMN

Lägger till en ny kolumn

```
ALTER TABLE users
ADD COLUMN twitter_handle TEXT;
```

### DROP COLUMN

Tar bort en kolumn (och all data som finns i den). Fungerar inte för alla kolumner – till exempel kan man inte ta bort de som är primärnycklar.

```
ALTER TABLE users
DROP COLUMN twitter_handle;
```

### RENAME COLUMN

Byter namn på en kolumn

```sql
ALTER TABLE users
RENAME COLUMN name TO username;
```

## INSERT INTO

Lägger till en rad i en tabell.

```sql
INSERT INTO users (name,password,email)
VALUES('Mikael Bergström','12345','fake@bullshit.com');
```

Ovanstående stoppar in en rad i tabellen **users**.

* **(name,password,email)** betyder att det är de tre kolumnerna som värden ska stoppas in i.
* **VALUES('Mikael Bergström','12345','<fake@bullshit.com>')** betyder att texten "Mikael Bergström" läggs in i den första angivna kolumnen (name), "12345" läggs in i den andra kolumnen (password) och att "<fake@bullshit.com>" läggs in i den tredje (email).

En av tabellens fyra kolumner, "id", anges inte och får inget värde. Eftersom den är AUTOINCREMENT får den ändå ett värde, automatiskt.

<table><thead><tr><th width="86">id🔑</th><th width="166">name</th><th width="153">password</th><th>email</th></tr></thead><tbody><tr><td>1</td><td>Mikael Bergström</td><td>12345</td><td>fake@bullshit.com</td></tr></tbody></table>

Observera att man använder ' för att avgränsa texter (strings).&#x20;

## SELECT

Hämtar data från en tabell

```sql
SELECT * FROM users;
```

Ovanstående hämtar alla rader och alla kolumner från tabellen.

<table><thead><tr><th width="86">id🔑</th><th width="166">name</th><th width="153">password</th><th>email</th></tr></thead><tbody><tr><td>1</td><td>Mikael Bergström</td><td>12345</td><td>fake@bullshit.com</td></tr><tr><td>2</td><td>Jacob Marley</td><td>money$</td><td>moneyman@scroogemarley.com</td></tr></tbody></table>

```sql
SELECT name,email FROM users;
```

Ovanstående hämtar alla rader, men bara kolumnerna **name** och **email**.

<table><thead><tr><th width="199">name</th><th>email</th></tr></thead><tbody><tr><td>Mikael Bergström</td><td>fake@bullshit.com</td></tr><tr><td>Jacob Marley</td><td>moneyman@scroogemarley.com</td></tr></tbody></table>

### AS

Gör att kolumner kan ges nya namn i resultatet.

```sql
SELECT name AS namn FROM users;
```

<table><thead><tr><th width="199">namn</th></tr></thead><tbody><tr><td>Mikael Bergström</td></tr><tr><td>Jacob Marley</td></tr></tbody></table>

### WHERE

Gör att man kan vara mer specifik med vilken eller vilka rader man vill läsa av.

```sql
SELECT name,email FROM users WHERE id=1;
```

Ovanstående hämtar bara kolumnerna name och email, och bara de rader där kolumnen id har värdet 0.

<table><thead><tr><th width="218">name</th><th>email</th></tr></thead><tbody><tr><td>Mikael Bergström</td><td>fake@bullshit.com</td></tr></tbody></table>

### AND

Gör att man kan sätta ihop flera olika kriterier i en WHERE.

```
SELECT name FROM users WHERE email='fake@bullshit.com' AND password='12345';
```

### COUNT

Räknar antalet rader som innehåller ett värde.

```sql
SELECT COUNT(*) FROM users WHERE id=0;
```

## DELETE

Tar bort en eller flera rader från en tabell, baserat på ett eller flera kriterier.

```sql
DELETE FROM users WHERE id=0;
```

Kriterierna anges via WHERE, precis som för SELECT.

## UPDATE

Ändrar information i en eller flera celler, baserat på ett eller flera kriterier.

```sql
UPDATE users
SET email = 'deep@fake.com'
WHERE id=0;
```

Ovanstående kod ändrar email-kolumnens data till "<deep@fake.com>" för alla rader där id-kolumnen innehåller en nolla.

<table><thead><tr><th width="86">id🔑</th><th width="166">name</th><th width="153">password</th><th>email</th></tr></thead><tbody><tr><td>0</td><td>Mikael Bergström</td><td>12345</td><td>deep@fake.com</td></tr><tr><td>1</td><td>Jacob Marley</td><td>money$</td><td>moneyman@scroogemarley.com</td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://db.progdocs.se/sqlite/kommandon.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
