100 SQL Commands for Mastering SQL
Database Creation and Management
- Create Database:
CREATE DATABASE my_database;
- Drop Database:
DROP DATABASE my_database;
- Select Database:
USE my_database;
Table Creation and Management
- Create Table:
CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) );
- Drop Table:
DROP TABLE users;
- Alter Table:
ALTER TABLE users ADD COLUMN age INT;
- Rename Table:
ALTER TABLE users RENAME TO customers;
- Add Column:
ALTER TABLE users ADD COLUMN address VARCHAR(255);
- Drop Column:
ALTER TABLE users DROP COLUMN address;
- Modify Column:
ALTER TABLE users MODIFY COLUMN name VARCHAR(150);
Basic Data Operations
- Insert Data:
INSERT INTO users (id, name, email) VALUES (1, 'John Doe', 'john@example.com');
- Update Data:
UPDATE users SET email = 'john.doe@example.com' WHERE id = 1;
- Delete Data:
DELETE FROM users WHERE id = 1;
- Select Data:
SELECT * FROM users;
- Select Specific Columns:
SELECT name, email FROM users;
Advanced Data Retrieval
- Where Clause:
SELECT * FROM users WHERE age > 30;
- Order By:
SELECT * FROM users ORDER BY name ASC;
- Group By:
SELECT COUNT(*), age FROM users GROUP BY age;
- Having Clause:
SELECT age, COUNT(*) FROM users GROUP BY age HAVING COUNT(*) > 1;
- Limit Clause:
SELECT * FROM users LIMIT 10;
- Distinct:
SELECT DISTINCT age FROM users;
Joins
- Inner Join:
SELECT users.name, orders.order_id FROM users INNER JOIN orders ON users.id = orders.user_id;
- Left Join:
SELECT users.name, orders.order_id FROM users LEFT JOIN orders ON users.id = orders.user_id;
- Right Join:
SELECT users.name, orders.order_id FROM users RIGHT JOIN orders ON users.id = orders.user_id;
- Full Join:
SELECT users.name, orders.order_id FROM users FULL OUTER JOIN orders ON users.id = orders.user_id;
Indexes and Constraints
- Create Index:
CREATE INDEX idx_users_name ON users(name);
- Drop Index:
DROP INDEX idx_users_name;
- Unique Constraint:
ALTER TABLE users ADD CONSTRAINT unique_email UNIQUE (email);
- Foreign Key Constraint:
ALTER TABLE orders ADD CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users(id);
Aggregate Functions
- Count:
SELECT COUNT(*) FROM users;
- Sum:
SELECT SUM(age) FROM users;
- Average:
SELECT AVG(age) FROM users;
- Max:
SELECT MAX(age) FROM users;
- Min:
SELECT MIN(age) FROM users;
Subqueries
- Subquery in SELECT:
SELECT name, (SELECT COUNT(*) FROM orders WHERE orders.user_id = users.id) AS order_count FROM users;
- Subquery in WHERE:
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);
Transactions
- Start Transaction:
START TRANSACTION;
- Commit Transaction:
COMMIT;
- Rollback Transaction:
ROLLBACK;
Views
- Create View:
CREATE VIEW user_orders AS SELECT users.name, orders.order_id FROM users JOIN orders ON users.id = orders.user_id;
- Drop View:
DROP VIEW user_orders;
Advanced SQL Commands
- Case Statement:
SELECT name, CASE WHEN age < 18 THEN 'Minor' WHEN age BETWEEN 18 AND 65 THEN 'Adult' ELSE 'Senior' END AS age_group FROM users;
- Union:
SELECT name FROM users UNION SELECT name FROM customers;
- Union All:
SELECT name FROM users UNION ALL SELECT name FROM customers;
JSON Functions (for databases supporting JSON)
- Insert JSON Data:
INSERT INTO user_data (data) VALUES ('{"name": "John", "age": 30}');
- Select JSON Data:
SELECT data->>'name' AS name FROM user_data;
- Update JSON Data:
UPDATE user_data SET data = jsonb_set(data, '{age}', '31') WHERE id = 1;
Window Functions
- Row Number:
SELECT name, age, ROW_NUMBER() OVER (PARTITION BY age ORDER BY name) AS row_num FROM users;
- Rank:
SELECT name, age, RANK() OVER (ORDER BY age DESC) AS rank FROM users;
- Dense Rank:
SELECT name, age, DENSE_RANK() OVER (ORDER BY age DESC) AS dense_rank FROM users;
String Functions
- Concatenate:
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
- Substring:
SELECT SUBSTRING(name, 1, 3) AS short_name FROM users;
- Length:
SELECT LENGTH(name) AS name_length FROM users;
- Upper:
SELECT UPPER(name) AS uppercase_name FROM users;
- Lower:
SELECT LOWER(name) AS lowercase_name FROM users;
Date and Time Functions
- Current Date:
SELECT CURRENT_DATE;
- Current Time:
SELECT CURRENT_TIME;
- Current Timestamp:
SELECT CURRENT_TIMESTAMP;
- Extract Year:
SELECT EXTRACT(YEAR FROM birth_date) AS birth_year FROM users;
- Date Add:
SELECT birth_date + INTERVAL '1 year' AS next_birth_date FROM users;
User and Role Management
- Create User:
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';
- Drop User:
DROP USER 'new_user'@'localhost';
- Grant Privileges:
GRANT ALL PRIVILEGES ON my_database.* TO 'new_user'@'localhost';
- Revoke Privileges:
REVOKE ALL PRIVILEGES ON my_database.* FROM 'new_user'@'localhost';
- Create Role:
CREATE ROLE manager;
- Grant Role to User:
GRANT manager TO 'new_user'@'localhost';
Backup and Restore
- Backup Database:
BACKUP DATABASE my_database TO DISK = 'backup_file.bak';
- Restore Database:
RESTORE DATABASE my_database FROM DISK = 'backup_file.bak';
Analytical Functions
- Cume Dist:
SELECT name, age, CUME_DIST() OVER (ORDER BY age) AS cume_dist FROM users;
- Lag:
SELECT name, age, LAG(age, 1) OVER (ORDER BY age) AS previous_age FROM users;
- Lead:
SELECT name, age, LEAD(age, 1) OVER (ORDER BY age) AS next_age FROM users;
- Ntile:
SELECT name, age, NTILE(4) OVER (ORDER BY age) AS quartile FROM users;
Data Integrity and Validation
- Check Constraint:
ALTER TABLE users ADD CONSTRAINT chk_age CHECK (age >= 0);
- Default Value:
ALTER TABLE users ALTER COLUMN age SET DEFAULT 0;
- Not Null Constraint:
ALTER TABLE users ALTER COLUMN name SET NOT NULL;
Security
- Create Procedure:
CREATE PROCEDURE my_procedure() BEGIN SELECT * FROM users; END;
- Drop Procedure:
DROP PROCEDURE my_procedure;
- Create Function:
CREATE FUNCTION get_user_email(user_id INT) RETURNS VARCHAR(100) BEGIN RETURN (SELECT email FROM users WHERE id = user_id); END;
- Drop Function:
DROP FUNCTION get_user_email;
Data Export and Import
- Export to CSV:
SELECT * INTO OUTFILE '/tmp/users.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM users;
- Import from CSV:
LOAD DATA INFILE '/tmp/users.csv' INTO TABLE users FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
Error Handling
- Try-Catch:
BEGIN TRY -- SQL statements END TRY BEGIN CATCH -- Handle error END CATCH;
Miscellaneous
- Rename Column:
ALTER TABLE users RENAME COLUMN name TO full_name;
- Case Conversion:
SELECT UPPER(full_name) AS upper_name FROM users;
- Remove Duplicates:
DELETE FROM users WHERE id NOT IN (SELECT MIN(id) FROM users GROUP BY name, email);
- IF Statement:
IF (SELECT COUNT(*) FROM users) > 100 BEGIN PRINT 'More than 100 users'; END;
- Convert Data Type:
SELECT CONVERT(VARCHAR, age) AS age_str FROM users;
- Coalesce:
SELECT COALESCE(middle_name, 'N/A') AS middle_name FROM users;
- Is Null:
SELECT * FROM users WHERE middle_name IS NULL;
- Is Not Null:
SELECT * FROM users WHERE middle_name IS NOT NULL;
XML Functions (for databases supporting XML)
- Insert XML Data:
INSERT INTO user_data (data) VALUES ('<user><name>John</name><age>30</age></user>');
- Select XML Data:
SELECT data.value('(/user/name)[1]', 'VARCHAR(100)') AS name FROM user_data;
- Update XML Data:
UPDATE user_data SET data.modify('replace value of (/user/age)[1] with 31') WHERE id = 1;
Full-Text Search
- Create Full-Text Index:
CREATE FULLTEXT INDEX ft_idx ON users(name, email);
- Full-Text Search:
SELECT * FROM users WHERE MATCH(name, email) AGAINST('search_term');
Temporary Tables
- Create Temporary Table:
CREATE TEMPORARY TABLE temp_users ( id INT, name VARCHAR(100) );
- Drop Temporary Table:
DROP TEMPORARY TABLE temp_users;
Sequences
- Create Sequence:
CREATE SEQUENCE user_seq START WITH 1 INCREMENT BY 1;
- Next Value of Sequence:
SELECT NEXT VALUE FOR user_seq;
- Drop Sequence:
DROP SEQUENCE user_seq;
Mastering these 100 SQL commands will give you a strong foundation in SQL, enabling you to manage and manipulate databases effectively.