chaitanya.dev / Tools / SQL Query Helper

SQL Query Helper

An interactive quick-reference for common SQL query patterns. Search, browse, and copy snippets instantly.

Quick Reference

Type in the box below to filter snippets, or browse by category.

SELECT Basics

Select with filtering & sorting
SELECT col1, col2
FROM   Employees
WHERE  Department = 'Engineering'
  AND  Salary > 80000
ORDER BY col1 DESC;
Distinct values
SELECT DISTINCT Department
FROM   Employees;
Top N rows (SQL Server) / LIMIT (MySQL/Postgres)
-- SQL Server
SELECT TOP 10 * FROM Orders ORDER BY OrderDate DESC;
--
-- MySQL / PostgreSQL
SELECT * FROM Orders ORDER BY OrderDate DESC LIMIT 10;

GROUP BY & Aggregates

Group with HAVING filter
SELECT   Department, COUNT(*) AS HeadCount, AVG(Salary) AS AvgSalary
FROM     Employees
GROUP BY Department
HAVING   COUNT(*) > 5
ORDER BY AvgSalary DESC;
Common aggregate functions
SELECT COUNT(*),          -- row count
       COUNT(DISTINCT col), -- unique values
       SUM(Amount),         -- total
       AVG(Amount),         -- average
       MIN(Amount),         -- smallest
       MAX(Amount)          -- largest
FROM   Orders;

JOIN Patterns

INNER JOIN — matching rows only
SELECT o.OrderId, c.CustomerName
FROM   Orders o
INNER JOIN Customers c ON o.CustomerId = c.Id;
LEFT JOIN — all left + matching right
SELECT e.Name, d.DepartmentName
FROM   Employees e
LEFT JOIN Departments d ON e.DeptId = d.Id;
FULL OUTER JOIN — all rows from both tables
SELECT a.Name, b.Name
FROM   TableA a
FULL OUTER JOIN TableB b ON a.Id = b.AId;
CROSS JOIN — cartesian product
SELECT s.Size, c.Color
FROM   Sizes s
CROSS JOIN Colors c;
Self JOIN — table joined to itself
SELECT e.Name AS Employee, m.Name AS Manager
FROM   Employees e
LEFT JOIN Employees m ON e.ManagerId = m.Id;

Subqueries & CTEs

Subquery in WHERE
SELECT Name, Salary
FROM   Employees
WHERE  Salary > (SELECT AVG(Salary) FROM Employees);
EXISTS check
SELECT c.CustomerName
FROM   Customers c
WHERE  EXISTS (
  SELECT 1 FROM Orders o WHERE o.CustomerId = c.Id
);
CTE (Common Table Expression)
WITH TopSellers AS (
  SELECT SellerId, SUM(Amount) AS Total
  FROM   Sales
  GROUP BY SellerId
  HAVING SUM(Amount) > 100000
)
SELECT e.Name, ts.Total
FROM   TopSellers ts
INNER JOIN Employees e ON ts.SellerId = e.Id;

Window Functions

ROW_NUMBER — unique row counter per partition
SELECT Name, Department, Salary,
       ROW_NUMBER() OVER (
         PARTITION BY Department ORDER BY Salary DESC
       ) AS RowNum
FROM   Employees;
RANK vs DENSE_RANK
SELECT Name, Score,
       RANK()       OVER (ORDER BY Score DESC) AS Rnk,      -- gaps after ties
       DENSE_RANK() OVER (ORDER BY Score DESC) AS DenseRnk  -- no gaps
FROM   Students;
LEAD / LAG — peek at next or previous row
SELECT OrderDate, Amount,
       LAG(Amount, 1)  OVER (ORDER BY OrderDate) AS PrevAmount,
       LEAD(Amount, 1) OVER (ORDER BY OrderDate) AS NextAmount
FROM   Orders;

INSERT / UPDATE / DELETE

INSERT — single & multi-row
-- Single row
INSERT INTO Employees (Name, Department, Salary)
VALUES ('Alice', 'Engineering', 95000);
--
-- Multiple rows
INSERT INTO Employees (Name, Department, Salary)
VALUES ('Bob', 'Marketing', 72000),
       ('Carol', 'Sales', 68000);
UPDATE with JOIN (SQL Server)
UPDATE e
SET    e.DeptName = d.Name
FROM   Employees e
INNER JOIN Departments d ON e.DeptId = d.Id
WHERE  d.IsActive = 1;
DELETE with subquery guard
DELETE FROM Logs
WHERE  CreatedAt < DATEADD(MONTH, -6, GETDATE())
  AND  Id NOT IN (SELECT LogId FROM AuditTrail);

Indexes & Performance

Create a nonclustered index with INCLUDE
CREATE NONCLUSTERED INDEX IX_Employees_Dept
ON Employees (Department)
INCLUDE (Name, Salary);
Check existing indexes on a table
SELECT i.name AS IndexName, i.type_desc,
       COL_NAME(ic.object_id, ic.column_id) AS ColumnName
FROM   sys.indexes i
INNER JOIN sys.index_columns ic
  ON i.object_id = ic.object_id AND i.index_id = ic.index_id
WHERE  i.object_id = OBJECT_ID('Employees');

Stored Procedures

Basic stored procedure with TRY/CATCH
CREATE PROCEDURE usp_GetEmployeesByDept
  @DeptName NVARCHAR(100),
  @MinSalary DECIMAL(10,2) = 0
AS
BEGIN
  SET NOCOUNT ON;
  BEGIN TRY
    SELECT Name, Salary
    FROM   Employees
    WHERE  Department = @DeptName
      AND  Salary >= @MinSalary
    ORDER BY Salary DESC;
  END TRY
  BEGIN CATCH
    SELECT ERROR_MESSAGE() AS ErrorMsg;
  END CATCH
END;