SQL Commands
Essential SQL commands and query syntax reference.
Data Query
SELECTRetrieve data from tables
SELECT * FROM users WHERE age > 18;SELECT DISTINCTRetrieve unique values
SELECT DISTINCT country FROM customers;WHEREFilter records
SELECT * FROM products WHERE price > 100;ORDER BYSort results
SELECT * FROM users ORDER BY name ASC;LIMITLimit number of results (MySQL, PostgreSQL, SQLite)
SELECT * FROM posts LIMIT 10;TOPLimit number of results (SQL Server)
SELECT TOP 10 * FROM posts;ROWNUMLimit number of results (Oracle)
SELECT * FROM posts WHERE ROWNUM <= 10;GROUP BYGroup rows by column
SELECT country, COUNT(*) FROM users GROUP BY country;HAVINGFilter grouped results
SELECT country, COUNT(*) FROM users GROUP BY country HAVING COUNT(*) > 5;Data Manipulation
INSERT INTOAdd new records
INSERT INTO users (name, email) VALUES ('John', 'john@example.com');UPDATEModify existing records
UPDATE users SET email = 'new@email.com' WHERE id = 1;DELETERemove records
DELETE FROM users WHERE id = 1;TRUNCATERemove all records from table
TRUNCATE TABLE logs;MERGEUpsert operation (SQL Server, Oracle)
MERGE INTO target USING source ON target.id = source.id WHEN MATCHED THEN UPDATE SET name = source.name;UPSERTInsert or update (SQLite 3.24+)
INSERT INTO users (id, name) VALUES (1, 'John') ON CONFLICT(id) DO UPDATE SET name = 'John';ON DUPLICATE KEY UPDATEUpsert operation (MySQL)
INSERT INTO users (id, name) VALUES (1, 'John') ON DUPLICATE KEY UPDATE name = 'John';Table Operations
CREATE TABLECreate new table
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(100));ALTER TABLEModify table structure
ALTER TABLE users ADD COLUMN age INT;DROP TABLEDelete table
DROP TABLE old_users;CREATE INDEXCreate index for performance
CREATE INDEX idx_email ON users(email);AUTO_INCREMENTAuto-incrementing column (MySQL)
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY);SERIALAuto-incrementing column (PostgreSQL)
CREATE TABLE users (id SERIAL PRIMARY KEY);IDENTITYAuto-incrementing column (SQL Server)
CREATE TABLE users (id INT IDENTITY(1,1) PRIMARY KEY);SEQUENCEAuto-incrementing sequence (Oracle)
CREATE SEQUENCE user_seq START WITH 1;Joins
INNER JOINMatch records in both tables
SELECT * FROM orders INNER JOIN customers ON orders.customer_id = customers.id;LEFT JOINAll from left table, matching from right
SELECT * FROM users LEFT JOIN orders ON users.id = orders.user_id;RIGHT JOINAll from right table, matching from left
SELECT * FROM orders RIGHT JOIN users ON orders.user_id = users.id;FULL JOINAll records from both tables
SELECT * FROM table1 FULL JOIN table2 ON table1.id = table2.id;CROSS JOINCartesian product of tables
SELECT * FROM table1 CROSS JOIN table2;Aggregate Functions
COUNT()Count number of rows
SELECT COUNT(*) FROM users;SUM()Sum of numeric values
SELECT SUM(amount) FROM orders;AVG()Average of values
SELECT AVG(price) FROM products;MIN()Minimum value
SELECT MIN(age) FROM users;MAX()Maximum value
SELECT MAX(salary) FROM employees;GROUP_CONCAT()Concatenate grouped values (MySQL)
SELECT GROUP_CONCAT(name) FROM users GROUP BY country;STRING_AGG()Concatenate grouped values (PostgreSQL, SQL Server)
SELECT STRING_AGG(name, ', ') FROM users GROUP BY country;LISTAGG()Concatenate grouped values (Oracle)
SELECT LISTAGG(name, ', ') FROM users GROUP BY country;String Functions
CONCAT()Concatenate strings
SELECT CONCAT(first_name, ' ', last_name) FROM users;LENGTH() / LEN()String length
SELECT LENGTH(name) FROM users;UPPER()Convert to uppercase
SELECT UPPER(name) FROM users;LOWER()Convert to lowercase
SELECT LOWER(email) FROM users;SUBSTRING()Extract substring
SELECT SUBSTRING(name, 1, 3) FROM users;TRIM()Remove whitespace
SELECT TRIM(name) FROM users;REPLACE()Replace substring
SELECT REPLACE(email, 'old.com', 'new.com') FROM users;Date & Time Functions
NOW() / GETDATE()Current date and time
SELECT NOW();CURDATE() / CURRENT_DATECurrent date
SELECT CURDATE();DATE_ADD()Add interval to date (MySQL)
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY);DATEADD()Add interval to date (SQL Server)
SELECT DATEADD(day, 7, GETDATE());INTERVALAdd interval to date (PostgreSQL)
SELECT NOW() + INTERVAL '7 days';DATE_FORMAT()Format date (MySQL)
SELECT DATE_FORMAT(created_at, '%Y-%m-%d') FROM users;TO_CHAR()Format date (PostgreSQL, Oracle)
SELECT TO_CHAR(created_at, 'YYYY-MM-DD') FROM users;FORMAT()Format date (SQL Server)
SELECT FORMAT(created_at, 'yyyy-MM-dd') FROM users;Transaction Control
BEGIN / START TRANSACTIONStart transaction
START TRANSACTION;COMMITSave transaction changes
COMMIT;ROLLBACKUndo transaction changes
ROLLBACK;SAVEPOINTSet savepoint in transaction
SAVEPOINT sp1;Database-Specific Features
SHOW DATABASESList databases (MySQL)
SHOW DATABASES;SHOW TABLESList tables (MySQL)
SHOW TABLES;DESCRIBEShow table structure (MySQL)
DESCRIBE users;\dtList tables (PostgreSQL)
\dt\d table_nameShow table structure (PostgreSQL)
\d usersSELECT name FROM sys.databasesList databases (SQL Server)
SELECT name FROM sys.databases;SELECT * FROM INFORMATION_SCHEMA.TABLESList tables (SQL Server, PostgreSQL, MySQL)
SELECT * FROM INFORMATION_SCHEMA.TABLES;PRAGMA table_infoShow table structure (SQLite)
PRAGMA table_info(users);SELECT * FROM USER_TABLESList tables (Oracle)
SELECT * FROM USER_TABLES;