SQL Tutorials

"Learn SQL from basics to advanced level"

MySQL (Structured Query Language)

MySQL is a relational database management system (RDBMS) that uses SQL to store, query, and manage data.

Create Database

CREATE DATABASE mydb;
SHOW DATABASES;
USE mydb;

Create Table

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100),
  email VARCHAR(100) UNIQUE,
  age INT
);

Insert Data

INSERT INTO users (name, email, age)
VALUES ("Alice", "alice@example.com", 25),
       ("Bob", "bob@example.com", 30);

Select Data

SELECT * FROM users;
SELECT name, age FROM users;
SELECT * FROM users WHERE age > 25;
SELECT * FROM users ORDER BY age DESC;
SELECT COUNT(*) FROM users;

Update & Delete

UPDATE users SET age = 26 WHERE name = "Alice";
DELETE FROM users WHERE id = 2;

Joins

-- INNER JOIN
SELECT orders.id, users.name
FROM orders
INNER JOIN users ON orders.user_id = users.id;

-- LEFT JOIN
SELECT users.name, orders.id
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

Constraints

CREATE TABLE employees (
  id INT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(100) UNIQUE,
  salary DECIMAL(10,2) CHECK (salary > 0)
);

Indexes

CREATE INDEX idx_name ON users(name);
SHOW INDEXES FROM users;

Aggregate Functions

SELECT COUNT(*) FROM users;
SELECT AVG(age) FROM users;
SELECT MIN(age), MAX(age) FROM users;
SELECT age, COUNT(*) FROM users GROUP BY age;

Subqueries

SELECT name FROM users
WHERE age > (SELECT AVG(age) FROM users);

Views

CREATE VIEW adult_users AS
SELECT * FROM users WHERE age >= 18;

SELECT * FROM adult_users;

Stored Procedures

DELIMITER //
CREATE PROCEDURE GetUsers()
BEGIN
  SELECT * FROM users;
END //
DELIMITER ;

CALL GetUsers();

Triggers

CREATE TRIGGER before_insert_users
BEFORE INSERT ON users
FOR EACH ROW
SET NEW.name = UPPER(NEW.name);

Transactions

START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- or ROLLBACK;

User Management

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;