SQL (Structured Query Language) is a standard language for accessing and manipulating relational databases.
- Querying data
- Inserting, updating, and deleting records
- Creating and modifying database schemas
- Managing permissions
MySQL is an open-source Relational Database Management System (RDBMS) based on SQL. It's widely used with web applications (e.g., PHP + MySQL, Java Spring Boot + MySQL).
| Category | Keywords |
|---|---|
| DDL | CREATE, ALTER, DROP, TRUNCATE, RENAME |
| DML | INSERT, UPDATE, DELETE |
| DQL | SELECT |
| DCL | GRANT, REVOKE |
| TCL | COMMIT, ROLLBACK, SAVEPOINT |
| Category | Examples |
|---|---|
| Numeric | INT, BIGINT, FLOAT, DECIMAL |
| Date & Time | DATE, DATETIME, TIMESTAMP, TIME, YEAR |
| String | VARCHAR, CHAR, TEXT, BLOB |
Used to define or change the structure of the database (tables, schema, etc.).
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);ALTER TABLE users ADD COLUMN age INT;DROP TABLE users;TRUNCATE TABLE users;Used to insert, modify, or delete data inside tables.
INSERT INTO users (name, email) VALUES ('Harsh', 'harsh@example.com');UPDATE users SET name = 'Harsh Singh' WHERE id = 1;DELETE FROM users WHERE id = 1;Used to retrieve data from the database.
Basic:
SELECT * FROM users;With WHERE clause (filtering):
SELECT * FROM users WHERE age > 25;Sorting results:
SELECT * FROM users ORDER BY name ASC;Selecting specific columns:
SELECT name, email FROM users WHERE email LIKE '%gmail.com';Using Aggregate Functions (summary data):
SELECT COUNT(*), AVG(age), MAX(age) FROM users;| Constraint | Description |
|---|---|
PRIMARY KEY |
Uniquely identifies each row |
FOREIGN KEY |
References primary key of another table |
UNIQUE |
Ensures unique values |
NOT NULL |
Prevents NULL values |
CHECK |
Validates data based on a condition |
DEFAULT |
Assigns default value |
| Type | Description & Syntax |
|---|---|
| INNER JOIN | Returns matching records |
SELECT u.name, o.amount
FROM users u
INNER JOIN orders o ON u.id = o.user_id;| LEFT JOIN | All from left + matched right | | RIGHT JOIN| All from right + matched left | | FULL JOIN | All from both sides (not in MySQL, emulate with UNION) |
SELECT age, COUNT(*)
FROM users
GROUP BY age
HAVING COUNT(*) > 1;SELECT name FROM users
WHERE id IN (SELECT user_id FROM orders WHERE amount > 1000);CREATE INDEX idx_email ON users(email);CREATE VIEW user_summary AS
SELECT name, email FROM users;START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE id = 1;
UPDATE accounts SET balance = balance + 500 WHERE id = 2;
COMMIT; -- or ROLLBACK;DELIMITER //
CREATE PROCEDURE GetAllUsers()
BEGIN
SELECT * FROM users;
END //
DELIMITER ;| Task | Command |
|---|---|
| Show all databases | SHOW DATABASES; |
| Use DB | USE db_name; |
| Show tables | SHOW TABLES; |
| Describe table | DESC table_name; |
| Create DB | CREATE DATABASE db_name; |
| Drop DB | DROP DATABASE db_name; |
- Always use
WHEREwithDELETEorUPDATEto avoid full-table changes. - Use
LIMITwithSELECTfor large tables. - Use
Prepared Statementsto avoid SQL injection (esp. in Java). - Normalize database to avoid redundancy.