0% found this document useful (0 votes)
29 views

The Ultimate Guide of SQL

The document is a comprehensive guide on SQL, covering essential topics such as SQL syntax, data types, querying, joins, and interview questions. It includes a complete SQL syllabus, categorized practice websites for different skill levels, and frequently asked SQL interview questions with answers. Additionally, it provides resources like tutorial websites and YouTube playlists for further learning.

Uploaded by

manohargns
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views

The Ultimate Guide of SQL

The document is a comprehensive guide on SQL, covering essential topics such as SQL syntax, data types, querying, joins, and interview questions. It includes a complete SQL syllabus, categorized practice websites for different skill levels, and frequently asked SQL interview questions with answers. Additionally, it provides resources like tutorial websites and YouTube playlists for further learning.

Uploaded by

manohargns
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 28

The Ultimate Guide of SQL

Here’s what you’ll find in this document:-​

●​ Complete SQL Syllabus with Resources


●​ SQL Practice Websites Categorized by Levels
●​ Types of Most Frequently Asked SQL Interview Questions & Answers

-​ Complete SQL Syllabus with Resources

1. SQL Data Definition Language (DDL)

●​ CREATE: Create a new database object (e.g., table).


●​ ALTER: Modify an existing database object.
●​ DROP: Remove an existing database object.
●​ TRUNCATE: Remove all records from a table (but keep the structure).

DDL is used to define and manage database structures like tables and schemas.

2. SQL Data Manipulation Language (DML)

●​ INSERT: Insert new data into a table.


●​ UPDATE: Modify existing data in a table.
●​ DELETE: Remove data from a table.

DML is used to manipulate data within database tables.

3. SQL Data Types

●​ Numeric Data Types: INT, FLOAT, DECIMAL, etc.


●​ String Data Types: VARCHAR, CHAR, TEXT, etc.
●​ Date/Time Data Types: DATE, DATETIME, TIMESTAMP, etc.
●​ Boolean Data Type: BOOLEAN.
Data types define the nature of data that can be stored in a column (numbers, text, dates,
etc.).

4. SQL Querying Data

●​ SELECT: Retrieve data from the database.


●​ DISTINCT: Remove duplicate rows in a result set.
●​ WHERE: Filter records based on a condition.
●​ LIKE: Search for a specified pattern.
●​ ORDER BY: Sort the result set.
●​ LIMIT: Limit the number of returned rows (MySQL/PostgreSQL).
●​ TOP: Limit the number of returned rows (SQL Server).
●​ AND, OR, NOT: Logical operators for filtering data.
●​ IN: Filter records based on a list of values.
●​ BETWEEN: Filter records based on a range.

These clauses and operators are used to filter and organize query results.

5. Aggregate Functions

●​ SUM(): Calculate the total sum of a numeric column.


●​ MAX(): Find the maximum value.
●​ MIN(): Find the minimum value.
●​ COUNT(): Count the number of rows.
●​ AVG(): Calculate the average value.

Aggregate functions are used to calculate summary statistics on sets of data.

6. Grouping and Filtering Data

●​ GROUP BY: Group rows that have the same values into summary rows.
●​ HAVING: Filter groups based on a condition.

These clauses are used to group data and filter aggregated results.

7. SQL Joins

●​ INNER JOIN: Return rows with matching values in both tables.


●​ LEFT JOIN (LEFT OUTER JOIN): Return all rows from the left table, and the
matched rows from the right table.
●​ RIGHT JOIN (RIGHT OUTER JOIN): Return all rows from the right table,
and the matched rows from the left table.
●​ FULL OUTER JOIN: Return all rows when there is a match in either left or right
table.
●​ SELF JOIN: Join a table to itself.

Joins are used to combine rows from two or more tables based on related columns.

8. Subqueries and CTEs (Common Table Expressions)

●​ CTE: Temporary result set defined within the execution scope of a SELECT,
INSERT, UPDATE, or DELETE statement.
●​ SUBQUERIES: A query nested inside another query.

Subqueries and CTEs are used to simplify complex queries and improve readability.

9. Set Operators

●​ UNION: Combine the result sets of two or more SELECT statements (without
duplicates).
●​ UNION ALL: Combine the result sets of two or more SELECT statements (with
duplicates).

Set operators are used to combine the results of multiple queries.

10. Existential and Conditional Queries

●​ EXISTS: Test for the existence of any records in a subquery.


●​ CASE WHEN: Perform conditional logic in a SQL statement.

Existential queries check for the existence of data, while CASE WHEN is used for
conditional logic within queries.

11. Window Functions

●​ ROW_NUMBER() OVER: Assigns a unique sequential integer to rows within a


partition of a result set.
●​ RANK() OVER: Provides a ranking of rows within a partition, allowing for ties.
●​ DENSE_RANK() OVER: Similar to RANK(), but without gaps in ranking.
●​ LEAD() OVER: Access data from the following row in a partition.
●​ LAG() OVER: Access data from the preceding row in a partition.
●​ NTILE() OVER: Distribute rows into a specified number of equal-sized groups.
●​ FIRST_VALUE() OVER: Get the first value in an ordered set of values.
●​ LAST_VALUE() OVER: Get the last value in an ordered set of values.

Window functions allow for calculations across a set of rows related to the current row,
without collapsing data into groups.

12. Aggregate Functions as Window Functions

●​ SUM() OVER: Calculate the sum of values across a window of rows.


●​ MAX() OVER: Find the maximum value across a window of rows.
●​ MIN() OVER: Find the minimum value across a window of rows.
●​ COUNT() OVER: Count the number of rows across a window.
●​ AVG() OVER: Calculate the average value across a window.

By using the OVER() clause, aggregate functions become window functions, allowing for
aggregate calculations over a defined set of rows (the window) without collapsing the
data like a traditional GROUP BY would.

13. SQL Date and Time Functions

●​ Functions to manipulate date and time values (e.g., NOW(), CURRENT_DATE,


DATEADD(), DATEDIFF(), etc.).

These functions allow for the manipulation and comparison of date and time values in
queries.​ ​

RESOURCES:

Websites:

1.​ https://www.w3schools.com/sql/
2.​ https://sqlbolt.com/

Youtube Playlist:
This below playlist contains the complete tutorial video of SQL with all the required
topics in English.

https://youtube.com/playlist?list=PLavw5C92dz9Ef4E-1Zi9KfCTXS_IN8gXZ&si=XCw
pStf9zZ0YISN8

And if you want to learn in Hindi, then you can follow this below playlist:

https://youtube.com/playlist?list=PLdOKnrf8EcP17p05q13WXbHO5Z_JfXNpw&si=8m
4E9IGf-2MR9ZKA

Note - Below mentioned are some top playlists of SQL interview Q&A which I also
use to prepare before any SQL interview.

Top SQL Interview Q&A Playlists:-

https://youtube.com/playlist?list=PLavw5C92dz9Hxz0YhttDniNgKejQlPoAn&si=NgKE
CJfJ8gYCMzxS

https://youtube.com/playlist?list=PLBTZqjSKn0IfuIqbMIqzS-waofsPHMS0E&si=kurTh
9-krlyBTZSc

https://youtube.com/playlist?list=PLBTZqjSKn0IeKBQDjLmzisazhqQy4iGkb&si=HFvZ
N7s3pPAQlpYL

-​ SQL Practice Websites Categorized by Levels


Easy

These websites are perfect for beginners who want to start with the basics and
build a solid foundation:

1.​ W3Schools SQL Tutorial​


https://www.w3schools.com/sql/
2.​ SQLZoo​
https://sqlzoo.net/wiki/SQL_Tutorial
3.​ SQLBolt​
https://sqlbolt.com/

Medium

These platforms are great for those with some SQL knowledge who want to
practice real-world problems and prepare for interviews:

1.​ Leetcode (Top 50 SQL Study Plan)​


https://leetcode.com/studyplan/top-sql-50/
2.​ Leetcode Database Problems​
https://leetcode.com/problemset/database/
3.​ Datalemur​
https://datalemur.com/
4.​ HackerRank SQL​
https://www.hackerrank.com/domains/sql
5.​ StrataScratch​
https://platform.stratascratch.com/coding?code_type=1

Expert

For advanced practice, you can solve the hard-difficulty questions available on the
medium-level websites mentioned above, such as:

●​ Leetcode Database Problems (Hard)​


https://leetcode.com/problemset/database/
●​ HackerRank Advanced SQL Challenges​
https://www.hackerrank.com/domains/sql
●​ StrataScratch Expert-Level Problems​
https://platform.stratascratch.com/coding?code_type=1
- Types of Most Frequently Asked SQL Interview Questions &
Answers

Overview

For any data-related job role, SQL is a key skill, and your interview will mostly
revolve around it. In any SQL round, you can face two types of questions:

●​ Query writing-based questions


●​ Verbally asked conceptual questions

First, we will cover query-based questions, followed by verbal questions.

Query-Based Questions

Types of Most Frequently Asked SQL Interview Questions & Answers

Overview

For any data-related job role, SQL is a key skill, and your interview will mostly
revolve around it. In any SQL round, you can face two types of questions:

●​ Query writing-based questions


●​ Verbally asked conceptual questions

First, we will cover query-based questions, followed by verbal questions.

Query-Based Questions

Question 1: Write a SQL query to find the second highest salary from the table
emp.

●​ Table: emp
●​ Columns: id, salary

Answer (Using DENSE_RANK):

WITH RankedSalaries AS (
SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS rank
FROM emp
)
SELECT salary AS SecondHighestSalary
FROM RankedSalaries
WHERE rank = 2;

Question 2: Write a SQL query to find the numbers which consecutively occur 3
times.

●​ Table: table_name
●​ Columns: id, numbers

Answer:

SELECT numbers
FROM (
SELECT numbers,
LEAD(numbers, 1) OVER (ORDER BY id) AS next_num,
LEAD(numbers, 2) OVER (ORDER BY id) AS next_next_num
FROM table_name
)t
WHERE numbers = next_num AND numbers = next_next_num;

Question 3: Write a SQL query to find the days when temperature was higher than
its previous dates.

●​ Table: table_name
●​ Columns: Days, Temp

Answer (Using CTE):

WITH TempWithLag AS (
SELECT Days, Temp, LAG(Temp) OVER (ORDER BY Days) AS prev_temp
FROM table_name
)
SELECT Days
FROM TempWithLag
WHERE Temp > prev_temp;

Question 4: Write a SQL query to delete duplicate rows in a table.

●​ Table: table_name
●​ Columns: column1, column2, ..., columnN

Answer:

DELETE FROM table_name


WHERE id NOT IN (
SELECT MIN(id)
FROM table_name
GROUP BY column1, column2, ..., columnN
);

Question 5: Write a SQL query for the cumulative sum of salary of each employee
from January to July.

●​ Table: table_name
●​ Columns: Emp_id, Month, Salary

Answer:
SELECT Emp_id, Month, SUM(Salary) OVER (
PARTITION BY Emp_id ORDER BY Month ROWS BETWEEN
UNBOUNDED PRECEDING AND CURRENT ROW
) AS CumulativeSalary
FROM table_name;

Question 6: Write a SQL query to display year-on-year growth for each product.

●​ Table: table_name
●​ Columns: transaction_id, Product_id, transaction_date, spend

Answer (Using CTE):

WITH YearlySpend AS (
SELECT
Product_id,
YEAR(transaction_date) AS year,
SUM(spend) AS total_spend
FROM table_name
GROUP BY Product_id, YEAR(transaction_date)
),
Growth AS (
SELECT
year,
Product_id,
total_spend,
LAG(total_spend) OVER (PARTITION BY Product_id ORDER BY year) AS
prev_year_spend
FROM YearlySpend
)
SELECT year, Product_id,
(total_spend - prev_year_spend) / prev_year_spend AS yoy_growth
FROM Growth
WHERE prev_year_spend IS NOT NULL;
Question 7: Write a SQL query to find the rolling average of posts on a daily basis
for each user_id. Round up the average to two decimal places.

●​ Table: table_name
●​ Columns: user_id, date, post_count

Answer:

SELECT user_id, date,


ROUND(AVG(post_count) OVER (
PARTITION BY user_id ORDER BY date ROWS BETWEEN 6
PRECEDING AND CURRENT ROW
), 2) AS RollingAvg
FROM table_name;

Question 8: Write a SQL query to get the emp_id and department for each
department where the most recently joined employee is still working.

●​ Table: table_name
●​ Columns: emp_id, first_name, last_name, date_of_join, date_of_exit,
department

Answer:

SELECT emp_id, department


FROM table_name
WHERE date_of_exit IS NULL
ORDER BY date_of_join DESC;

Question 9: How many rows will come in the outputs of Left, Right, Inner, and
Outer Join from two tables having duplicate rows?
●​ Left Table A:

Column
1
1
1
2
2
3
4
5

●​ Right Table B:

Column
1
1
2
2
2
3
3
3
4

Answer:

●​ Left Join: 17 rows


●​ Right Join: 16 rows
●​ Inner Join: 16 rows
●​ Outer Join: 17 rows

Explanation:
●​ Left Join: The left join combines all rows from Table A with matching rows
in Table B. For values like 1 and 2, multiple matches occur, leading to
repeated rows in the output. Unique values in A without matches in B (5) are
included with NULL values.

Method for calculating the rows -


3 rows of 1 from left table * 2 rows of 1 from right table = 6 Rows of 1​
2 rows of 2 from left table * 3 rows of 2 from right table = 6 Rows of 2

1 rows of 3 from left table * 3 rows of 3 from right table = 3 Rows of 3

1 rows of 4 from left table * 1 rows of 4 from right table = 1 Rows of 4

1 rows of 5 from left table will come with Null in corresponding row as
there is no value of 5 in right and we are doing left join so it is mandatory to
take all values from left table -​

So, Total output of left join will be 17 rows ​

Note - Please use above method and try to understand other joins
output too

●​ Right Join: The right join behaves symmetrically, including all rows from
Table B with matches in Table A. Unique values in B without matches in A
(None in this case) would appear with NULL values, but no such rows exist
here.​

●​ Inner Join: The inner join only includes rows with matching values in both
tables. Duplicates amplify the matches, yielding 16 rows.​

●​ Outer Join: The full outer join includes all rows from both tables,
combining matched rows and appending unmatched rows with NULL
values. Here, only 5 from Table A contributes an unmatched row, leading to
17 total rows.​
Question 10: Write a query to get mean, median, and mode for earnings.

●​ Table: table_name
●​ Columns: Emp_id, salary

Answer:

-- Mean
SELECT AVG(salary) AS MeanSalary FROM table_name;

-- Median
SELECT AVG(salary) AS MedianSalary
FROM (
SELECT salary
FROM table_name
ORDER BY salary
LIMIT 2 - (SELECT COUNT(*) FROM table_name) % 2 OFFSET (SELECT
(COUNT(*) - 1) / 2 FROM table_name)
) t;

-- Mode
SELECT salary AS ModeSalary
FROM table_name
GROUP BY salary
ORDER BY COUNT(*) DESC
LIMIT 1;

Question 11: Determine the count of rows in the output of the following queries
for Table X and Table Y.

●​ Table X:

ids
1
1
1
1

●​ Table Y:

ids
1
1
1
1
1
1
1
1

Queries:

1.​ SELECT * FROM X JOIN Y ON X.ids != Y.ids


2.​ SELECT * FROM X LEFT JOIN Y ON X.ids != Y.ids
3.​ SELECT * FROM X RIGHT JOIN Y ON X.ids != Y.ids
4.​ SELECT * FROM X FULL OUTER JOIN Y ON X.ids != Y.ids

Answer:

Since the join condition X.ids != Y.ids cannot be satisfied (as all ids in both tables
are 1), the output for all queries will be:

●​ Query 1: 0 rows
●​ Query 2: 0 rows
●​ Query 3: 0 rows
●​ Query 4: 0 rows

Explanation:
●​ The condition X.ids != Y.ids checks for inequality between the columns,
which is not possible as every row in both tables has the same value for ids.
●​ Hence, no rows are returned for any join type.

Question 12: Write a SQL query to calculate the percentage of total sales
contributed by each product category in a given year.

●​ Table: sales
●​ Columns: product_category, sale_year, revenue

Answer:

WITH TotalSales AS (

SELECT sale_year, SUM(revenue) AS total_revenue

FROM sales

GROUP BY sale_year

SELECT s.product_category, s.sale_year,

(SUM(s.revenue) / t.total_revenue) * 100 AS percentage_contribution

FROM sales s

JOIN TotalSales t ON s.sale_year = t.sale_year

GROUP BY s.product_category, s.sale_year, t.total_revenue;

Question 13: Write a SQL query to find the longest streak of consecutive days an
employee worked.
●​ Table: attendance
●​ Columns: emp_id, work_date

Answer:

WITH ConsecutiveDays AS (

SELECT emp_id, work_date,

ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY


work_date) -

DENSE_RANK() OVER (PARTITION BY emp_id,


DATE_ADD(work_date, -ROW_NUMBER() OVER (PARTITION BY emp_id
ORDER BY work_date))) AS streak_group

FROM attendance

SELECT emp_id, COUNT(*) AS longest_streak

FROM ConsecutiveDays

GROUP BY emp_id, streak_group

ORDER BY longest_streak DESC

LIMIT 1;

Question 14: Write a query to identify customers who made purchases in all
quarters of a year.

●​ Table: transactions
●​ Columns: customer_id, transaction_date

Answer:
WITH QuarterlyData AS (

SELECT customer_id,

CONCAT(YEAR(transaction_date), '-Q', QUARTER(transaction_date)) AS


quarter

FROM transactions

GROUP BY customer_id, YEAR(transaction_date),


QUARTER(transaction_date)

SELECT customer_id

FROM QuarterlyData

GROUP BY customer_id

HAVING COUNT(DISTINCT quarter) = 4;

Question 15: Write a query to find the first and last purchase dates for each
customer, along with their total spending.

●​ Table: transactions
●​ Columns: customer_id, transaction_date, amount

Answer:

SELECT customer_id,

MIN(transaction_date) AS first_purchase,

MAX(transaction_date) AS last_purchase,

SUM(amount) AS total_spending
FROM transactions

GROUP BY customer_id;

Question 16: Write a query to find the top 3 employees who generated the highest
revenue in the last year.

●​ Table: employee_sales
●​ Columns: emp_id, sale_date, revenue

Answer:

SELECT emp_id, SUM(revenue) AS total_revenue

FROM employee_sales

WHERE YEAR(sale_date) = YEAR(CURDATE()) - 1

GROUP BY emp_id

ORDER BY total_revenue DESC

LIMIT 3;

Question 17: Write a query to calculate the monthly retention rate for a
subscription-based service.

●​ Table: subscriptions
●​ Columns: user_id, start_date, end_date

Answer:

WITH MonthlyRetention AS (
SELECT DATE_FORMAT(start_date, '%Y-%m') AS subscription_month,

COUNT(DISTINCT user_id) AS new_users,

COUNT(DISTINCT CASE WHEN end_date >=


LAST_DAY(DATE_ADD(start_date, INTERVAL 1 MONTH)) THEN user_id
END) AS retained_users

FROM subscriptions

GROUP BY subscription_month

SELECT subscription_month,

(retained_users / new_users) * 100 AS retention_rate

FROM MonthlyRetention;

Question 18: Write a query to identify products with declining sales for 3
consecutive months.

●​ Table: monthly_sales
●​ Columns: product_id, month, sales

Answer:

WITH DeclineCheck AS (

SELECT product_id, month,

LAG(sales) OVER (PARTITION BY product_id ORDER BY month) AS


prev_month_sales,

LAG(sales, 2) OVER (PARTITION BY product_id ORDER BY month) AS


prev_2_months_sales
FROM monthly_sales

SELECT product_id

FROM DeclineCheck

WHERE sales < prev_month_sales AND prev_month_sales <


prev_2_months_sales

GROUP BY product_id;

Question 19: Write a query to find the average order value (AOV) for customers
who placed at least 5 orders in the last year.

●​ Table: orders
●​ Columns: customer_id, order_date, order_amount

Answer:

WITH OrderCounts AS (

SELECT customer_id, COUNT(*) AS total_orders, SUM(order_amount) AS


total_spent

FROM orders

WHERE YEAR(order_date) = YEAR(CURDATE()) - 1

GROUP BY customer_id

SELECT customer_id, (total_spent / total_orders) AS avg_order_value

FROM OrderCounts
WHERE total_orders >= 5;

Verbally Asked Conceptual Questions

Question 1: Explain the order of execution of SQL.

Answer:

1.​ FROM: Specifies the source table or tables and establishes any joins
between them.
2.​ WHERE: Filters rows based on specified conditions before grouping or
aggregations.
3.​ GROUP BY: Groups rows into summary rows based on specified columns.
4.​ HAVING: Filters aggregated groups, often used with aggregate functions.
5.​ SELECT: Specifies the columns or expressions to include in the final output.
6.​ ORDER BY: Sorts the result set in ascending or descending order.
7.​ LIMIT: Restricts the number of rows returned in the final output.

Question 2: What is the difference between WHERE and HAVING?

Answer:

●​ WHERE: Filters rows before any grouping takes place. It works on


individual rows.
●​ HAVING: Filters aggregated data after grouping. It works on grouped rows.

Example: Use WHERE to filter employees with a salary above 50,000, and
HAVING to filter departments with an average salary above 60,000.

Question 3: What is the use of GROUP BY?


Answer: GROUP BY is used to aggregate data into groups based on one or more
columns. It is often used with aggregate functions like SUM, COUNT, AVG,
MAX, and MIN.

Example: To calculate the total salary for each department:

SELECT department_id, SUM(salary) AS total_salary


FROM employees
GROUP BY department_id;

Question 4: Explain all types of joins in SQL.

Answer:

1.​ INNER JOIN: Returns rows where there is a match in both tables.
○​ Example: Find employees with matching departments.
2.​ LEFT JOIN: Returns all rows from the left table, and matching rows from
the right table. Non-matches are filled with NULL.
○​ Example: List all employees with their departments, even if they are
not assigned.
3.​ RIGHT JOIN: Returns all rows from the right table, and matching rows
from the left table. Non-matches are filled with NULL.
○​ Example: List all departments with their employees, even if they have
none.
4.​ FULL OUTER JOIN: Returns all rows from both tables, with NULL in
places where no match exists.
○​ Example: Combine all employees and departments, regardless of
matches.
5.​ CROSS JOIN: Produces the Cartesian product of both tables.
○​ Example: Pair every employee with every department.

Question 5: What are triggers in SQL?


Answer: Triggers are automated actions executed in response to specific database
events like INSERT, UPDATE, or DELETE. They are used to enforce rules, log
changes, or cascade updates.

Example: Automatically update a log table whenever a row is inserted into the
orders table.

Question 6: What is a stored procedure in SQL?

Answer: A stored procedure is a precompiled set of SQL statements stored in the


database. It allows reusability, simplifies complex operations, and improves
performance by reducing query execution time.

Example: A stored procedure to calculate monthly sales and store the result in a
report table.

Question 7: Explain all types of window functions (Mainly RANK,


ROW_NUMBER, DENSE_RANK, LEAD, and LAG).

Answer:

●​ RANK: Assigns a rank to rows within a partition, skipping ranks for ties.
●​ ROW_NUMBER: Assigns a unique sequential number to rows within a
partition, without skipping.
●​ DENSE_RANK: Similar to RANK, but does not skip ranks for ties.
●​ LEAD: Accesses data from the following row in the same partition.
●​ LAG: Accesses data from the preceding row in the same partition.

Example: Use ROW_NUMBER to assign unique IDs to duplicate records in a


dataset.

Question 8: What is the difference between DELETE and TRUNCATE?


Answer:

●​ DELETE: Removes specific rows based on a WHERE clause. It logs each


row deletion, can be slower, and maintains table structure.
●​ TRUNCATE: Removes all rows from a table without logging individual
deletions. It is faster but cannot filter rows or trigger cascades.

Question 9: What is the difference between DML, DDL, and DCL?

Answer:

●​ DML (Data Manipulation Language): Deals with data manipulation.


○​ Commands: INSERT, UPDATE, DELETE, SELECT.
●​ DDL (Data Definition Language): Manages table structure.
○​ Commands: CREATE, ALTER, DROP, TRUNCATE.
●​ DCL (Data Control Language): Controls access and permissions.
○​ Commands: GRANT, REVOKE.

Question 10: What are aggregate functions, and when do we use them? Explain
with examples.

Answer: Aggregate functions perform calculations on a set of values. Examples:

●​ SUM: Adds values. Example: SELECT SUM(salary) FROM employees;


●​ AVG: Calculates average. Example: SELECT AVG(salary) FROM
employees;
●​ COUNT: Counts rows. Example: SELECT COUNT(*) FROM employees;
●​ MAX/MIN: Finds maximum or minimum values.

Question 11: Which is faster between CTE and subquery?


Answer: CTEs are often faster and more readable for complex queries, especially
when reused multiple times within a query. Subqueries can sometimes be less
efficient due to re-evaluation.

Question 12: What are constraints and their types?

Answer: Constraints enforce data integrity and rules on tables. Types include:

●​ NOT NULL: Ensures a column cannot have NULL values.


●​ UNIQUE: Ensures all values in a column are unique.
●​ PRIMARY KEY: A unique identifier for a row, combining NOT NULL
and UNIQUE.
●​ FOREIGN KEY: Ensures referential integrity by linking to another table.
●​ CHECK: Ensures values satisfy a condition.
●​ DEFAULT: Assigns a default value if none is provided.

Question 13: What are keys, and what are their types?

Answer:

●​ Primary Key: Uniquely identifies a row. Example: emp_id in an employee


table.
●​ Foreign Key: Links two tables. Example: department_id in an employee
table referencing id in the department table.
●​ Candidate Key: Potential column(s) for the primary key.
●​ Composite Key: Combines multiple columns to uniquely identify a row.

Question 14: Differentiate between UNION and UNION ALL.

Answer:

●​ UNION: Combines results from two queries and removes duplicates.


●​ UNION ALL: Combines results from two queries without removing
duplicates. Faster than UNION.

Question 15: What are indexes, and what are their types?

Answer: Indexes improve query performance by providing faster data access.

●​ Clustered Index: Determines the physical order of rows in a table.


●​ Non-Clustered Index: Contains pointers to the actual data in a table.
●​ Unique Index: Ensures all values in a column are distinct.

Question 16: What are views, and what are their limitations?

Answer: Views are virtual tables based on SQL queries. They do not store data but
simplify query reuse. Limitations:

●​ Cannot be indexed.
●​ Performance depends on the underlying base tables.
●​ Cannot directly include ORDER BY.

Question 17: What is the difference between VARCHAR and NVARCHAR?


Similarly, CHAR and NCHAR?

Answer:

●​ VARCHAR: Variable-length, stores ASCII characters.


●​ NVARCHAR: Variable-length, supports Unicode for multilingual data.
●​ CHAR: Fixed-length ASCII.
●​ NCHAR: Fixed-length Unicode.

Question 18: List the different types of relationships in SQL.


Answer:

1.​ One-to-One: Each row in Table A links to exactly one row in Table B.
2.​ One-to-Many: Each row in Table A links to multiple rows in Table B.
3.​ Many-to-Many: Rows in Table A link to multiple rows in Table B and vice
versa.

Question 19: Write retention query in SQL.

Answer:

WITH Retention AS (
SELECT customer_id, COUNT(*) AS total_orders,
COUNT(CASE WHEN order_date >= DATE_ADD(first_order_date,
INTERVAL 1 MONTH) THEN 1 END) AS retained_orders
FROM orders
GROUP BY customer_id
)
SELECT customer_id, (retained_orders / total_orders) * 100 AS retention_rate
FROM Retention;

You might also like