Examples use standard SQL where possible (some are vendor-specific and noted).
- SELECT
SELECT name, age FROM users;- SELECT DISTINCT
SELECT DISTINCT country FROM customers;- FROM
SELECT * FROM orders;- WHERE
SELECT * FROM users WHERE age > 18;- GROUP BY
SELECT department, COUNT(*)
FROM employees
GROUP BY department;- HAVING
SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;- ORDER BY
SELECT * FROM products ORDER BY price DESC;- LIMIT (MySQL/PostgreSQL)
SELECT * FROM users LIMIT 10;- OFFSET
SELECT * FROM users LIMIT 10 OFFSET 20;- FETCH FIRST (ANSI SQL)
SELECT * FROM users FETCH FIRST 10 ROWS ONLY;- INSERT
INSERT INTO users (name, age) VALUES ('John', 25);- INSERT INTO SELECT
INSERT INTO archive_users (name, age)
SELECT name, age FROM users WHERE active = 0;- UPDATE
UPDATE users SET age = 26 WHERE name = 'John';- DELETE
DELETE FROM users WHERE age < 18;- TRUNCATE
TRUNCATE TABLE logs;- MERGE (SQL Server/Oracle)
MERGE INTO target t
USING source s
ON (t.id = s.id)
WHEN MATCHED THEN UPDATE SET t.name = s.name
WHEN NOT MATCHED THEN INSERT (id, name) VALUES (s.id, s.name);- REPLACE (MySQL)
REPLACE INTO users (id, name) VALUES (1, 'Alice');- UPSERT (PostgreSQL)
INSERT INTO users (id, name)
VALUES (1, 'Alice')
ON CONFLICT (id)
DO UPDATE SET name = EXCLUDED.name;- CALL
CALL GetUserStats();- EXPLAIN
EXPLAIN SELECT * FROM users WHERE id = 1;- CREATE DATABASE
CREATE DATABASE company_db;- DROP DATABASE
DROP DATABASE company_db;- ALTER DATABASE
ALTER DATABASE company_db SET READ_ONLY = 1;- CREATE TABLE
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT
);- DROP TABLE
DROP TABLE users;- ALTER TABLE
ALTER TABLE users ADD email VARCHAR(100);- RENAME TABLE (MySQL)
RENAME TABLE users TO customers;- CREATE INDEX
CREATE INDEX idx_name ON users(name);- DROP INDEX
DROP INDEX idx_name ON users;- CREATE VIEW
CREATE VIEW active_users AS
SELECT * FROM users WHERE active = 1;- DROP VIEW
DROP VIEW active_users;- CREATE SEQUENCE
CREATE SEQUENCE order_seq START WITH 1 INCREMENT BY 1;- DROP SEQUENCE
DROP SEQUENCE order_seq;- CREATE TRIGGER
CREATE TRIGGER before_insert_users
BEFORE INSERT ON users
FOR EACH ROW
SET NEW.created_at = NOW();- DROP TRIGGER
DROP TRIGGER before_insert_users;- CREATE FUNCTION
CREATE FUNCTION get_age(birthdate DATE)
RETURNS INT
RETURN YEAR(CURDATE()) - YEAR(birthdate);- DROP FUNCTION
DROP FUNCTION get_age;- CREATE PROCEDURE
CREATE PROCEDURE GetUsers()
BEGIN
SELECT * FROM users;
END;- DROP PROCEDURE
DROP PROCEDURE GetUsers;- COMMENT
COMMENT ON TABLE users IS 'Stores user information';- PRIMARY KEY
id INT PRIMARY KEY- FOREIGN KEY
FOREIGN KEY (user_id) REFERENCES users(id)- UNIQUE
email VARCHAR(100) UNIQUE- NOT NULL
name VARCHAR(100) NOT NULL- CHECK
age INT CHECK (age >= 18)- DEFAULT
status VARCHAR(20) DEFAULT 'active'- AUTO_INCREMENT (MySQL)
id INT AUTO_INCREMENT PRIMARY KEY- IDENTITY (SQL Server)
id INT IDENTITY(1,1) PRIMARY KEY- ON DELETE CASCADE
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE- ON UPDATE CASCADE
FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADEBelow are concise syntax examples.
- INNER JOIN
SELECT * FROM orders
INNER JOIN users ON orders.user_id = users.id;- LEFT JOIN
SELECT * FROM users
LEFT JOIN orders ON users.id = orders.user_id;- RIGHT JOIN
SELECT * FROM users
RIGHT JOIN orders ON users.id = orders.user_id;- FULL JOIN
SELECT * FROM users
FULL JOIN orders ON users.id = orders.user_id;- CROSS JOIN
SELECT * FROM users CROSS JOIN roles;- COUNT()
SELECT COUNT(*) FROM users;- SUM()
SELECT SUM(price) FROM orders;- AVG()
SELECT AVG(price) FROM orders;- MIN()
SELECT MIN(price) FROM products;- MAX()
SELECT MAX(price) FROM products;- CONCAT()
SELECT CONCAT(first_name, ' ', last_name) FROM users;- SUBSTRING()
SELECT SUBSTRING(name, 1, 3) FROM users;- UPPER()
SELECT UPPER(name) FROM users;- LOWER()
SELECT LOWER(name) FROM users;- TRIM()
SELECT TRIM(name) FROM users;- NOW()
SELECT NOW();- CURRENT_DATE
SELECT CURRENT_DATE;- DATE_ADD()
SELECT DATE_ADD(NOW(), INTERVAL 7 DAY);- DATEDIFF()
SELECT DATEDIFF('2025-12-31', '2025-01-01');- EXTRACT()
SELECT EXTRACT(YEAR FROM NOW());- BEGIN TRANSACTION
BEGIN TRANSACTION;- COMMIT
COMMIT;- ROLLBACK
ROLLBACK;- SAVEPOINT
SAVEPOINT before_update;- SET TRANSACTION
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;- GRANT
GRANT SELECT ON users TO user1;- REVOKE
REVOKE SELECT ON users FROM user1;- CREATE USER
CREATE USER user1 IDENTIFIED BY 'password';- DROP USER
DROP USER user1;- ALTER USER
ALTER USER user1 IDENTIFIED BY 'newpassword';- CURRENT_TIME
SELECT CURRENT_TIME;- YEAR()
SELECT YEAR(order_date) FROM orders;- MONTH()
SELECT MONTH(order_date) FROM orders;- DAY()
SELECT DAY(order_date) FROM orders;- DATE_SUB()
SELECT DATE_SUB(NOW(), INTERVAL 30 DAY);- TIME()
SELECT TIME(NOW());- HOUR()
SELECT HOUR(order_time) FROM orders;- MINUTE()
SELECT MINUTE(order_time) FROM orders;- SECOND()
SELECT SECOND(order_time) FROM orders;- CURRENT_TIMESTAMP
SELECT CURRENT_TIMESTAMP;- SET AUTOCOMMIT (MySQL)
SET AUTOCOMMIT = 0;- LOCK TABLE
LOCK TABLE users WRITE;- UNLOCK TABLES
UNLOCK TABLES;- SET CONSTRAINTS (PostgreSQL)
SET CONSTRAINTS ALL DEFERRED;- ROLLBACK TO SAVEPOINT
ROLLBACK TO SAVEPOINT before_update;- SHOW TABLES (MySQL)
SHOW TABLES;- SHOW DATABASES (MySQL)
SHOW DATABASES;- DESCRIBE (MySQL)
DESCRIBE users;- ANALYZE TABLE
ANALYZE TABLE users;- VACUUM (PostgreSQL)
VACUUM;