SQLite Reference
0. Connection & Basics
0.1 Client Connect
Using the sqlite3 CLI for local file-based
databases.
# Open or create a database file
sqlite3 project.db
# Use an ephemeral in-memory database
sqlite3 :memory: "SELECT 'volatile' AS type;"type
--------
volatile
0.2 CLI Meta-commands
Internal dot-commands for management.
.tables -- List all tables
.schema users -- Show CREATE statement for 'users'
.mode csv -- Set output mode to CSV
.import data.csv t1 -- Import CSV into table 't1'
.quit -- Exit the CLI(Management task result)
0.3 Comments
Annotating SQL code.
-- Single-line comment
/* Multi-line
comment block */
SELECT 1; -- Trailing comment1
-
1
1. Data Types
1.1 Numerics
Flexible “manifest typing” system.
SELECT
42 AS i_int, -- INTEGER (signed 1, 2, 3, 4, 6, or 8 bytes)
3.14159 AS f_real; -- REAL (8-byte IEEE float)i_int | f_real
------+--------
42 | 3.14159
1.2 Strings & Binaries
Text and raw storage.
SELECT
'UTF-8 text' AS t_text, -- TEXT
x'53514C' AS b_blob; -- BLOB (raw bytes)t_text | b_blob
-----------+-------
UTF-8 text | SQL
1.3 Date & Time
Handled via built-in functions (no native temporal type).
SELECT
date('now') AS d, -- YYYY-MM-DD
datetime('now', '+1 hour') AS t,-- YYYY-MM-DD HH:MM:SS
strftime('%s', 'now') AS ts; -- Unix Epochd | t | ts
-----------+---------------------+-----------
2024-05-16 | 2024-05-16 11:00:00 | 1715853600
1.4 Booleans & Enums
Represented as integers or strings.
SELECT
1 AS is_true, -- Boolean TRUE
0 AS is_false, -- Boolean FALSE
'active' AS status; -- No ENUM type; use CHECK constraintsis_true | is_false | status
--------+----------+-------
1 | 0 | active
2. Basic Querying (DQL)
2.1 SELECT & Aliases
Data projection.
SELECT
id,
name AS username,
score * 10 AS points
FROM players;id | username | points
---+----------+-------
1 | dev_user | 420
2.2 WHERE Filtering
Pattern matching and logic.
SELECT * FROM files
WHERE size > 1024
AND name LIKE '%.log' -- Standard case-insensitive
AND name GLOB 'test_[0-9]*'; -- Unix shell glob (case-sensitive)(Filtered files)
2.3 ORDER BY
Sorting results.
SELECT * FROM tasks
ORDER BY priority DESC, deadline ASC;(Sorted tasks)
2.4 LIMIT / OFFSET
Pagination.
SELECT id FROM logs
LIMIT 5 OFFSET 10; -- Skip 10, take 5(5 rows)
3. Joins & Set Operations
3.1 Inner & Outer Joins
Horizontal table merging.
SELECT u.name, s.val
FROM users u
LEFT JOIN settings s ON u.id = s.user_id; -- Standard outer join(Joined user settings)
3.2 Cross & Self Joins
Cartesian products and self-references.
-- Self join for parent-child nodes
SELECT p.name AS parent, c.name AS child
FROM nodes p
JOIN nodes c ON p.id = c.parent_id;(Node hierarchy)
3.3 UNION, INTERSECT, EXCEPT
Set operations.
SELECT id FROM local_cache
EXCEPT
SELECT id FROM remote_server; -- In local but not remote(Unique local IDs)
3.4 JOIN with Subqueries
Derived tables.
SELECT a.name, b.avg_val
FROM authors a
JOIN (SELECT author_id, AVG(rating) AS avg_val FROM books GROUP BY author_id) b
ON a.id = b.author_id;(Authors with averages)
4. Aggregation & Grouping
4.1 GROUP BY
Bucket categorization.
SELECT category, COUNT(*)
FROM items
GROUP BY category;category | COUNT(*)
---------+---------
hardware | 12
software | 8
4.2 HAVING
Aggregate filtering.
SELECT tag, SUM(bits)
FROM data
GROUP BY tag
HAVING SUM(bits) > 1024;(Large data tags)
4.3 Aggregate Functions
Common reductions.
SELECT
COUNT(DISTINCT user_id) AS distinct_users,
group_concat(name, '|') AS pipe_list -- SQLite specific
FROM sessions;distinct_users | pipe_list
---------------+-----------
5 | a|b|c|d|e
5. Advanced Querying
5.1 Subqueries (IN, EXISTS)
Nested evaluation.
SELECT name FROM products
WHERE price > (SELECT AVG(price) FROM products);(Above-average products)
5.2 Common Table Expressions (WITH)
Readable queries.
WITH top_users AS (
SELECT id FROM users WHERE karma > 1000
)
SELECT * FROM posts WHERE user_id IN top_users;(Posts from top users)
5.3 Recursive CTEs
Graph and sequence generation.
WITH RECURSIVE fiber(n, prev) AS (
SELECT 1, 0
UNION ALL
SELECT n + prev, n FROM fiber WHERE n < 100
)
SELECT n FROM fiber;n
-
1
1
2
3
5
...
6. Window Functions
6.1 OVER & PARTITION BY
Windowing (SQLite 3.25.0+).
SELECT
dept,
salary,
RANK() OVER (PARTITION BY dept ORDER BY salary DESC) as rank
FROM staff;(Staff ranked by salary within department)
6.2 Ranking
Positioning.
SELECT
val,
ROW_NUMBER() OVER (ORDER BY val) AS row_num
FROM stats;(Ordered values with sequence)
6.3 Analytics
Positional access.
SELECT
val,
LAG(val) OVER (ORDER BY id) AS previous
FROM sensor_data;(Sensor values with lag)
7. Data Modification (DML)
7.1 INSERT
Adding data.
INSERT INTO settings (key, val) VALUES ('port', 8080);(1 row inserted)
7.2 UPDATE & DELETE
Modification.
UPDATE users SET last_seen = strftime('%s','now') WHERE id = 1;
DELETE FROM sessions WHERE expiry < strftime('%s','now');(Rows affected)
7.3 Upsert (ON CONFLICT)
Atomic insert-or-update (SQLite 3.24.0+).
INSERT INTO kv(key, val) VALUES ('hits', 1)
ON CONFLICT(key) DO UPDATE SET val = val + 1;(Row updated)
8. Schema Definition (DDL)
8.1 CREATE & ALTER Table
Structure management.
CREATE TABLE hosts (
id INTEGER PRIMARY KEY AUTOINCREMENT, -- Auto-incrementing PK
hostname TEXT UNIQUE NOT NULL,
config JSON -- JSON check-constraint validation
);
ALTER TABLE hosts ADD COLUMN status INTEGER DEFAULT 0;(Table created/altered)
8.2 Constraints
Integrity logic.
CREATE TABLE parts (
id INTEGER PRIMARY KEY,
weight REAL CHECK(weight > 0),
pid INTEGER REFERENCES hosts(id) ON DELETE SET NULL
);(Table created)
8.3 Indexes & Performance
Search optimization.
CREATE INDEX idx_host_status ON hosts(status);
EXPLAIN QUERY PLAN SELECT * FROM hosts WHERE status = 1;QUERY PLAN
`--SEARCH TABLE hosts USING INDEX idx_host_status (status=?)
8.4 Views
Stored queries.
CREATE VIEW active_hosts AS SELECT * FROM hosts WHERE status = 1;(View created)
9. Logic & Administration
9.1 Transactions (ACID)
Atomic control.
BEGIN TRANSACTION;
UPDATE wallet SET bal = bal - 10 WHERE id = 1;
UPDATE wallet SET bal = bal + 10 WHERE id = 2;
COMMIT;(Transaction committed)
9.2 Triggers
Event-driven logic.
CREATE TRIGGER log_update AFTER UPDATE ON hosts
BEGIN
INSERT INTO audit(host_id, ts) VALUES (OLD.id, strftime('%s','now'));
END;(Trigger created)
9.3 Explain Plan
Low-level VM analysis.
EXPLAIN SELECT * FROM hosts WHERE id = 5;addr | opcode | p1 | p2 | p3 ...
-----+-------------+----+----+----...
0 | Init | 0 | 12 | 0 ...
9.4 Pragma & Settings
Database configuration.
PRAGMA journal_mode = WAL; -- Write-Ahead Logging for concurrency
PRAGMA foreign_keys = ON; -- Enable FK enforcement
PRAGMA synchronous = NORMAL; -- Faster but less safe on power losswal