Learn MySQL from Scratch

Beginner-friendly guide to databases, tables, queries, joins, and more. Follow the learning path, try examples, and check your understanding.

Quick Facts

  • SQL stands for Structured Query Language
  • MySQL is a popular SQL database server
  • Data lives in databases and tables
  • Use SELECT to read data, INSERT to add, UPDATE to change, DELETE to remove

Learning Path Flowchart

graph TD
    A[Start Here] --> B[Install MySQL]
    B --> C[Core Concepts: Database, Table, Row, Column, Types]
    C --> D[CRUD: SELECT/INSERT/UPDATE/DELETE]
    D --> E[Filtering, Sorting, Limiting]
    E --> F[Aggregations: COUNT, SUM, AVG, GROUP BY]
    F --> G[Joins: INNER, LEFT, RIGHT]
    G --> H[Design: Keys, Constraints, Normalization]
    H --> I[Practice & Quiz]
    I --> J[Next: Indexes, Transactions]
     

SQL Query Execution Flow

flowchart LR
    Q[Write SQL] --> P[Parse]
    P --> O[Optimize]
    O --> EX[Execute]
    EX --> RS[Result Set]
     

Getting Started

What is MySQL?

MySQL is a relational database management system. Data is organized into tables with rows and columns. You use SQL to create structures and query data.

Install

  1. Download MySQL Community Server from dev.mysql.com
  2. Install a GUI client like MySQL Workbench
  3. Connect to localhost with your username and password

Create Your First Database

SQL
CREATE DATABASE school;
USE school;

CREATE TABLE students (
  id INT PRIMARY KEY AUTO_INCREMENT,
  first_name VARCHAR(50) NOT NULL,
  last_name VARCHAR(50) NOT NULL,
  age INT,
  grade VARCHAR(5)
);

INSERT INTO students (first_name, last_name, age, grade) VALUES
('Asha', 'Verma', 14, '9'),
('Ravi', 'Kumar', 15, '10'),
('Neha', 'Singh', 13, '8');

Paste this in Sql input and select all and test

SQL

CREATE TABLE IF NOT EXISTS kali (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  first_name TEXT NOT NULL,
  last_name TEXT NOT NULL,
  age INTEGER,
  grade TEXT,
  kamei TEXT,
  kioi INTEGER,
  make TEXT
);

INSERT INTO kamli (first_name, last_name, age, grade, kamei, kioi, make)
VALUES ('a','b',25,'A','k1',123,'m1');

Fundamentals

Data Types

  • INT, BIGINT
  • DECIMAL, FLOAT
  • DATE, DATETIME
  • CHAR, VARCHAR, TEXT

Constraints

  • PRIMARY KEY
  • FOREIGN KEY
  • UNIQUE
  • NOT NULL

Naming

  • snake_case for names
  • Meaningful table and column names

CRUD

Read Data

SQL
SELECT id, first_name, last_name, grade
FROM students
WHERE age >= 14
ORDER BY last_name ASC
LIMIT 5;

Insert

SQL
INSERT INTO students (first_name, last_name, age, grade)
VALUES ('Isha', 'Patel', 14, '9');

Update

SQL
UPDATE students
SET grade = '10'
WHERE id = 1;

Delete

SQL
DELETE FROM students
WHERE id = 3;

Filtering, Sorting, Limiting

  • WHERE filters rows
  • ORDER BY sorts results
  • LIMIT restricts number of rows
SQL
SELECT *
FROM students
WHERE grade IN ('9','10') AND age BETWEEN 13 AND 16
ORDER BY age DESC, last_name ASC
LIMIT 10;

Aggregations

  • COUNT, SUM, AVG, MIN, MAX
  • GROUP BY groups rows
  • HAVING filters groups
SQL
SELECT grade, COUNT(*) AS num_students, AVG(age) AS avg_age
FROM students
GROUP BY grade
HAVING COUNT(*) >= 1
ORDER BY grade;

Joins

Combine rows from multiple tables using matching keys.

  • INNER JOIN returns matching rows
  • LEFT JOIN keeps all left rows
  • RIGHT JOIN keeps all right rows
SQL
CREATE TABLE grades (
  student_id INT,
  subject VARCHAR(50),
  score INT,
  FOREIGN KEY (student_id) REFERENCES students(id)
);

SELECT s.first_name, s.last_name, g.subject, g.score
FROM students s
INNER JOIN grades g ON g.student_id = s.id
WHERE g.score >= 75
ORDER BY g.score DESC;

Keys, Constraints, Normalization

  • Primary keys uniquely identify a row
  • Foreign keys link related tables
  • Normalization reduces duplication (1NF, 2NF, 3NF)
SQL
CREATE TABLE subjects (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100) UNIQUE NOT NULL
);

CREATE TABLE enrollments (
  student_id INT,
  subject_id INT,
  PRIMARY KEY (student_id, subject_id),
  FOREIGN KEY (student_id) REFERENCES students(id),
  FOREIGN KEY (subject_id) REFERENCES subjects(id)
);

Quick Quiz

1) Which statement reads data?

2) Which clause sorts results?

3) Which join returns only matching rows?