CREATE TABLE
– definiuje nazwę tabeli oraz nazwy i typ każdej kolumny
CREATE TABLE table_name (
column_name columnType columnCconstraint,
[...,]
table_constraints, [...,] )
ColumnType: TEXT
, NUMERIC
, INTEGER
, REAL
, BLOB
ColumnConstraint:
NOT NULL
– kolumna nie może mieć NULL
.
DEFAULT (v)
– domyślna wartość dla kolumny (jeżeli nie podano).
UNIQUE
– wszystkie wartości w kolumnie muszą być różne.
PRIMARY KEY
– klucz główny tabeli.
CHECK (wyrażenie)
– dodatkowe warunki na wartości w kolumnie.
-- SALARY musi być większe od zera
SALARY REAL CHECK(SALARY > 0)
TableConstraint
UNIQUE (c1, c2...)
PRIMARY KEY(c1, c2...)
CHECK (SALARY > 0)
Uwaga dotycząca autoinkrementacji
Domyślnie każdy wiersz w SQLite ma specjalną kolumnę, zwykle nazywaną rowid
, który jednoznacznie identyfikuje ten wiersz w obrębie tablicy. Jednak jeśli wyrażenie WITHOUT ROWID
zostanie dodane na końcu CREATE TABLE
, to wtedy specjalna kolumna rowid
będzie pominięty. Za każdym razem, gdy tworzona jest tabela bez określenia WITHOUT ROWID
, to powstaje tabele zawierająca niejawną (w sensie, nie wyświetlaną ale istniejącą) kolumnę auto-inkrementacji o nazwie rowid
.
CREATE TABLE people (
first_name TEXT NOT NULL, last_name TEXT NOT NULL );
INSERT INTO people (first_name, last_name) VALUES ('John', 'Doe');
SELECT rowid, first_name, last_name FROM people;
INSERT
, UPDATE
, DELETE
INSERT INTO table (column1, column2 ,..)
VALUES( value1, value2 ,...);
Część (column1, column2 ,..)
jest opcjonalna; jeżeli wstawiamy wartości do wszystkich kolumn wiersza w szczególności.
SELECT
SELECT [DISTINCT] selectHeading
FROM table, table
WHERE filterExpression
GROUP BY groupingExpression
HAVING filterExpression
ORDER BY orderingEexpression
LIMIT count
selectHeading – określa jakie kolumny (wyrażenia zawierające kolumny) albo agregaty mają być wypisane
HAVING
filterExpression – określa warunki (filtry) dla danych pogrupowanych (wymaga klauzuli GROUP BY
)
DISTINCT
– usuwa powtórzenia
SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName="Around the Horn" AND c.CustomerID=o.CustomerID;
SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;
JOINS
SELECT Title, Name FROM albums
INNER JOIN artists ON artists.ArtistId = albums.ArtistId;
-- z użyciem aliasów (l, r)
SELECT l.Title, r.Name FROM albums l
INNER JOIN artists r ON r.ArtistId = l.ArtistId
Podzapytanie to polecenie SELECT
wewnątrz innego polecenia:
SELECT column_1
FROM table_1
WHERE column_1 = (
SELECT column_1
FROM table_2
);
Podzapytanie jest wewnątrz pary nawiasów okrągłych.
Zazwyczaj podzapytanie powinno zwrócić pojedynczy wiersz żeby miało sens, chociaż może także zwrócić wiele wierszy (wartości) porównywanych operatorem IN
.
Można użyć podzapytania w klauzulach SELECT
, FROM
, WHERE
i JOIN
.
.databases -- wypisz bazy
.read FILE.sql -- wykonaj SQL z pliku FILE.sql
.q -- zakończ
.tables -- wypisz kolumny
.header on -- wypisuj nazwy kolumn
.mode (list|csv|insert) -- format wynikowy
.separator "x" -- znak separujący
.mode list
.separator ';'
.output PLIK albo .once (tylko nast. polecenie)
`` .mode csv .separator ‘;’ .import PLIK tabela ```