41 Essential SQL Interview Questions and Answers - Toptal®
41 Essential SQL Interview Questions and Answers - Toptal®
INTERVIEW QUESTIONS
What does UNION do? What is the difference between UNION and UNION
ALL ?
Hide answer
UNION merges the contents of two structurally-compatible tables into a single combined
table. The difference between UNION and UNION ALL is that UNION will omit duplicate
records whereas UNION ALL will include duplicate records.
It is important to note that the performance of UNION ALL will typically be better than
UNION , since UNION requires the server to do the additional work of removing any
duplicates. So, in cases where is is certain that there will not be any duplicates, or where
having duplicates is not a problem, use of UNION ALL would be recommended for
performance reasons.
List and explain the different types of JOIN clauses supported in ANSI-
standard SQL.
By continuing to use this site you agree to our Cookie Policy. Got it
Hide answer
https://www.toptal.com/sql/interview-questions 1/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
ANSI-standard
®
SQL specifies five types of JOIN clauses as follows:
INNER JOIN (a.k.a. “simple join”): Returns all rows for which there is at least one match
in BOTH tables. This is the default type of join if no specific JOIN type is specified.
LEFT JOIN (or LEFT OUTER JOIN ): Returns all rows from the left table, and the matched
rows from the right table; i.e., the results will contain all records from the left table, even
if the JOIN condition doesn’t find any matching records in the right table. This means
that if the ON clause doesn’t match any records in the right table, the JOIN will still
return a row in the result for that record in the left table, but with NULL in each column
from the right table.
RIGHT JOIN (or RIGHT OUTER JOIN ): Returns all rows from the right table, and the
matched rows from the left table. This is the exact opposite of a LEFT JOIN ; i.e., the
results will contain all records from the right table, even if the JOIN condition doesn’t
find any matching records in the left table. This means that if the ON clause doesn’t
match any records in the left table, the JOIN will still return a row in the result for that
record in the right table, but with NULL in each column from the left table.
FULL JOIN (or FULL OUTER JOIN ): Returns all rows for which there is a match in
EITHER of the tables. Conceptually, a FULL JOIN combines the effect of applying both
a LEFT JOIN and a RIGHT JOIN ; i.e., its result set is equivalent to performing a UNION
of the results of left and right outer queries.
CROSS JOIN : Returns all records where each row from the first table is combined with
each row from the second table (i.e., returns the Cartesian product of the sets of rows
from the joined tables). Note that a CROSS JOIN can either be specified using the
C OSS O t (“ li it j i t ti ”) (b) li ti th t bl i th O l
https://www.toptal.com/sql/interview-questions 2/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
Hide answer
Surprisingly, given the sample data provided, the result of this query will be an empty set.
The reason for this is as follows: If the set being evaluated by the SQL NOT IN condition
contains any values that are null, then the outer query here will return an empty set, even if
there are many runner ids that match winner_ids in the races table.
SELECT * FROM runners WHERE id NOT IN (SELECT winner_id FROM races WHERE winner_id
Note, this is assuming the standard SQL behavior that you get without modifying the default
ANSI_NULLS setting.
Apply as a Freelancer
https://www.toptal.com/sql/interview-questions 3/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
UPDATE docs SET doctext=pageseq FROM docs INNER JOIN envelope ON envelope.id=docs.i
WHERE EXISTS (
SELECT 1 FROM dbo.docs
WHERE id=envelope.id
);
Hide answer
The EXISTS clause in the above query is a red herring. It will always be true since ID is
not a member of dbo.docs . As such, it will refer to the envelope table comparing itself to
itself!
The idnum value of NULL will not be set since the join of NULL will not return a result
when attempting a match with any value of envelope .
If there are 10 records in the Emp table and 5 records in the Dept table,
how many rows will be displayed in the result of the following SQL
query:
By continuing to use this site you agree to our Cookie Policy. Got it
Select * From Emp, Dept
https://www.toptal.com/sql/interview-questions 4/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
The query will result in 50 rows as a “cartesian product” or “cross join”, which is the default
whenever the ‘where’ clause is omitted.
Write a query to fetch values in table test_a that are and not in test_b
without using the NOT keyword.
Note, Oracle does not support the above INSERT syntax, so you would
need this instead:
Hide answer
By continuing to use this site you agree to our Cookie Policy. Got it
https://www.toptal.com/sql/interview-questions 5/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
In SQL Server,
® PostgreSQL, and SQLite, this can be done using the except keyword as
follows:
In Oracle, the minus keyword is used instead. Note that if there are multiple columns, say
ID and Name, the column should be explicitly stated in Oracle queries: Select ID from
test_a minus select ID from test_b
MySQL does not support the except function. However, there is a standard SQL solution
that works in all of the above engines, including MySQL:
select a.id
from test_a a
left join test_b b on a.id = b.id
where b.id is null;
Write a SQL query to find the 10th highest employee salary from an
Employee table. Explain your answer.
(Note: You may assume that there are at least 10 records in the Employee
table.)
Hide answer
First, the SELECT DISTINCT TOP (10) Salary FROM Employee ORDER BY Salary DESC query
will select the top 10 salaried employees in the table. However, those salaries will be listed
in descending order. That was necessary for the first query to work, but now picking the top
1 from that list will give you the highest salary not the the 10th highest salary.
By continuing to use this site you agree to our Cookie Policy. Got it
https://www.toptal.com/sql/interview-questions 6/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
Therefore, the second query reorders the 10 records in ascending order (which the default
sort order) and
® then selects the top record (which will now be the lowest of those 10
salaries).
Not all databases support the TOP keyword. For example, MySQL and PostreSQL use the
LIMIT keyword, as follows:
SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 9,1;
Write a SQL query using UNION ALL (not UNION ) that uses the WHERE
clause to eliminate duplicates. Why might you want to do this?
Hide answer
You can avoid duplicates using UNION ALL and still run much faster than UNION DISTINCT
(which is actually same as UNION) by running a query like this:
SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X
The key is the AND a!=X part. This gives you the benefits of the UNION (a.k.a., UNION
DISTINCT ) command, while avoiding much of its performance hit.
user_id username
1 John Doe
2 Jane Don
3 Alice Jones
4 Lisa Romero
By continuing to use this site you agree to our Cookie Policy. Got it
https://www.toptal.com/sql/interview-questions 7/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
®
user_training_id user_id training_id training_date
1 1 1 "2015-08-02"
2 2 1 "2015-08-03"
3 3 2 "2015-08-02"
4 4 2 "2015-08-04"
5 2 2 "2015-08-03"
6 1 1 "2015-08-02"
7 3 2 "2015-08-04"
8 4 3 "2015-08-03"
9 1 4 "2015-08-03"
10 3 1 "2015-08-02"
11 4 2 "2015-08-04"
12 3 2 "2015-08-02"
13 1 1 "2015-08-02"
14 4 3 "2015-08-03"
Write a query to to get the list of users who took the a training lesson
more than once in the same day, grouped by user and training lesson,
each ordered from the most recent lesson date to oldest date.
Hide answer
SELECT
u.user_id,
username,
training_id,
training_date,
count( user_training_id ) AS count
FROM users u JOIN training_details t ON t.user_id = u.user_id
GROUP BY u.user_id,
username,
training_id,
training_date
HAVING count( user_training_id ) > 1
ORDER BY training_date DESC;
By continuing to use this site you agree to our Cookie Policy. Got it
https://www.toptal.com/sql/interview-questions 8/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
What is an
® execution plan? When would you use it? How would you view
Hide answer
An execution plan is basically a road map that graphically or textually shows the data
retrieval methods chosen by the SQL server’s query optimizer for a stored procedure or ad
hoc query. Execution plans are very useful for helping a developer understand and analyze
the performance characteristics of a query or stored procedure, since the plan is used to
execute the query or stored procedure.
In many SQL systems, a textual execution plan can be obtained using a keyword such as
EXPLAIN , and visual representations can often be obtained as well. In Microsoft SQL
Server, the Query Analyzer has an option called “Show Execution Plan” (located on the
Query drop down menu). If this option is turned on, it will display query execution plans in a
t i d h i
List and explain each of the ACID properties that collectively guarantee
that database transactions are processed reliably.
Hide answer
ACID (Atomicity, Consistency, Isolation, Durability) is a set of properties that guarantee that
database transactions are processed reliably. They are defined as follows:
Atomicity. Atomicity requires that each transaction be “all or nothing”: if one part of the
transaction fails, the entire transaction fails, and the database state is left unchanged. An
atomic system must guarantee atomicity in each and every situation, including power
failures, errors, and crashes.
Consistency. The consistency property ensures that any transaction will bring the
database from one valid state to another. Any data written to the database must be valid
according to all defined rules, including constraints, cascades, triggers, and any
combination thereof.
Isolation. The isolation property ensures that the concurrent execution of transactions
results in a system state that would be obtained if transactions were executed serially,
i.e., one after the other. Providing isolation is the main goal of concurrency control.
Depending on concurrency control method (i.e. if it uses strict - as opposed to relaxed -
serializability), the effects of an incomplete transaction might not even be visible to
another
By continuing transaction.
to use this site you agree to our Cookie Policy. Got it
https://www.toptal.com/sql/interview-questions 9/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
Durability. Durability means that once a transaction has been committed, it will remain
so, even® in the event of power loss, crashes, or errors. In a relational database, for
instance, once a group of SQL statements execute, the results need to be stored
(Assume the table contains well over 100 records with odd user_id
values.)
Hide answer
SELECT TOP 100 user_id FROM dbo.users WHERE user_id % 2 = 1 ORDER BY user_id
What are the NVL and the NVL2 functions in SQL? How do they differ?
Hide answer
Both the NVL(exp1, exp2) and NVL2(exp1, exp2, exp3) functions check the value exp1
to see if it is null.
With the NVL(exp1, exp2) function, if exp1 is not null, then the value of exp1 is
returned; otherwise, the value of exp2 is returned, but case to the same data type as that
of exp1 .
With the NVL2(exp1, exp2, exp3) function, if exp1 is not null, then exp2 is returned;
otherwise, the value of exp3 is returned.
How can you select all the even number records from a table? All the
odd number records?
Hide answer
https://www.toptal.com/sql/interview-questions 10/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
Hide answer
The only difference between the RANK() and DENSE_RANK() functions is in cases where
there is a “tie”; i.e., in cases where multiple values in a set have the same ranking. In such
cases, RANK() will assign non-consecutive “ranks” to the values in the set (resulting in gaps
between the integer ranking values when there is a tie), whereas DENSE_RANK() will assign
consecutive ranks to the values in the set (so there will be no gaps between the integer
ranking values in the case of a tie).
For example, consider the set {25, 25, 50, 75, 75, 100} . For such a set, RANK() will
return {1, 1, 3, 4, 4, 6} (note that the values 2 and 5 are skipped), whereas
S () ill t { 2 3 3 }
Hide answer
When GROUP BY is not used, the WHERE and HAVING clauses are essentially equivalent.
The WHERE clause is used to filter records from a result. The filtering occurs before any
groupings are made.
The HAVING clause is used to filter values from a group (i.e., to check conditions after
aggregation into groups has been performed).
Given a table Employee having columns empName and empId , what will be
the result of the SQL query below?
select empName
By continuing to use thisfrom
site Employee
you agreeorder
to ourby 2 desc;
Cookie Policy. Got it
https://www.toptal.com/sql/interview-questions 11/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
Hide answer
®
“Order by 2” is only valid when there are at least two columns being used in select
statement. However, in this query, even though the Employee table has 2 columns, the
query is only selecting 1 column name, so “Order by 2” will cause the statement to throw an
error while executing the above sql query.
What will be the output of the below query, given an Employee table
having 10 records?
BEGIN TRAN
TRUNCATE TABLE Employees
ROLLBACK
SELECT * FROM Employees
Hide answer
This query will return 10 records as TRUNCATE was executed in the transaction. TRUNCATE
does not itself keep a log but BEGIN TRANSACTION keeps track of the TRUNCATE command.
Hide answer
1. Single-row functions work with single row at a time. Multiple-row functions work with
data of multiple rows at a time.
2. The group by clause combines all those records that have identical values in a
particular field or any group of fields.
https://www.toptal.com/sql/interview-questions 12/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
‘Fizz’ for a numeric value or ‘Buzz’ for alphabetical value for all values in
that column.
®
Example:
…should output:
Hide answer
SELECT col, case when upper(col) = lower(col) then 'Fizz' else 'Buzz' end as FizzBu
Hide answer
When stored in a database, varchar2 uses only the allocated space. E.g. if you have a
varchar2(1999) and put 50 bytes in the table, it will use 52 bytes.
But when stored in a database, char always uses the maximum length and is blank-
padded. E.g. if you have char(1999) and put 50 bytes in the table, it will consume 2000
bytes.
C
A
P
O
N
E
Hide answer
By continuing to use this site you agree to our Cookie Policy. Got it
https://www.toptal.com/sql/interview-questions 13/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
Hide answer
ID
----
1
2
3
4
5
(5 rows)
By continuing to use this site you agree to our Cookie Policy. Got it
https://www.toptal.com/sql/interview-questions 14/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
Hide answer
5
10
15
Table is as follows:
ID C1 C2 C3
Hide answer
Col1 Col2
1 0
By continuing to use this site you agree to our Cookie Policy. Got it
https://www.toptal.com/sql/interview-questions 15/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
Col1 Col2
®
0 1
0 1
0 1
1 0
0 1
1 0
1 0
Hide answer
update table set col2 = case when col1 = 1 then 0 else 1 end
Hide answer
In MySQL:
In SQL Server:
https://www.toptal.com/sql/interview-questions 16/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
Hide answer
®
IN :
EXISTS :
Now the client wants to insert a record after the identity value 7 with its
identity value starting from 10 .
Hide answer
https://www.toptal.com/sql/interview-questions 17/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
How can you use a CTE to return the fifth highest (or Nth highest) salary
from a table?
Hide answer
Declare @N int
set @N = 5;
WITH CTE AS
(
SELECT Name, Salary, EmpID, RN = ROW_NUMBER()
OVER (ORDER BY Salary DESC)
FROM Employee
)
SELECT Name, Salary, EmpID
FROM CTE
WHERE RN = @N
x
------
2
-2
4
-4
-3
0
2
Write a single query to calculate the sum of all positive values of x and
he sumtoofuse
By continuing allthis
negative values
site you agree of Cookie
to our x . Policy. Got it
https://www.toptal.com/sql/interview-questions 18/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
Hide answer
®
select sum(case when x>0 then x else 0 end)sum_pos,sum(case when x<0 then x else 0
weight
5.67
34.567
365.253
34
Write a query that produces the output:
weight kg gms
5.67 5 67
34.567 34 567
34 34 0
Hide answer
10 Anil 50000 18
11 Vikas 75000 16
12 Nisha 40000 18
13 Nidhi 60000 17
14 Priya 80000 18
15 Mohit 45000 18
16 Rajesh 90000 –
17 Raman 55000 16
18 Santosh 65000 17
Write a query to generate below output:
16 Rajesh 65000
17 Raman 62500
18 Santosh 53750
Hide answer
By continuing to use this site you agree to our Cookie Policy. Got it
How do you copy data from one table to another table ?
https://www.toptal.com/sql/interview-questions 20/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
Hide answer
®
Find the SQL statement below that is equal to the following: SELECT name
FROM customer WHERE state = 'VA';
Hide answer
Id Name ReferredBy
1 John Doe NULL
2 Jane Smith NULL
3 Anne Jenkins 2
4 Eric Branford NULL
5 Pat Richards 1
6 Alice Barnes 2
What will be the result of the query? Why? What would be a better way
to writetoit?
By continuing use this site you agree to our Cookie Policy. Got it
https://www.toptal.com/sql/interview-questions 21/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
Hide answer
®
Although there are 4 customers not referred by Jane Smith (including Jane Smith herself),
the query will only return one: Pat Richards. All the customers who were referred by nobody
at all (and therefore have NULL in their ReferredBy column) don’t show up. But certainly
those customers weren’t referred by Jane Smith, and certainly NULL is not equal to 2, so
why didn’t they show up?
SQL Server uses three-valued logic, which can be troublesome for programmers
accustomed to the more satisfying two-valued logic (TRUE or FALSE) most programming
languages use. In most languages, if you were presented with two predicates: ReferredBy =
2 and ReferredBy <> 2, you would expect one of them to be true and one of them to be
false, given the same value of ReferredBy. In SQL Server, however, if ReferredBy is NULL,
neither of them are true and neither of them are false. Anything compared to NULL
evaluates to the third value in three-valued logic: UNKNOWN.
…or:
This will return the same faulty set as the original. Why? We already covered that: Anything
compared to NULL evaluates to the third value in the three-valued logic: UNKNOWN. That
“anything” includes NULL itself! That’s why SQL Server provides the IS NULL and IS NOT
NULL operators to specifically check for NULL. Those particular operators will always
evaluate to true or false.
Even if a candidate doesn’t have a great amount of experience with SQL Server, diving into
th i t i i f th l dl i i l i d i di ti f h th th
Given a table TBL with a field Nmbr that has rows with the following
values:
1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1
update TBL set Nmbr = case when Nmbr = 0 then Nmbr+2 else Nmbr+3 end;
CustomerID CustomerName
1 Prashant Kaurav
2 Ashish Jha
3 Ankit Varma
4 Vineet Kumar
5 Rahul Kumar
Prashant Kaurav; Ashish Jha; Ankit Varma; Vineet Kumar; Rahul Kumar
Hide answer
This is close, but will have an undesired trailing ; . One way of fixing that could be:
SELECT top 1
LTRIM(STUFF((SELECT '; ' + c1.CustomerName FROM Customer c1 FOR XML PATH (&
from Customer c2;
In PostgreSQL one can also use this syntax to achieve the fully correct result:
How do you get the Nth-highest salary from the Employee table without
By continuing to use this site you agree to our Cookie Policy. Got it
a subquery or CTE?
https://www.toptal.com/sql/interview-questions 23/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
Hide answer
®
This will give the third-highest salary from the Employee table. Accordingly we can find out
Nth salary using LIMIT (N-1),1 .
Hide answer
and the name of the customer who referred that customer (if any). The
list should
® be ordered by billing date.
Hide answer
This question simply tests the candidate’s ability take a plain-English requirement and write
a corresponding SQL query. There is nothing tricky in this one, it just covers the basics:
Did the candidate remember to use a LEFT JOIN instead of an inner JOIN when joining
the customer table for the referring customer name? If not, any invoices by customers
not referred by somebody will be left out altogether.
Did the candidate alias the tables in the JOIN? Most experienced T-SQL programmers
always do this, because repeating the full table name each time it needs to be
By continuing to use gets
referenced this site you agree
tedious to our
quickly. Cookie
In this case,Policy. Got it
the query would actually break if at least
https://www.toptal.com/sql/interview-questions 25/31
10/26/22, 10:49 PM 41 Essential SQL Interview Questions and Answers | Toptal®
the Customer table wasn’t aliased, because it is referenced twice in different contexts
(once as® the table which contains the name of the invoiced customer, and once as the
table which contains the name of the referring customer).
Did the candidate disambiguate the Id and Name columns in the SELECT? Again, this is
something most experienced programmers do automatically, whether or not there
would be a conflict. And again, in this case there would be a conflict, so the query would
break if the candidate neglected to do so.
Note that this query will not return Invoices that do not have an associated Customer. This
may be the correct behavior for most cases (e.g., it is guaranteed that every Invoice is
associated with a Customer, or unmatched Invoices are not of interest). However, in order to
guarantee that all Invoices are returned no matter what, the Invoices table should be joined
with Customers using LEFT JOIN:
* There is more to interviewing than tricky technical questions, so these are intended merely as a guide. Not
every “A” candidate worth hiring will be able to answer them all, nor does answering them all guarantee an “A”
candidate. At the end of the day, hiring remains an art, a science — and a lot of work.
WHY TOPTAL
By continuing to use this site you agree to our Cookie Policy. Got it
Vedansh Garg
https://www.toptal.com/sql/interview-questions 26/31