SQL
Master relational databases with SQL. Schema design, queries, performance, migrations for PostgreSQL, MySQL, SQLite, SQL Server.
Master relational databases with SQL. Schema design, queries, performance, migrations for PostgreSQL, MySQL, SQLite, SQL Server.
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Master relational databases from the command line. Covers SQLite, PostgreSQL, MySQL, and SQL Server with battle-tested patterns for schema design, querying, migrations, and operations.
Working with relational databases—designing schemas, writing queries, building migrations, optimizing performance, or managing backups. Applies to SQLite, PostgreSQL, MySQL, and SQL Server.
| Topic | File |
|---|---|
| Query patterns | |
| Schema design | |
| Operations | |
| Use Case | Database | Why |
|---|---|---|
| Local/embedded | SQLite | Zero setup, single file |
| General production | PostgreSQL | Best standards, JSONB, extensions |
| Legacy/hosting | MySQL | Wide hosting support |
| Enterprise/.NET | SQL Server | Windows integration |
# ❌ NEVER cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")✅ ALWAYS
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
Any column in WHERE, JOIN ON, or ORDER BY on large tables needs an index.
BEGIN; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT;
-- ✅ Faster (stops at first match) SELECT * FROM orders o WHERE EXISTS ( SELECT 1 FROM users u WHERE u.id = o.user_id AND u.active );
sqlite3 mydb.sqlite # Create/open sqlite3 mydb.sqlite "SELECT * FROM users;" # Query sqlite3 -header -csv mydb.sqlite "SELECT *..." > out.csv sqlite3 mydb.sqlite "PRAGMA journal_mode=WAL;" # Better concurrency
psql -h localhost -U myuser -d mydb # Connect psql -c "SELECT NOW();" mydb # Query psql -f migration.sql mydb # Run file \dt \d+ users \di+ # List tables/indexes
mysql -h localhost -u root -p mydb # Connect mysql -e "SELECT NOW();" mydb # Query
sqlcmd -S localhost -U myuser -d mydb # Connect sqlcmd -Q "SELECT GETDATE()" # Query sqlcmd -S localhost -d mydb -E # Windows auth
NOT IN (subquery) returns empty if subquery has NULL → use NOT EXISTSNULL = NULL is NULL, not true → use IS NULLCOUNT(column) excludes NULLs, COUNT(*) counts allWHERE YEAR(date) = 2024 scans full tableWHERE varchar_col = 123 skips indexLIKE '%term' can't use index → only LIKE 'term%' works(a, b) won't help filtering only on b-- PostgreSQL EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM orders WHERE user_id = 5;-- SQLite EXPLAIN QUERY PLAN SELECT * FROM orders WHERE user_id = 5;
Red flags:
Seq Scan on large tables → needs indexRows Removed by Filter high → index doesn't cover filterANALYZE tablename;-- Composite index (equality first, range last) CREATE INDEX idx_orders ON orders(user_id, status);-- Covering index (avoids table lookup) CREATE INDEX idx_orders ON orders(user_id) INCLUDE (total);
-- Partial index (smaller, faster) CREATE INDEX idx_pending ON orders(user_id) WHERE status = 'pending';
| Feature | PostgreSQL | MySQL | SQLite | SQL Server |
|---|---|---|---|---|
| LIMIT | LIMIT n | LIMIT n | LIMIT n | TOP n |
| UPSERT | ON CONFLICT | ON DUPLICATE KEY | ON CONFLICT | MERGE |
| Boolean | true/false | 1/0 | 1/0 | 1/0 |
| Concat | || | CONCAT() | || | + |
Install with
clawhub install <slug> if user confirms:
prisma — Node.js ORMsqlite — SQLite-specific patternsanalytics — data analysis queriesclawhub star sqlclawhub syncNo automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.