Published on

SQL Queries for Data Analysis and Backend

views·3 mins read

Data Retrieval

Select Unique Records

SELECT DISTINCT category FROM products;

Join Multiple Tables

SELECT o.id, c.name, p.title
FROM orders o
JOIN customers c ON o.customer_id = c.id
JOIN products p ON o.product_id = p.id;

Group By and Having

SELECT category, COUNT(*) as total
FROM products
GROUP BY category
HAVING COUNT(*) > 5;

Data Modification

Update with Join

UPDATE products
SET price = price * 1.1
FROM categories
WHERE products.category_id = categories.id
AND categories.name = 'Electronics';

Delete Duplicates

DELETE FROM users
WHERE id NOT IN (
  SELECT MIN(id)
  FROM users
  GROUP BY email
);

Advanced Queries

Find Second Highest Salary

SELECT MAX(salary)
FROM employees
WHERE salary < (SELECT MAX(salary) FROM employees);

Window Functions (Rank)

SELECT name, department, salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) as rank
FROM employees;

Case Statements

SELECT name,
CASE
  WHEN score >= 90 THEN 'A'
  WHEN score >= 80 THEN 'B'
  ELSE 'C'
END as grade
FROM students;

Coalesce (Null Handling)

SELECT name, COALESCE(phone, 'N/A') as contact
FROM users;

Recursive CTE (Hierarchy)

WITH RECURSIVE subordinates AS (
  SELECT id, name, manager_id
  FROM employees WHERE name = 'Alice'
  UNION ALL
  SELECT e.id, e.name, e.manager_id
  FROM employees e
  JOIN subordinates s ON s.id = e.manager_id
)
SELECT * FROM subordinates;

Database Management

Create Index

CREATE INDEX idx_user_email ON users(email);

Add Column with Default

ALTER TABLE users ADD COLUMN status VARCHAR(20) DEFAULT 'active';

Copy Table Structure

CREATE TABLE users_backup AS SELECT * FROM users WHERE 1=0;

Find Table Constraints

SELECT * FROM information_schema.table_constraints
WHERE table_name = 'users';

Check Database Size

SELECT pg_size_pretty(pg_database_size('my_database'));