Let me be honest with you.
For a long time, "the database" felt like this mysterious black box I tried not to touch.
I loved writing APIs. I loved React, Go, Python, whatever was shiny that month. But when someone said:
"Can you design the schema?" "Can you write a query for this report?" "Can you debug this slow query in production?"
…I'd quietly pray someone else on the team would volunteer.
That worked — until it didn't.
In one interview, they asked me to design a simple schema and write a few SQL queries on the spot. I fumbled through a SELECT *, vaguely mentioned "indexes," and completely blanked when they asked how I'd join two tables efficiently.
I walked out of that call knowing one thing:
"I never want to feel that helpless around data again."
This is the story of how I went from avoiding SQL to using MySQL confidently in real projects — plus a practical cheat sheet you can use right now.

1. Realizing SQL Isn't "Advanced Stuff" — It's the Core
The turning point for me was this mindset shift:
- Backend frameworks come and go.
- Cloud providers change.
- JavaScript has 17 new meta-frameworks every week.
But your data? That usually lives in SQL-shaped places for a very long time.
SQL isn't a "nice-to-have" for senior engineers. It's the language of:
- Every dashboard you stare at
- Every report your PM loves
- Every "why is this slow?" ticket at 3 a.m.
Once I stopped treating SQL as an academic topic and started treating it as how I answer questions about reality, everything changed.
2. The Two Steps That Finally Made SQL Click
I didn't start with a 400-page database textbook. I started with small, focused, interactive stuff.
Step 1: Learn SQL like a language, not a spec
I used these:
- SQL Teaching — tiny, approachable lessons that feel like a friend explaining things.
- Codecademy: Learn SQL — interactive exercises, immediate feedback.
- Codecademy: SQL Catalog — more paths if you like structured courses.
These helped me understand the basics:
SELECT,FROM,WHEREORDER BY,LIMITCOUNT,SUM,MAX,GROUP BYJOINlogic
No fancy infra. No production pressure. Just "type query, see result."
Step 2: Actually touch a real MySQL database
Theory is cute. But the day it clicked was the day I opened a real MySQL shell and ran commands that actually changed something.
On the command line, it suddenly felt real.
3. My First MySQL Session (AKA: Not That Scary)
Here's the mini-journey I wish I had on my first day.
Connect to MySQL
mysql -u [username] -p
# or, directly into a database:
mysql -u [username] -p [database]It prompts for a password. If you see the mysql> prompt, you're in.
See what's there
SHOW DATABASES;
USE my_database;
SELECT DATABASE();
SHOW TABLES;
DESCRIBE users;In 30 seconds, you can go from "no idea where anything is" to "oh, that's where the data lives."
4. Creating Tables: Making the Data's Home
At some point, you need to stop just reading data and actually design where it goes.
Create a table
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255),
created_at DATETIME
);Add a column later
ALTER TABLE users ADD COLUMN name VARCHAR(120Remove a column
ALTER TABLE users DROP COLUMN name;The first time you alter a real table in a staging or dev environment, it's terrifying… and empowering.
5. Queries You'll Use Every Week
Here's the part that went from "I'll Google it" to "I instinctively know what to write."
Select records
SELECT * FROM users;
SELECT email, created_at FROM users;Filter what you need
SELECT * FROM users WHERE email = 'audrey@example.com';
SELECT * FROM users
WHERE created_at BETWEEN '2025-01-01' AND '2025-02-01';
SELECT * FROM users
WHERE email LIKE '%@gmail.com';Aggregate data (the part that impresses PMs)
SELECT COUNT(*) FROM users;
SELECT
DATE(created_at) AS signup_date,
COUNT(*) AS signups
FROM users
GROUP BY signup_date
ORDER BY signup_date DESC;Other useful aggregates:
SELECT MAX(price) FROM orders;
SELECT MIN(price) FROM orders;
SELECT AVG(price) FROM orders;
SELECT ROUND(AVG(price), 2) FROM orders;Once you understand GROUP BY, dashboards stop being magic and start being queries you could write yourself.
6. The Moment Joins Finally Made Sense
Joins used to scare me.
Then I reframed them as:
"I have two tables. I just want them to talk to each other."
Inner join (only matching rows)
SELECT
users.email,
orders.id AS order_id,
orders.total_amount
FROM users
INNER JOIN orders
ON users.id = orders.user_id;Left join (keep all from the left, match from the right if possible)
SELECT
users.email,
orders.id AS order_id
FROM users
LEFT OUTER JOIN orders
ON users.id = orders.user_id;This is your best friend when you want things like:
"Show me all users, and include their latest order if they have one."
7. My Personal MySQL "Save Me at 2 a.m." Cheat Sheet
A few commands I reach for constantly: Update
UPDATE users
SET email = 'new@example.com'
WHERE id = 42;Delete
DELETE FROM users WHERE id = 42;
-- or everything:
TRUNCATE TABLE users;Export / Import
# Export
mysqldump -u [username] -p my_database > db_backup.sql
# Import
mysql -u [username] -p my_database < db_backup.sqlUser management
-- List users
SELECT User, Host FROM mysql.user;
-- Create user
CREATE USER 'audrey'@'localhost' IDENTIFIED BY 'supersecret';
-- Grant access
GRANT ALL ON my_database.* TO 'audrey'@'localhost';You don't need to memorize everything. But the more often you write them, the more they stick.
8. Tools That Make SQL Less Painful (and More Beautiful)
Yes, the CLI is powerful. But GUIs are allowed. I promise.
Some that helped me:
- TablePlus — fast, pretty, supports many DBs.
- DataGrip — JetBrains-level heavy hitter for database work.
- Sequel Pro — classic Mac app (older, but still liked in some setups).
The real power is combining them:
- Use GUI to glance at schemas and data.
- Use CLI for migrations, scripts, and automation.
9. Going Beyond "Toy Databases": Real-World Practice
The next level wasn't more syntax — it was more reality.
Some practice ideas that helped me:
- Rebuild analytics you already see in a dashboard (daily active users, revenue per day, etc.).
- Pretend you're a data analyst and answer questions your PM actually asks.
- Take a real dataset and explore it entirely in SQL.
If you want structured practice, look for things like:
- MySQL CLI tutorials
- "Analyzing business metrics with SQL" courses
- Visual guides like SQL joins infographics
These aren't just cute exercises; this is literally what a lot of data work looks like.
10. My Honest Advice If You're Just Starting SQL
If you're where I was — skipping SQL posts and silently praying interviews won't ask about databases — here's what I'd tell you:
You don't need to become a DBA. You don't need to memorize every command in existence.
You just need to:
- Start with the basics —
SELECT,WHERE,JOIN,GROUP BY. - Play in a safe environment — a local MySQL, a practice DB, or a sandbox.
- Use interactive learning –
- Build your own tiny cheat sheet — copy and adapt the commands you actually use.
- Apply it on real questions — "How many?", "How often?", "Which users?", "What changed?"
SQL isn't a gatekeeping tool for senior engineers. It's one of the most practical superpowers you can add to your stack.
One day you'll realize you're not copy-pasting from Stack Overflow anymore. You're just… writing the query.
And it works. And that feels incredibly good.
If You Made It This Far
Thank you. ❤️ I'm Audrey Xie, and I share honest, practical stories about learning backend development, system design, and now — databases.
If this helped you feel even a little less afraid of SQL/MySQL, you can:
👉 If my words saved you a few hours of confusion, a coffee means the world.