assignment10
assignment10
1.What does UNION do? What is the difference between UNION and UNION ALL?
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.
2.List and explain the different types of JOIN clauses supported in ANSI-standard SQL.
● 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 CROSS JOIN syntax
(“explicit join notation”) or (b) listing the tables in the FROM clause separated by commas
without using a WHERE clause to supply join criteria (“implicit join notation”).
FROM runners;
+----+--------------+
1|Page
SHIKHA SHAH 2426035
| id | name | +----+--------------
+
| 1 | John Doe |
| 2 | Jane Doe |
| 3 | Alice Jones |
| 4 | Bobby Louis | |
5 | Lisa Romero |
+----+--------------+
-Explain your answer and also provide an alternative version of this query that will avoid the issue
that it exposes.
The query SELECT * FROM runners WHERE id NOT IN (SELECT winner_id FROM races) returns no
rows because the winner_id column contains NULL, and NOT IN with NULL results in UNKNOWN. To
fix this, use SELECT * FROM runners WHERE id NOT IN (SELECT winner_id FROM races WHERE
winner_id IS NOT NULL) or rewrite the query using a LEFT JOIN to exclude rows with matches.
CREATE TABLE dbo.docs(idnum int, pageseq int, doctext varchar(100)); INSERT INTO
INSERT INTO dbo.docs(idnum,pageseq) VALUES (1,5), (2,6), (null,0); What will the
UPDATE docs SET doctext=pageseq FROM docs INNER JOIN envelope ON envelope.id=docs.idnum
2|Page
SHIKHA SHAH 2426035
pageseq doctext
1 5 5
2 6 6
NULL 0 NULL
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.
5.Assume a schema of Emp ( Id, Name, DeptId ) , Dept ( Id, Name). 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:
-The query will result in 50 rows as a “cartesian product” or “cross join”, which is the default
whenever the ‘where’ clause is omitted.
6.Write a query to fetch values in table test_a that are and not in test_b without using the NOT
keyword.
This query performs a LEFT JOIN and checks for rows in test_a that do not have a match in test_b by
using the IS NULL condition.
7.Write a SQL query to find the 10th highest employee salary from an Employee table. Explain your
answer.
FROM (
FROM Employee
) AS Emp
ORDER BY Salary;
3|Page
SHIKHA SHAH 2426035
The query first retrieves the top 10 distinct salaries in descending order, then reorders them in
ascending order, and finally selects the smallest (10th highest) salary from this list.
8.Write a SQL query using UNION ALL (not UNION) that uses the WHERE clause to eliminate
duplicates. Why might you want to do 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.
9.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.
The query identifies users who attended the same training more than once on the same day by
grouping records by user, training, and date, filtering with HAVING
COUNT(user_training_id) > 1, and ordering by the most recent date. This ensures efficient retrieval of
duplicate training occurrences.
10.hat is an execution plan? When would you use it? How would you view the execution plan?
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 separate window
when a query is run.
11.List and explain each of the ACID properties that collectively guarantee that database
transactions are processed reliably.
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.
4|Page
SHIKHA SHAH 2426035
• 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 transaction.
• 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 permanently (even if
the database crashes immediately thereafter). To defend against power loss, transactions (or
their effects) must be recorded in a non-volatile memory.
12.Given a table dbo.users where the column user_id is a unique numeric identifier, how can you
efficiently select the first 100 odd user_id values from the table? (Assume the table contains well
over 100 records with odd user_id values.)
SELECT TOP 100 user_id FROM dbo.users WHERE user_id % 2 = 1 ORDER BY user_id;
13.What are the NVL and the NVL2 functions in SQL? How do they differ?
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.
14.How can you select all the even number records from a table? All the odd number records?
15.What is the difference between the RANK() and DENSE_RANK() functions? Provide an example.
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).
5|Page
SHIKHA SHAH 2426035
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 DENSE_RANK() will return {1,1,2,3,3,4}.
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).
17.Given a table Employee having columns empName and empId, what will be the result of the
SQL query below? select empName from Employee order by 2 desc;
“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.
18.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;
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.
19. 1.What is the difference between single-row functions and multiple-row functions?
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.
20.Imagine a single column in a table that is populated with either a single digit (0-9) or a single
character (a-z, A-Z). Write a SQL query to print ‘Fizz’ for a numeric value or ‘Buzz’ for alphabetical
value for all values in that column.
Example:
…should output:
6|Page
SHIKHA SHAH 2426035
SELECT col, case when upper(col) = lower(col) then 'Fizz' else 'Buzz' end as FizzBuzz from table;
UNION ALL
SELECT 'A'
UNION ALL
SELECT 'P'
UNION ALL
SELECT 'O'
UNION ALL
SELECT 'N'
UNION ALL
SELECT 'E';
Yes, it is possible to insert a row into a table with an identity column explicitly by using the
IDENTITY_INSERT feature.
7|Page
SHIKHA SHAH 2426035
SET IDENTITY_INSERT TABLE1 ON; -- Allow explicit values to be inserted into the identity column
INSERT INTO TABLE1 (ID, NAME) -- Explicitly specify the identity column (ID) and other columns
SELECT ID, NAME FROM TEMPTB1; -- Insert data from another table
ID
----
(5 rows)
10
15
25.Table is as follows:
ID C1 C2 C3
8|Page
SHIKHA SHAH 2426035
Print the rows which have ‘Yellow’ in one of the columns C1, C2, or C3, but without using OR.
26.Write a query to insert/update Col2’s values to look exactly opposite to Col1’s values.
Col1 Col2
1 0
0 1
0 1
0 1
1 0
0 1
9|Page
SHIKHA SHAH 2426035
1 0
1 0
update table set col2 = case when col1 = 1 then 0 else 1 end
In SQL Server:
IN:
Now the client wants to insert a record after the identity value 7 with its identity value starting
from 10.
Yes, it is possible to insert a record after the identity value 7 and start the identity value from
10 by reseeding the identity column using the DBCC CHECKIDENT command. CREATE TABLE
tableA (
10 | P a g e
SHIKHA SHAH 2426035
NVARCHAR(50)
);
('raga');
• DBCC CHECKIDENT allows you to manually control the identity seed value, which is especially
useful for scenarios like restoring data integrity after deletions or adjusting the sequence to
meet specific client requirements.
30.How can you use a CTE to return the fifth highest (or Nth highest) salary from a table?
To use a Common Table Expression (CTE) to return the 5th highest (or Nth highest) salary from a
table, you can use the ROW_NUMBER() window function to assign ranks based on the salary column.
SELECT Salary FROM ( SELECT Salary, ROW_NUMBER() OVER (ORDER BY Salary DESC) AS Rank FROM
Employee) AS RankedSalaries WHERE Rank = 5;
------
-2
-4
-3
11 | P a g e
SHIKHA SHAH 2426035
Write a single query to calculate the sum of all positive values of x and he sum of all negative
values of x.
SELECT (SELECT SUM(x) FROM A WHERE x > 0) AS positive_sum, (SELECT SUM(x) FROM A WHERE x <
0) AS negative_sum;
weight
5.67
34.567
365.253
34
weight kg gms
5.67 5 67
34.567 34 567
12 | P a g e
SHIKHA SHAH 2426035
34 34 0
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
13 | P a g e
SHIKHA SHAH 2426035
18 Santosh 65000 17
16 Rajesh 65000
17 Raman 62500
18 Santosh 53750
35.Find the SQL statement below that is equal to the following: SELECT name FROM customer
WHERE state = 'VA';
14 | P a g e
SHIKHA SHAH 2426035
3 Anne Jenkins 2
4 Eric Branford NULL
5 Pat Richards 1
6 Alice Barnes 2
Here is a query written to return the list of customers not referred by Jane Smith:
What will be the result of the query? Why? What would be a better way to write it? The query
37.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
CustomerID CustomerName
1 Prashant Kaurav
2 Ashish Jha
3 Ankit Varma
4 Vineet Kumar
5 Rahul Kumar
Write a single SQL statement to concatenate all the customer names into the following single
semicolon-separated string:
Prashant Kaurav; Ashish Jha; Ankit Varma; Vineet Kumar; Rahul Kumar
SELECT STUFF((SELECT '; ' + CustomerName FROM Customer FOR XML PATH('')), 1, 2, '') AS
CustomerNames;
15 | P a g e
SHIKHA SHAH 2426035
39.How do you get the Nth-highest salary from the Employee table without a subquery or CTE?
SELECT salary from Employee order by salary DESC OFFSET 2 ROWS FETCH NEXT 1 ROW ONLY;
SELECT name, COUNT(email) FROM users GROUP BY email HAVING COUNT(email) > 1 ;
SELECT name, email, COUNT(*) FROM users GROUP BY name, email HAVING COUNT(*) > 1;
41.Considering the database schema displayed in the SQLServer-style diagram below, write a SQL
query to return a list of all the invoices. For each invoice, show the Invoice ID, the billing date, the
customer’s name, and the name of the customer who referred that customer (if any). The list
should be ordered by billing date.
SELECT i.Id, i.BillingDate, c.Name, r.Name AS ReferredByName FROM Invoices i JOIN Customers c ON
i.CustomerId = c.Id LEFT JOIN Customers r ON c.ReferredBy = r.Id ORDER BY i.BillingDate;
16 | P a g e