β
Top 10 SQL Interview Questions π₯
1οΈβ£ What is a table and a field in SQL?
β¦ Table: Organized data in rows and columns
β¦ Field: A column representing data attribute
2οΈβ£ Describe the SELECT statement.
β¦ Fetch data from one or more tables
β¦ Use WHERE to filter, ORDER BY to sort
3οΈβ£ Explain SQL constraints.
β¦ Rules for data integrity: PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK
4οΈβ£ What is normalization?
β¦ Process to reduce data redundancy & improve integrity (1NF, 2NF, 3NFβ¦)
5οΈβ£ Explain different JOIN types with examples.
β¦ INNER, LEFT, RIGHT, FULL JOIN: Various ways to combine tables based on matching rows
6οΈβ£ What is a subquery? Give example.
β¦ Query inside another query:
7οΈβ£ How to optimize slow queries?
β¦ Use indexes, avoid SELECT *, simplify joins, reduce nested queries
8οΈβ£ What are aggregate functions? Examples?
β¦ Perform calculations on sets: SUM(), COUNT(), AVG(), MIN(), MAX()
9οΈβ£ What is SQL injection? How to prevent it?
β¦ Security risk manipulating queries
β¦ Prevent: parameterized queries, input validation
π How to find the Nth highest salary without TOP/LIMIT?
π₯ Double Tap β€οΈ For More!
1οΈβ£ What is a table and a field in SQL?
β¦ Table: Organized data in rows and columns
β¦ Field: A column representing data attribute
2οΈβ£ Describe the SELECT statement.
β¦ Fetch data from one or more tables
β¦ Use WHERE to filter, ORDER BY to sort
3οΈβ£ Explain SQL constraints.
β¦ Rules for data integrity: PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK
4οΈβ£ What is normalization?
β¦ Process to reduce data redundancy & improve integrity (1NF, 2NF, 3NFβ¦)
5οΈβ£ Explain different JOIN types with examples.
β¦ INNER, LEFT, RIGHT, FULL JOIN: Various ways to combine tables based on matching rows
6οΈβ£ What is a subquery? Give example.
β¦ Query inside another query:
SELECT name FROM employees
WHERE department_id = (SELECT id FROM departments WHERE name='Sales');
7οΈβ£ How to optimize slow queries?
β¦ Use indexes, avoid SELECT *, simplify joins, reduce nested queries
8οΈβ£ What are aggregate functions? Examples?
β¦ Perform calculations on sets: SUM(), COUNT(), AVG(), MIN(), MAX()
9οΈβ£ What is SQL injection? How to prevent it?
β¦ Security risk manipulating queries
β¦ Prevent: parameterized queries, input validation
π How to find the Nth highest salary without TOP/LIMIT?
SELECT DISTINCT salary FROM employees e1
WHERE N-1 = (SELECT COUNT(DISTINCT salary) FROM employees e2 WHERE e2.salary > e1.salary);
π₯ Double Tap β€οΈ For More!
β€14
SQL From Basic to Advanced level
Basic SQL is ONLY 7 commands:
- SELECT
- FROM
- WHERE (also use SQL comparison operators such as =, <=, >=, <> etc.)
- ORDER BY
- Aggregate functions such as SUM, AVERAGE, COUNT etc.
- GROUP BY
- CREATE, INSERT, DELETE, etc.
You can do all this in just one morning.
Once you know these, take the next step and learn commands like:
- LEFT JOIN
- INNER JOIN
- LIKE
- IN
- CASE WHEN
- HAVING (undertstand how it's different from GROUP BY)
- UNION ALL
This should take another day.
Once both basic and intermediate are done, start learning more advanced SQL concepts such as:
- Subqueries (when to use subqueries vs CTE?)
- CTEs (WITH AS)
- Stored Procedures
- Triggers
- Window functions (LEAD, LAG, PARTITION BY, RANK, DENSE RANK)
These can be done in a couple of days.
Learning these concepts is NOT hard at all
- what takes time is practice and knowing what command to use when. How do you master that?
- First, create a basic SQL project
- Then, work on an intermediate SQL project (search online) -
Lastly, create something advanced on SQL with many CTEs, subqueries, stored procedures and triggers etc.
This is ALL you need to become a badass in SQL, and trust me when I say this, it is not rocket science. It's just logic.
Remember that practice is the key here. It will be more clear and perfect with the continous practice
Best telegram channel to learn SQL: https://t.iss.one/sqlanalyst
Data Analyst Jobsπ
https://t.iss.one/jobs_SQL
Join @free4unow_backup for more free resources.
Like this post if it helps πβ€οΈ
ENJOY LEARNING ππ
Basic SQL is ONLY 7 commands:
- SELECT
- FROM
- WHERE (also use SQL comparison operators such as =, <=, >=, <> etc.)
- ORDER BY
- Aggregate functions such as SUM, AVERAGE, COUNT etc.
- GROUP BY
- CREATE, INSERT, DELETE, etc.
You can do all this in just one morning.
Once you know these, take the next step and learn commands like:
- LEFT JOIN
- INNER JOIN
- LIKE
- IN
- CASE WHEN
- HAVING (undertstand how it's different from GROUP BY)
- UNION ALL
This should take another day.
Once both basic and intermediate are done, start learning more advanced SQL concepts such as:
- Subqueries (when to use subqueries vs CTE?)
- CTEs (WITH AS)
- Stored Procedures
- Triggers
- Window functions (LEAD, LAG, PARTITION BY, RANK, DENSE RANK)
These can be done in a couple of days.
Learning these concepts is NOT hard at all
- what takes time is practice and knowing what command to use when. How do you master that?
- First, create a basic SQL project
- Then, work on an intermediate SQL project (search online) -
Lastly, create something advanced on SQL with many CTEs, subqueries, stored procedures and triggers etc.
This is ALL you need to become a badass in SQL, and trust me when I say this, it is not rocket science. It's just logic.
Remember that practice is the key here. It will be more clear and perfect with the continous practice
Best telegram channel to learn SQL: https://t.iss.one/sqlanalyst
Data Analyst Jobsπ
https://t.iss.one/jobs_SQL
Join @free4unow_backup for more free resources.
Like this post if it helps πβ€οΈ
ENJOY LEARNING ππ
β€6
β
Advanced SQL Interview Questions with Answers πΌπ§
1οΈβ£ What are Window Functions in SQL?
Answer: They perform calculations across rows related to the current row without collapsing the result set.
Example:
2οΈβ£ Difference between RANK(), DENSE_RANK(), and ROW_NUMBER()?
β RANK(): skips numbers for ties
β DENSE_RANK(): doesn't skip numbers
β ROW_NUMBER(): gives unique numbers to each row
Use: Sorting, pagination, leaderboard design
3οΈβ£ What is the use of COALESCE()?
Answer: Returns the first non-null value in a list.
Example:
4οΈβ£ How does CASE work in SQL?
Answer: It's used for conditional logic.
Example:
5οΈβ£ Explain CTE (Common Table Expression).
Answer: Temporary result set for readable and reusable queries.
Example:
6οΈβ£ What is the difference between EXISTS and IN?
β EXISTS: stops after finding the first match (more efficient)
β IN: compares a list of values
Use EXISTS for subqueries when checking existence
7οΈβ£ What are Indexes in SQL?
Answer: They improve read performance but slow down write operations.
β Types: Single-column, Composite, Unique
8οΈβ£ How to optimize SQL queries?
β Use proper indexes
β Avoid SELECT *
β Use WHERE filters early
β Analyze query plan
π¬ Double Tap β€οΈ For More!
1οΈβ£ What are Window Functions in SQL?
Answer: They perform calculations across rows related to the current row without collapsing the result set.
Example:
SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank FROM employees;
2οΈβ£ Difference between RANK(), DENSE_RANK(), and ROW_NUMBER()?
β RANK(): skips numbers for ties
β DENSE_RANK(): doesn't skip numbers
β ROW_NUMBER(): gives unique numbers to each row
Use: Sorting, pagination, leaderboard design
3οΈβ£ What is the use of COALESCE()?
Answer: Returns the first non-null value in a list.
Example:
SELECT name, COALESCE(nickname, 'No Nick') FROM users;
4οΈβ£ How does CASE work in SQL?
Answer: It's used for conditional logic.
Example:
SELECT name,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'C'
END AS grade
FROM students;
5οΈβ£ Explain CTE (Common Table Expression).
Answer: Temporary result set for readable and reusable queries.
Example:
WITH TopSales AS (
SELECT emp_id, SUM(sales) AS total_sales
FROM sales
GROUP BY emp_id
)
SELECT * FROM TopSales WHERE total_sales > 5000;
6οΈβ£ What is the difference between EXISTS and IN?
β EXISTS: stops after finding the first match (more efficient)
β IN: compares a list of values
Use EXISTS for subqueries when checking existence
7οΈβ£ What are Indexes in SQL?
Answer: They improve read performance but slow down write operations.
β Types: Single-column, Composite, Unique
8οΈβ£ How to optimize SQL queries?
β Use proper indexes
β Avoid SELECT *
β Use WHERE filters early
β Analyze query plan
π¬ Double Tap β€οΈ For More!
β€15π2
β
Advanced SQL Practice Questions with Answers π§ π
1οΈβ£ Get the second highest salary from the employees table.
2οΈβ£ List employees who earn more than the average salary.
3οΈβ£ Show department-wise highest paid employee.
4οΈβ£ Display total sales made by each employee in 2023.
5οΈβ£ Retrieve products with price above average in their category.
6οΈβ£ Identify duplicate emails in the users table.
7οΈβ£ Rank customers based on total purchase amount.
π¬ Double Tap β€οΈ For More!
1οΈβ£ Get the second highest salary from the employees table.
SELECT MAX(salary)
FROM employees
WHERE salary < (SELECT MAX(salary) FROM employees);
2οΈβ£ List employees who earn more than the average salary.
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
3οΈβ£ Show department-wise highest paid employee.
SELECT department, name, salary
FROM (
SELECT *,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rnk
FROM employees
) AS ranked
WHERE rnk = 1;
4οΈβ£ Display total sales made by each employee in 2023.
SELECT emp_id, SUM(amount) AS total_sales
FROM sales
WHERE YEAR(sale_date) = 2023
GROUP BY emp_id;
5οΈβ£ Retrieve products with price above average in their category.
SELECT p.name, p.category, p.price
FROM products p
WHERE price > (
SELECT AVG(price)
FROM products
WHERE category = p.category
);
6οΈβ£ Identify duplicate emails in the users table.
SELECT email, COUNT(*)
FROM users
GROUP BY email
HAVING COUNT(*) > 1;
7οΈβ£ Rank customers based on total purchase amount.
SELECT customer_id,
SUM(amount) AS total_spent,
RANK() OVER (ORDER BY SUM(amount) DESC) AS rank
FROM orders
GROUP BY customer_id;
π¬ Double Tap β€οΈ For More!
β€23π1
ππ»ππ²πΏππΆπ²ππ²πΏ: You have 2 minutes to solve this SQL query.
Retrieve the department name and the highest salary in each department from the employees table, but only for departments where the highest salary is greater than $70,000.
π π²: Challenge accepted!
SELECT department, MAX(salary) AS highest_salary
FROM employees
GROUP BY department
HAVING MAX(salary) > 70000;
I used GROUP BY to group employees by department, MAX() to get the highest salary, and HAVING to filter the result based on the condition that the highest salary exceeds $70,000. This solution effectively shows my understanding of aggregation functions and how to apply conditions on the result of those aggregations.
π§πΆπ½ π³πΌπΏ π¦π€π ππΌπ― π¦π²π²πΈπ²πΏπ:
It's not about writing complex queries; it's about writing clean, efficient, and scalable code. Focus on mastering subqueries, joins, and aggregation functions to stand out!
React with β€οΈ for more
Retrieve the department name and the highest salary in each department from the employees table, but only for departments where the highest salary is greater than $70,000.
π π²: Challenge accepted!
SELECT department, MAX(salary) AS highest_salary
FROM employees
GROUP BY department
HAVING MAX(salary) > 70000;
I used GROUP BY to group employees by department, MAX() to get the highest salary, and HAVING to filter the result based on the condition that the highest salary exceeds $70,000. This solution effectively shows my understanding of aggregation functions and how to apply conditions on the result of those aggregations.
π§πΆπ½ π³πΌπΏ π¦π€π ππΌπ― π¦π²π²πΈπ²πΏπ:
It's not about writing complex queries; it's about writing clean, efficient, and scalable code. Focus on mastering subqueries, joins, and aggregation functions to stand out!
React with β€οΈ for more
β€14π2π1π€1
ππ»ππ²πΏππΆπ²ππ²πΏ: Write a query to get the names of all employees along with their department names. If an employee is not assigned to a department, still include them.
π π²: Hereβs my SQL solution using a LEFT JOIN:
β Why it works:
β
β It joins the
β Clean, readable, and interview-ready!
π Bonus Insight:
Always understand the difference between
π¬ Tap β€οΈ if this helped you!
π π²: Hereβs my SQL solution using a LEFT JOIN:
SELECT e.name AS employee_name, d.name AS department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;
β Why it works:
β
LEFT JOIN ensures all employees are shown, even those without departments. β It joins the
employees and departments tables on department_id. β Clean, readable, and interview-ready!
π Bonus Insight:
Always understand the difference between
INNER JOIN, LEFT JOIN, and RIGHT JOIN. In real-world databases, missing data is common β use joins wisely to handle it.π¬ Tap β€οΈ if this helped you!
β€10
β
SQL Mini-Challenge! ππ»
ππ»ππ²πΏππΆπ²ππ²πΏ: List all employees and their managers. If an employee doesnβt have a manager, still include them.
π π²: Using a self-join with LEFT JOIN:
β Why it works:
β LEFT JOIN ensures employees without managers are still included.
β Self-join allows referencing the same table for managers.
β Simple and clean solution for interviews.
π Bonus Tip:
Always consider null values in joins; LEFT JOIN helps preserve the main table rows even if the related data is missing.
π¬ Tap β€οΈ if this helped you!
ππ»ππ²πΏππΆπ²ππ²πΏ: List all employees and their managers. If an employee doesnβt have a manager, still include them.
π π²: Using a self-join with LEFT JOIN:
SELECT e.name AS employee_name, m.name AS manager_name
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;
β Why it works:
β LEFT JOIN ensures employees without managers are still included.
β Self-join allows referencing the same table for managers.
β Simple and clean solution for interviews.
π Bonus Tip:
Always consider null values in joins; LEFT JOIN helps preserve the main table rows even if the related data is missing.
π¬ Tap β€οΈ if this helped you!
β€18
β
SQL Scenario-Based Question & Answer π»π
Scenario:
You have two tables:
Employees
Departments
Question:
Write a query to display all employees with their department name. If an employee doesn't belong to any department, show "Not Assigned" instead.
Answer:
Explanation:
β¦ LEFT JOIN ensures all employees are included, even those without a matching dept_id (like Mary).
β¦ COALESCE picks the first non-NULL value: dept_name if available, otherwise "Not Assigned".
β¦ This handles NULLs gracefully while keeping the full employee list intact.
Result:
π¬ Double Tap β€οΈ if this helped you!
Scenario:
You have two tables:
Employees
| emp_id | name | dept_id | salary |
| ------ | ----- | ------- | ------ |
| 1 | John | 10 | 5000 |
| 2 | Alice | 20 | 6000 |
| 3 | Bob | 10 | 4500 |
| 4 | Mary | NULL | 7000 |
Departments
| dept_id | dept_name |
| ------- | --------- |
| 10 | Sales |
| 20 | Marketing |
| 30 | HR |
Question:
Write a query to display all employees with their department name. If an employee doesn't belong to any department, show "Not Assigned" instead.
Answer:
SELECT e.name AS employee_name,
COALESCE(d.dept_name, 'Not Assigned') AS department_name
FROM Employees e
LEFT JOIN Departments d
ON e.dept_id = d.dept_id;
Explanation:
β¦ LEFT JOIN ensures all employees are included, even those without a matching dept_id (like Mary).
β¦ COALESCE picks the first non-NULL value: dept_name if available, otherwise "Not Assigned".
β¦ This handles NULLs gracefully while keeping the full employee list intact.
Result:
| employee_name | department_name |
| ------------- | --------------- |
| John | Sales |
| Alice | Marketing |
| Bob | Sales |
| Mary | Not Assigned |
π¬ Double Tap β€οΈ if this helped you!
β€24π2
β
SQL Interview Challenge! π§ π»
ππ»ππ²πΏππΆπ²ππ²πΏ: Retrieve all employees along with their department names. Only include employees who belong to a department.
π π²: Using INNER JOIN:
β Why it works:
β INNER JOIN returns only rows with matching values in both tables based on the ON condition, excluding employees without a dept_id match (or vice versa).
β This ensures we get complete, valid pairsβperfect for reports focusing on assigned staff, and it's efficient for large datasets in 2025's analytics tools.
π¬ Tap β€οΈ if this helped you!
ππ»ππ²πΏππΆπ²ππ²πΏ: Retrieve all employees along with their department names. Only include employees who belong to a department.
π π²: Using INNER JOIN:
SELECT e.name AS employee_name,
d.dept_name AS department_name
FROM employees e
INNER JOIN departments d
ON e.dept_id = d.dept_id;
β Why it works:
β INNER JOIN returns only rows with matching values in both tables based on the ON condition, excluding employees without a dept_id match (or vice versa).
β This ensures we get complete, valid pairsβperfect for reports focusing on assigned staff, and it's efficient for large datasets in 2025's analytics tools.
π¬ Tap β€οΈ if this helped you!
β€6
β
SQL Interview Challenge! ππ§
ππ»ππ²πΏππΆπ²ππ²πΏ: Find the average salary of employees in each department.
π π²: Using GROUP BY and AVG():
SELECT d.dept_name,
AVG(e.salary) AS avg_salary
FROM employees e
INNER JOIN departments d
ON e.dept_id = d.dept_id
GROUP BY d.dept_name;
β Why it works:
β AVG() computes the mean salary per group, handling decimals nicely.
β GROUP BY clusters rows by department name for department-level aggregates.
β INNER JOIN links employee salaries to department names only for matching recordsβadd ORDER BY avg_salary DESC for ranked insights!
π¬ Tap β€οΈ for more!
ππ»ππ²πΏππΆπ²ππ²πΏ: Find the average salary of employees in each department.
π π²: Using GROUP BY and AVG():
SELECT d.dept_name,
AVG(e.salary) AS avg_salary
FROM employees e
INNER JOIN departments d
ON e.dept_id = d.dept_id
GROUP BY d.dept_name;
β Why it works:
β AVG() computes the mean salary per group, handling decimals nicely.
β GROUP BY clusters rows by department name for department-level aggregates.
β INNER JOIN links employee salaries to department names only for matching recordsβadd ORDER BY avg_salary DESC for ranked insights!
π¬ Tap β€οΈ for more!
β€9π1
β
Interviewer: Count the number of employees in each department. π
Me: Using GROUP BY and COUNT():
β Why it works:
β COUNT() tallies employees per department by counting non-null IDs.
β GROUP BY segments the results by department name for aggregated output.
β INNER JOIN links employees to departments only where IDs match, avoiding nullsβadd ORDER BY employee_count DESC to sort by largest teams first!
π¬ Tap β€οΈ if you're learning something new!
Me: Using GROUP BY and COUNT():
SELECT d.dept_name,
COUNT(e.id) AS employee_count
FROM employees e
INNER JOIN departments d
ON e.dept_id = d.dept_id
GROUP BY d.dept_name;
β Why it works:
β COUNT() tallies employees per department by counting non-null IDs.
β GROUP BY segments the results by department name for aggregated output.
β INNER JOIN links employees to departments only where IDs match, avoiding nullsβadd ORDER BY employee_count DESC to sort by largest teams first!
π¬ Tap β€οΈ if you're learning something new!
β€7
β
10 Most Useful SQL Interview Queries (with Examples) πΌ
1οΈβ£ Find the second highest salary:
2οΈβ£ Count employees in each department:
3οΈβ£ Fetch duplicate emails:
4οΈβ£ Join orders with customer names:
5οΈβ£ Get top 3 highest salaries:
6οΈβ£ Retrieve latest 5 logins:
7οΈβ£ Employees with no manager:
8οΈβ£ Search names starting with βSβ:
9οΈβ£ Total sales per month:
π Delete inactive users:
β Tip: Master subqueries, joins, groupings & filters β they show up in nearly every interview!
π¬ Tap β€οΈ for more!
1οΈβ£ Find the second highest salary:
SELECT MAX(salary)
FROM employees
WHERE salary < (SELECT MAX(salary) FROM employees);
2οΈβ£ Count employees in each department:
SELECT department, COUNT(*)
FROM employees
GROUP BY department;
3οΈβ£ Fetch duplicate emails:
SELECT email, COUNT(*)
FROM users
GROUP BY email
HAVING COUNT(*) > 1;
4οΈβ£ Join orders with customer names:
SELECT c.name, o.order_date
FROM customers c
JOIN orders o ON c.id = o.customer_id;
5οΈβ£ Get top 3 highest salaries:
SELECT DISTINCT salary
FROM employees
ORDER BY salary DESC
LIMIT 3;
6οΈβ£ Retrieve latest 5 logins:
SELECT * FROM logins
ORDER BY login_time DESC
LIMIT 5;
7οΈβ£ Employees with no manager:
SELECT name
FROM employees
WHERE manager_id IS NULL;
8οΈβ£ Search names starting with βSβ:
SELECT * FROM employees
WHERE name LIKE 'S%';
9οΈβ£ Total sales per month:
SELECT MONTH(order_date) AS month, SUM(amount)
FROM sales
GROUP BY MONTH(order_date);
π Delete inactive users:
DELETE FROM users
WHERE last_active < '2023-01-01';
β Tip: Master subqueries, joins, groupings & filters β they show up in nearly every interview!
π¬ Tap β€οΈ for more!
β€33π1
β
Advanced SQL Queries ποΈπ‘
1οΈβ£ GROUP BY & HAVING
β¦ GROUP BY groups rows sharing a value to perform aggregate calculations.
β¦ HAVING filters groups based on conditions (like WHERE but for groups).
Example:
Find total sales per product with sales > 1000:
SELECT product_id, SUM(sales) AS total_sales
FROM sales_data
GROUP BY product_id
HAVING SUM(sales) > 1000;
2οΈβ£ Subqueries
β¦ A query inside another query. Useful for filtering or calculating values dynamically.
Example:
Get customers who placed orders over 500:
SELECT customer_id, order_id, amount
FROM orders
WHERE amount > (SELECT AVG(amount) FROM orders);
3οΈβ£ Aggregate Functions
β¦ Perform calculations on sets of rows:
β¦ COUNT() counts rows
β¦ SUM() adds numeric values
β¦ AVG() calculates average
β¦ MAX() and MIN() find extremes
Example:
Find average order amount per customer:
SELECT customer_id, AVG(amount) AS avg_order
FROM orders
GROUP BY customer_id;
4οΈβ£ Complex Joins with Filtering
β¦ Join tables and filter results in one query.
Example:
List customers with orders over100:
SELECT c.customer_name, o.order_id, o.amount
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
WHERE o.amount > 100;
π SQL Roadmap: https://whatsapp.com/channel/0029VanC5rODzgT6TiTGoa1v/1506
π¬ Double Tap β€οΈ For More!
1οΈβ£ GROUP BY & HAVING
β¦ GROUP BY groups rows sharing a value to perform aggregate calculations.
β¦ HAVING filters groups based on conditions (like WHERE but for groups).
Example:
Find total sales per product with sales > 1000:
SELECT product_id, SUM(sales) AS total_sales
FROM sales_data
GROUP BY product_id
HAVING SUM(sales) > 1000;
2οΈβ£ Subqueries
β¦ A query inside another query. Useful for filtering or calculating values dynamically.
Example:
Get customers who placed orders over 500:
SELECT customer_id, order_id, amount
FROM orders
WHERE amount > (SELECT AVG(amount) FROM orders);
3οΈβ£ Aggregate Functions
β¦ Perform calculations on sets of rows:
β¦ COUNT() counts rows
β¦ SUM() adds numeric values
β¦ AVG() calculates average
β¦ MAX() and MIN() find extremes
Example:
Find average order amount per customer:
SELECT customer_id, AVG(amount) AS avg_order
FROM orders
GROUP BY customer_id;
4οΈβ£ Complex Joins with Filtering
β¦ Join tables and filter results in one query.
Example:
List customers with orders over100:
SELECT c.customer_name, o.order_id, o.amount
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
WHERE o.amount > 100;
π SQL Roadmap: https://whatsapp.com/channel/0029VanC5rODzgT6TiTGoa1v/1506
π¬ Double Tap β€οΈ For More!
β€7π1
Data Analytics isn't rocket science. It's just a different language.
Here's a beginner's guide to the world of data analytics:
1) Understand the fundamentals:
- Mathematics
- Statistics
- Technology
2) Learn the tools:
- SQL
- Python
- Excel (yes, it's still relevant!)
3) Understand the data:
- What do you want to measure?
- How are you measuring it?
- What metrics are important to you?
4) Data Visualization:
- A picture is worth a thousand words
5) Practice:
- There's no better way to learn than to do it yourself.
Data Analytics is a valuable skill that can help you make better decisions, understand your audience better, and ultimately grow your business.
It's never too late to start learning!
Here's a beginner's guide to the world of data analytics:
1) Understand the fundamentals:
- Mathematics
- Statistics
- Technology
2) Learn the tools:
- SQL
- Python
- Excel (yes, it's still relevant!)
3) Understand the data:
- What do you want to measure?
- How are you measuring it?
- What metrics are important to you?
4) Data Visualization:
- A picture is worth a thousand words
5) Practice:
- There's no better way to learn than to do it yourself.
Data Analytics is a valuable skill that can help you make better decisions, understand your audience better, and ultimately grow your business.
It's never too late to start learning!
β€7
β
SQL Practice Questions with Answers π§ ποΈ
π Q1. How to find the 2nd highest salary from a table?
β Answer:
π Q2. How to find duplicate values in a column?
β Answer:
π Q3. How to select records that exist in one table but not in another?
β Answer:
π Q4. How to get the top 3 highest salaries? (MySQL)
β Answer:
π Q5. How to fetch employees with the same salary?
β Answer:
π Q6. How to get the department-wise highest salary?
β Answer:
π¬ Tap β€οΈ for more!
π Q1. How to find the 2nd highest salary from a table?
β Answer:
SELECT MAX(salary) FROM employees
WHERE salary < (SELECT MAX(salary) FROM employees);
π Q2. How to find duplicate values in a column?
β Answer:
SELECT name, COUNT(*) FROM employees
GROUP BY name
HAVING COUNT(*) > 1;
π Q3. How to select records that exist in one table but not in another?
β Answer:
SELECT * FROM employees
WHERE id NOT IN (SELECT employee_id FROM payroll);
π Q4. How to get the top 3 highest salaries? (MySQL)
β Answer:
SELECT DISTINCT salary FROM employees
ORDER BY salary DESC
LIMIT 3;
π Q5. How to fetch employees with the same salary?
β Answer:
SELECT * FROM employees e1
WHERE EXISTS (
SELECT 1 FROM employees e2
WHERE e1.salary = e2.salary AND e1.id <> e2.id
);
π Q6. How to get the department-wise highest salary?
β Answer:
SELECT department, MAX(salary) AS max_salary
FROM employees
GROUP BY department;
π¬ Tap β€οΈ for more!
β€7π1π1
β
SQL Practice Questions with Answers: Part-2 π§ ποΈ
π Q7. Find employees who never received a bonus
π€ Table: employees
id | name
1 | Arjun
2 | Riya
3 | Meena
π° Table: bonus
employee_id | bonus_amount
1 | 3000
3 | 5000
π Query:
π Result: Riya
π Q8. Get highest salary employee from each department
π§Ύ Table: employees
id | name | dept | salary
1 | Arjun | HR | 40000
2 | Riya | IT | 55000
3 | Meena | IT | 62000
4 | Kabir | HR | 45000
π Query:
π Result: Kabir (HR), Meena (IT)
π Q9. Count number of employees who joined each year
π Table: employees
id | name | join_date
1 | Arjun | 2021-03-10
2 | Riya | 2022-05-12
3 | Meena | 2021-11-03
4 | Kabir | 2023-01-09
π Query:
π Result:
2021 β 2
2022 β 1
2023 β 1
π Q10. Find employees earning more than department average
π§Ύ Table: employees
id | name | dept | salary
1 | Arjun | HR | 40000
2 | Riya | IT | 55000
3 | Meena | IT | 62000
4 | Kabir | HR | 45000
π Query:
π Result: Kabir (HR), Meena (IT)
π Q11. Fetch the 5th highest salary from employee table
π§Ύ Table: employees
Salaries: 90000, 85000, 78000, 76000, 72000, 70000
π Query:
π Result: 72000
π Q12. Find employees working on more than one project
π Table: project_assignments
employee_id | project_id
1 | 101
1 | 102
2 | 103
3 | 104
3 | 105
3 | 106
π Query:
π Result:
1 β 2 projects
3 β 3 projects
π¬ Tap β€οΈ for more!
π Q7. Find employees who never received a bonus
π€ Table: employees
id | name
1 | Arjun
2 | Riya
3 | Meena
π° Table: bonus
employee_id | bonus_amount
1 | 3000
3 | 5000
π Query:
SELECT e.id, e.name
FROM employees e
LEFT JOIN bonus b ON e.id = b.employee_id
WHERE b.employee_id IS NULL;
π Result: Riya
π Q8. Get highest salary employee from each department
π§Ύ Table: employees
id | name | dept | salary
1 | Arjun | HR | 40000
2 | Riya | IT | 55000
3 | Meena | IT | 62000
4 | Kabir | HR | 45000
π Query:
SELECT e.*
FROM employees e
JOIN (
SELECT department, MAX(salary) AS max_salary
FROM employees
GROUP BY department
) t
ON e.department = t.department
AND e.salary = t.max_salary;
π Result: Kabir (HR), Meena (IT)
π Q9. Count number of employees who joined each year
π Table: employees
id | name | join_date
1 | Arjun | 2021-03-10
2 | Riya | 2022-05-12
3 | Meena | 2021-11-03
4 | Kabir | 2023-01-09
π Query:
SELECT YEAR(join_date) AS join_year, COUNT(*) AS total
FROM employees
GROUP BY YEAR(join_date)
ORDER BY join_year;
π Result:
2021 β 2
2022 β 1
2023 β 1
π Q10. Find employees earning more than department average
π§Ύ Table: employees
id | name | dept | salary
1 | Arjun | HR | 40000
2 | Riya | IT | 55000
3 | Meena | IT | 62000
4 | Kabir | HR | 45000
π Query:
SELECT e.*
FROM employees e
JOIN (
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
) t
ON e.department = t.department
WHERE e.salary > t.avg_salary;
π Result: Kabir (HR), Meena (IT)
π Q11. Fetch the 5th highest salary from employee table
π§Ύ Table: employees
Salaries: 90000, 85000, 78000, 76000, 72000, 70000
π Query:
SELECT DISTINCT salary
FROM employees
ORDER BY salary DESC
LIMIT 1 OFFSET 4;
π Result: 72000
π Q12. Find employees working on more than one project
π Table: project_assignments
employee_id | project_id
1 | 101
1 | 102
2 | 103
3 | 104
3 | 105
3 | 106
π Query:
SELECT employee_id, COUNT(*) AS project_count
FROM project_assignments
GROUP BY employee_id
HAVING COUNT(*) > 1;
π Result:
1 β 2 projects
3 β 3 projects
π¬ Tap β€οΈ for more!
β€13
β
SQL Practice Questions with Answers: Part-3 π§ ποΈ
π Q13. Find employees whose salary is above the company average
π§Ύ Table: employees
id | name | salary
1 | Arjun | 40000
2 | Riya | 55000
3 | Meena | 62000
4 | Kabir | 45000
π Query:
π Result: Riya, Meena
π Q14. Get the 3 most recent joined employees
π Table: employees
id | name | join_date
1 | Arjun | 2021-03-10
2 | Riya | 2022-05-12
3 | Meena | 2023-02-01
4 | Kabir | 2023-11-09
π Query:
π Result: Kabir, Meena, Riya
π Q15. Retrieve employees who donβt have a manager assigned
π§Ύ Table: employees
id | name | manager_id
1 | Arjun | NULL
2 | Riya | 1
3 | Meena | NULL
4 | Kabir | 2
π Query:
π Result: Arjun, Meena
π Q16. Find departments where more than 2 employees work
π§Ύ Table: employees
id | name | department
1 | Arjun | HR
2 | Riya | IT
3 | Meena | IT
4 | Kabir | HR
5 | John | IT
π Query:
π Result: IT β 3 employees
π Q17. Select employees whose salary equals department average
π§Ύ Table: employees
id | name | dept | salary
1 | Arjun | HR | 40000
2 | Riya | IT | 55000
3 | Meena | IT | 62000
4 | Kabir | HR | 45000
π Query:
π Result: None (but logic works if matches exist)
π Q18. Get employees who have at least one matching project
π Table: project_assignments
employee_id | project_id
1 | 101
2 | 101
2 | 102
3 | 103
4 | 101
π Query:
π Result:
Employees 1, 2, 4 share project 101
π¬ Tap β€οΈ for more!
π Q13. Find employees whose salary is above the company average
π§Ύ Table: employees
id | name | salary
1 | Arjun | 40000
2 | Riya | 55000
3 | Meena | 62000
4 | Kabir | 45000
π Query:
SELECT *
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
π Result: Riya, Meena
π Q14. Get the 3 most recent joined employees
π Table: employees
id | name | join_date
1 | Arjun | 2021-03-10
2 | Riya | 2022-05-12
3 | Meena | 2023-02-01
4 | Kabir | 2023-11-09
π Query:
SELECT *
FROM employees
ORDER BY join_date DESC
LIMIT 3;
π Result: Kabir, Meena, Riya
π Q15. Retrieve employees who donβt have a manager assigned
π§Ύ Table: employees
id | name | manager_id
1 | Arjun | NULL
2 | Riya | 1
3 | Meena | NULL
4 | Kabir | 2
π Query:
SELECT id, name
FROM employees
WHERE manager_id IS NULL;
π Result: Arjun, Meena
π Q16. Find departments where more than 2 employees work
π§Ύ Table: employees
id | name | department
1 | Arjun | HR
2 | Riya | IT
3 | Meena | IT
4 | Kabir | HR
5 | John | IT
π Query:
SELECT department, COUNT(*) AS total
FROM employees
GROUP BY department
HAVING COUNT(*) > 2;
π Result: IT β 3 employees
π Q17. Select employees whose salary equals department average
π§Ύ Table: employees
id | name | dept | salary
1 | Arjun | HR | 40000
2 | Riya | IT | 55000
3 | Meena | IT | 62000
4 | Kabir | HR | 45000
π Query:
SELECT e.*
FROM employees e
JOIN (
SELECT dept, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept
) t ON e.dept = t.dept
WHERE e.salary = t.avg_salary;
π Result: None (but logic works if matches exist)
π Q18. Get employees who have at least one matching project
π Table: project_assignments
employee_id | project_id
1 | 101
2 | 101
2 | 102
3 | 103
4 | 101
π Query:
SELECT p1.employee_id, p2.employee_id AS colleague
FROM project_assignments p1
JOIN project_assignments p2
ON p1.project_id = p2.project_id
AND p1.employee_id <> p2.employee_id;
π Result:
Employees 1, 2, 4 share project 101
π¬ Tap β€οΈ for more!
β€18
β
Free Resources to Learn SQL in 2025 π§ π
1. YouTube Channels
β’ freeCodeCamp β Comprehensive SQL courses
β’ Simplilearn β SQL basics and advanced topics
β’ CodeWithMosh β SQL tutorial for beginners
β’ Alex The Analyst β Practical SQL for data analysis
2. Websites
β’ W3Schools SQL Tutorial β Easy-to-understand basics
β’ SQLZoo β Interactive SQL tutorials with exercises
β’ GeeksforGeeks SQL β Concepts, interview questions, and examples
β’ LearnSQL β Free courses and interactive editor
3. Practice Platforms
β’ LeetCode (SQL section) β Interview-style SQL problems
β’ HackerRank (SQL section) β Challenges and practice problems
β’ StrataScratch β Real-world SQL questions from companies
β’ SQL Fiddle β Online SQL sandbox for testing queries
4. Free Courses
β’ Khan Academy: Intro to SQL β Basic database concepts and SQL
β’ Codecademy: Learn SQL (Basic) β Interactive lessons
β’ Great Learning: SQL for Beginners β Free certification course
β’ Udemy (search for free courses) β Many introductory SQL courses often available for free
5. Books for Starters
β’ βSQL in 10 Minutes, Sams Teach Yourselfβ β Ben Forta
β’ βSQL Practice Problems: 57 Problems to Test Your SQL Skillsβ β Sylvia Moestl Wasserman
β’ βLearning SQLβ β Alan Beaulieu
6. Must-Know Concepts
β’ SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY
β’ JOINs (INNER, LEFT, RIGHT, FULL)
β’ Subqueries, CTEs (Common Table Expressions)
β’ Window Functions (RANK, ROW_NUMBER, LEAD, LAG)
β’ Basic DDL (CREATE TABLE) and DML (INSERT, UPDATE, DELETE)
π‘ Practice consistently with real-world scenarios.
π¬ Tap β€οΈ for more!
1. YouTube Channels
β’ freeCodeCamp β Comprehensive SQL courses
β’ Simplilearn β SQL basics and advanced topics
β’ CodeWithMosh β SQL tutorial for beginners
β’ Alex The Analyst β Practical SQL for data analysis
2. Websites
β’ W3Schools SQL Tutorial β Easy-to-understand basics
β’ SQLZoo β Interactive SQL tutorials with exercises
β’ GeeksforGeeks SQL β Concepts, interview questions, and examples
β’ LearnSQL β Free courses and interactive editor
3. Practice Platforms
β’ LeetCode (SQL section) β Interview-style SQL problems
β’ HackerRank (SQL section) β Challenges and practice problems
β’ StrataScratch β Real-world SQL questions from companies
β’ SQL Fiddle β Online SQL sandbox for testing queries
4. Free Courses
β’ Khan Academy: Intro to SQL β Basic database concepts and SQL
β’ Codecademy: Learn SQL (Basic) β Interactive lessons
β’ Great Learning: SQL for Beginners β Free certification course
β’ Udemy (search for free courses) β Many introductory SQL courses often available for free
5. Books for Starters
β’ βSQL in 10 Minutes, Sams Teach Yourselfβ β Ben Forta
β’ βSQL Practice Problems: 57 Problems to Test Your SQL Skillsβ β Sylvia Moestl Wasserman
β’ βLearning SQLβ β Alan Beaulieu
6. Must-Know Concepts
β’ SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY
β’ JOINs (INNER, LEFT, RIGHT, FULL)
β’ Subqueries, CTEs (Common Table Expressions)
β’ Window Functions (RANK, ROW_NUMBER, LEAD, LAG)
β’ Basic DDL (CREATE TABLE) and DML (INSERT, UPDATE, DELETE)
π‘ Practice consistently with real-world scenarios.
π¬ Tap β€οΈ for more!
β€13π1
β
Top 5 Mistakes to Avoid When Learning SQL βπ
1οΈβ£ Ignoring Data Basics
Don't skip understanding tables, rows, primary keys, and relationships. These are the foundation of SQL.
2οΈβ£ Memorizing Queries Without Practice
Reading syntax isn't enough. Write real queries on sample databases to retain concepts.
3οΈβ£ Not Using Joins Early On
Many avoid JOINs thinking they're hard. Practice INNER, LEFT, and RIGHT JOINs with real examples to understand table relationships.
4οΈβ£ Skipping GROUP BY and Aggregates
GROUP BY with COUNT, SUM, AVG, etc., is core to analytics. Learn it early and use it often.
5οΈβ£ Not Practicing Real-World Scenarios
Writing SELECT * from a table isn't enough. Use projects like sales reports, user activity tracking, or inventory queries.
π¬ Tap β€οΈ for more!
1οΈβ£ Ignoring Data Basics
Don't skip understanding tables, rows, primary keys, and relationships. These are the foundation of SQL.
2οΈβ£ Memorizing Queries Without Practice
Reading syntax isn't enough. Write real queries on sample databases to retain concepts.
3οΈβ£ Not Using Joins Early On
Many avoid JOINs thinking they're hard. Practice INNER, LEFT, and RIGHT JOINs with real examples to understand table relationships.
4οΈβ£ Skipping GROUP BY and Aggregates
GROUP BY with COUNT, SUM, AVG, etc., is core to analytics. Learn it early and use it often.
5οΈβ£ Not Practicing Real-World Scenarios
Writing SELECT * from a table isn't enough. Use projects like sales reports, user activity tracking, or inventory queries.
π¬ Tap β€οΈ for more!
β€20π2
π ππ»ππ²πΏππΆπ²ππ²πΏ: How do you use
π π π²: Use
Example:
π§ Logic Breakdown:
- Works like if-else
- Evaluates conditions top to bottom
- Returns the first match
-
β Use Case:
- Create custom categories
- Replace values based on logic
- Conditional ordering or filtering
π¬ Tap β€οΈ for more!
CASE in SQL?π π π²: Use
CASE to add conditional logic inside SELECT, WHERE, or ORDER BY.Example:
SELECT name,
salary,
CASE
WHEN salary >= 80000 THEN 'High'
WHEN salary >= 50000 THEN 'Medium'
ELSE 'Low'
END AS salary_level
FROM employees;
π§ Logic Breakdown:
- Works like if-else
- Evaluates conditions top to bottom
- Returns the first match
-
ELSE is optional (defaults to NULL)β Use Case:
- Create custom categories
- Replace values based on logic
- Conditional ordering or filtering
π¬ Tap β€οΈ for more!
β€17π2
β
SQL Skills Every Beginner Should Learn ππ»
1οΈβ£ Understanding the Basics
β¦ What is a database and table
β¦ Rows, columns, primary keys, foreign keys
β¦ Relational database concepts
2οΈβ£ Core SQL Queries
β¦ SELECT, FROM, WHERE β Get filtered data
β¦ ORDER BY, LIMIT β Sort and control output
β¦ DISTINCT, BETWEEN, IN, LIKE β Filter smarter
3οΈβ£ Joins (Combine Tables)
β¦ INNER JOIN β Matching records in both tables
β¦ LEFT JOIN, RIGHT JOIN β Include unmatched from one side
β¦ FULL OUTER JOIN β All records, matched or not
4οΈβ£ Aggregations
β¦ COUNT(), SUM(), AVG(), MIN(), MAX()
β¦ GROUP BY to summarize data
β¦ HAVING to filter aggregated results
5οΈβ£ Subqueries & CTEs
β¦ Subquery inside WHERE or SELECT
β¦ WITH clause for clean and reusable code
6οΈβ£ Window Functions
β¦ ROW_NUMBER(), RANK(), DENSE_RANK()
β¦ PARTITION BY, ORDER BY inside OVER()
7οΈβ£ Data Cleaning & Logic
β¦ Handle NULL values
β¦ Use CASE WHEN for conditional columns
β¦ Remove duplicates using DISTINCT or ROW_NUMBER()
8οΈβ£ Practice & Projects
β¦ Sales reports, user activity, inventory tracking
β¦ Work on public datasets
β¦ Solve SQL questions on LeetCode or HackerRank
Double Tap β₯οΈ For More
1οΈβ£ Understanding the Basics
β¦ What is a database and table
β¦ Rows, columns, primary keys, foreign keys
β¦ Relational database concepts
2οΈβ£ Core SQL Queries
β¦ SELECT, FROM, WHERE β Get filtered data
β¦ ORDER BY, LIMIT β Sort and control output
β¦ DISTINCT, BETWEEN, IN, LIKE β Filter smarter
3οΈβ£ Joins (Combine Tables)
β¦ INNER JOIN β Matching records in both tables
β¦ LEFT JOIN, RIGHT JOIN β Include unmatched from one side
β¦ FULL OUTER JOIN β All records, matched or not
4οΈβ£ Aggregations
β¦ COUNT(), SUM(), AVG(), MIN(), MAX()
β¦ GROUP BY to summarize data
β¦ HAVING to filter aggregated results
5οΈβ£ Subqueries & CTEs
β¦ Subquery inside WHERE or SELECT
β¦ WITH clause for clean and reusable code
6οΈβ£ Window Functions
β¦ ROW_NUMBER(), RANK(), DENSE_RANK()
β¦ PARTITION BY, ORDER BY inside OVER()
7οΈβ£ Data Cleaning & Logic
β¦ Handle NULL values
β¦ Use CASE WHEN for conditional columns
β¦ Remove duplicates using DISTINCT or ROW_NUMBER()
8οΈβ£ Practice & Projects
β¦ Sales reports, user activity, inventory tracking
β¦ Work on public datasets
β¦ Solve SQL questions on LeetCode or HackerRank
Double Tap β₯οΈ For More
β€13π2