Cheat Sheet
SQL Cheat Sheet
Common SQL queries for SQLite and MySQL — selects, joins, aggregations, and schema management
SELECT Basics
SELECT * FROM users;
SELECT name, email FROM users WHERE active = 1;
SELECT * FROM products ORDER BY price DESC LIMIT 10;
SELECT DISTINCT category FROM items;
Filtering
WHERE status = 'active'
WHERE price BETWEEN 10 AND 50
WHERE name LIKE '%search%'
WHERE created_at > '2026-01-01'
WHERE category IN ('tech', 'design')
WHERE (status = 'active' OR trial = 1) AND plan = 'pro'
Joins
-- INNER JOIN (only matching rows)
SELECT u.name, o.total FROM users u
JOIN orders o ON u.id = o.user_id;
-- LEFT JOIN (all users, even without orders)
SELECT u.name, o.total FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
-- Multiple joins
SELECT u.name, o.id, p.name
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN products p ON o.product_id = p.id;
Aggregation
SELECT COUNT(*) FROM users;
SELECT category, COUNT(*) as count FROM items GROUP BY category;
SELECT AVG(price) FROM products;
SELECT MAX(price), MIN(price) FROM products;
SELECT SUM(amount) FROM invoices WHERE paid = 1;
SELECT status, COUNT(*) FROM orders GROUP BY status HAVING count > 5;
INSERT / UPDATE / DELETE
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
INSERT INTO users (name) VALUES ('Bob'), ('Charlie'), ('Diana');
UPDATE users SET email = 'new@email.com' WHERE id = 42;
UPDATE products SET price = price * 1.1 WHERE category = 'premium';
DELETE FROM logs WHERE created_at < date('now', '-30 days');
DELETE FROM users WHERE id NOT IN (SELECT user_id FROM orders);
Indexes
CREATE INDEX idx_users_email ON users(email);
CREATE UNIQUE INDEX idx_users_slug ON users(slug);
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at);
DROP INDEX idx_users_email;
SQLite-Specific
-- Auto-increment
CREATE TABLE items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL DEFAULT '',
created_at TEXT DEFAULT (datetime('now'))
);
-- Full-text search
CREATE VIRTUAL TABLE docs USING fts5(title, content);
INSERT INTO docs VALUES ('hello world', 'content here');
SELECT * FROM docs WHERE docs MATCH 'hello';
-- Pragmas
PRAGMA journal_mode = WAL;
PRAGMA foreign_keys = ON;
PRAGMA synchronous = NORMAL;
-- Date operations
SELECT datetime('now');
SELECT date('now', '-7 days');
SELECT strftime('%Y-%m', created_at) as month FROM orders;
MySQL-Specific
-- Auto-increment
CREATE TABLE items (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
) ENGINE=InnoDB;
-- Full-text
CREATE FULLTEXT INDEX idx_body ON articles(title, body);
SELECT * FROM articles WHERE MATCH(title, body) AGAINST('search terms');
-- Date functions
SELECT NOW(), CURDATE();
SELECT DATE_ADD(created_at, INTERVAL 7 DAY) FROM orders;
SELECT MONTH(created_at) FROM orders;