Advanced SQL Cheat Sheet 1736497122
Advanced SQL Cheat Sheet 1736497122
CHEAT SHEET
Subqueries: SQL queries embedded within other queries. They can be used in
SELECT, WHERE, and HAVING clauses.
Query:
SELECT name,
(SELECT MAX(salary)
FROM employees) AS max_salary
FROM employees;
Correlated Subqueries: A subquery that depends on the outer query for its values.
Query:
Query:
SELECT name
FROM employees
WHERE department_id = ( SELECT department_id
FROM departments
WHERE name = 'HR' );
Query:
SELECT employee_id, name,
( SELECT COUNT(*)
FROM orders
WHERE employee_id = e.employee_id) AS order_count
FROM employees e;
Common Table Expressions (CTEs):
CTEs allow temporary result sets to be referenced within the execution scope of a SELECT,
INSERT, UPDATE, or DELETE statement. Useful for organizing complex queries.
Query:
WITH department_salary AS (
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
)
SELECT department_id, avg_salary
FROM department_salary;
Recursive CTEs: Useful for hierarchical or tree-like data structures (e.g., org charts, file
systems).
Query:
Query:
SELECT name, salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM employees;
RANK() and DENSE_RANK(): Provide ranking numbers, handling ties in different ways.
Query:
SELECT name, salary,
RANK() OVER (ORDER BY salary DESC) AS rank
FROM employees;
Query:
SELECT name, salary,
NTILE(4) OVER (ORDER BY salary DESC) AS quartile
FROM employees;
LEAD() and LAG(): Allow access to subsequent and previous rows without using self-joins.
Query:
SELECT name, salary,
LAG(salary, 1) OVER (ORDER BY salary DESC) AS previous_salary,
LEAD(salary, 1) OVER (ORDER BY salary DESC) AS next_salary
FROM employees;
Joins and Advanced Join Types:
INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN: Basic joins.
Query:
Query:
SELF JOIN: A join where a table is joined to itself, typically used for hierarchical data.
Query:
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.employee_id;
Query:
SELECT e.name, d.name
FROM employees e
CROSS JOIN departments d;
NATURAL JOIN: Automatically joins tables based on columns with the same name.
Query:
SELECT name, department_name
FROM employees
NATURAL JOIN departments;
Indexing and Query Optimization:
Query:
CREATE INDEX idx_employee_name
ON employees (name);
Query:
CREATE INDEX idx_employee_salary_dept
ON employees (salary, department_id);
EXPLAIN: Used to analyze query execution plans, identify bottlenecks, and optimize queries.
Query:
EXPLAIN SELECT name
FROM employees
WHERE salary > 50000;
Query Optimization Techniques: Avoiding SELECT *, using joins efficiently, and minimizing
Transactions and Concurrency Control:
Query:
BEGIN TRANSACTION;
-- Your SQL queries
COMMIT; -- Or ROLLBACK;
Locking Mechanisms: Pessimistic locking (e.g., SELECT FOR UPDATE) vs. Optimistic locking.
Query:
SELECT *
FROM employees
WHERE employee_id = 1 FOR UPDATE;
Triggers:
Query:
Query:
CREATE TRIGGER before_employee_insert
BEFORE INSERT ON employees
FOR EACH ROW
SET NEW.created_at = NOW();
Thank You