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

assignment10

The document provides an overview of SQL concepts including UNION, JOIN types, and query examples. It explains the differences between various SQL functions, such as RANK() vs DENSE_RANK(), and discusses ACID properties of database transactions. Additionally, it covers practical SQL queries for data manipulation and retrieval, including handling NULL values and performance considerations.

Uploaded by

bipos26556
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)
8 views

assignment10

The document provides an overview of SQL concepts including UNION, JOIN types, and query examples. It explains the differences between various SQL functions, such as RANK() vs DENSE_RANK(), and discusses ACID properties of database transactions. Additionally, it covers practical SQL queries for data manipulation and retrieval, including handling NULL values and performance considerations.

Uploaded by

bipos26556
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/ 16

SHIKHA SHAH 2426035

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.

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 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”).

3.Given table: sql> SELECT *

FROM runners;

+----+--------------+

1|Page
SHIKHA SHAH 2426035

| id | name | +----+--------------
+
| 1 | John Doe |
| 2 | Jane Doe |
| 3 | Alice Jones |
| 4 | Bobby Louis | |
5 | Lisa Romero |
+----+--------------+

sql> SELECT * FROM races;


+----+----------------+-----------+
| id | event | winner_id | +---
-+----------------+-----------+
| 1 | 100 meter dash | 2 |
| 2 | 500 meter dash | 3 |
| 3 | cross-country | 2 |
| 4 | triathalon | NULL |
+----+----------------+-----------+

What will be the result of the query below?

SELECT * FROM runners WHERE id NOT IN (SELECT winner_id FROM races)

-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.

4.Given two tables created and populated as follows:

CREATE TABLE dbo.envelope(id int, user_id int);

CREATE TABLE dbo.docs(idnum int, pageseq int, doctext varchar(100)); INSERT INTO

dbo.envelope VALUES (1,1), (2,2), (3,3);

INSERT INTO dbo.docs(idnum,pageseq) VALUES (1,5), (2,6), (null,0); What will the

result be from the following query:

UPDATE docs SET doctext=pageseq FROM docs INNER JOIN envelope ON envelope.id=docs.idnum

WHERE EXISTS ( SELECT 1 FROM dbo.docs WHERE id=envelope.id);

2|Page
SHIKHA SHAH 2426035

-The result of the query will be as follows: idnum

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:

Select * From Emp, Dept

-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.

SELECT id FROM test_a

LEFT JOIN test_b ON test_a.id = test_b.id

WHERE test_b.id IS NULL;

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.

SELECT TOP (1) Salary

FROM (

SELECT DISTINCT TOP (10) Salary

FROM Employee

ORDER BY Salary DESC

) 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.

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;

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?

To select all the even number records from a table:

Select * from table where id % 2 = 0 ;

To select all the odd number records from a table:

Select * from table where id % 2 != 0;

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}.

16.What is the difference between the WHERE and HAVING clauses?

When GROUP BY is not used, the WHERE and HAVING clauses are essentially equivalent.

However, when GROUP BY is used:

• 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?

2.What is the group by clause used for?

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:

['d', 'x', 'T', 8, 'a', 9, 6, 2, 'V']

…should output:

['Buzz', 'Buzz', 'Buzz', 'Fizz', 'Buzz','Fizz', 'Fizz', 'Fizz', 'Buzz']

6|Page
SHIKHA SHAH 2426035

SELECT col, case when upper(col) = lower(col) then 'Fizz' else 'Buzz' end as FizzBuzz from table;

21.What is the difference between char and varchar2?


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.

22.Write an SQL query to display the text CAPONE as:

Or in other words, an SQL query to transpose text.


You can achieve this by using an SQL query with a UNION ALL to split and display each character on a
new row. Here's the query:

SELECT 'C' AS letter

UNION ALL

SELECT 'A'

UNION ALL

SELECT 'P'

UNION ALL

SELECT 'O'

UNION ALL

SELECT 'N'

UNION ALL

SELECT 'E';

23.Can we insert a row for identity column implicitly?

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

SET IDENTITY_INSERT TABLE1 OFF; -- Disable the identity insertion

24.Given this table:

Testdb=# Select * FROM "Test"."EMP";

ID

----

(5 rows)

What will be the output of below snippet?

Select SUM(1) FROM "Test"."EMP";


Select SUM(2) FROM "Test"."EMP";

Select SUM(3) FROM "Test"."EMP";

10

15

25.Table is as follows:

ID C1 C2 C3

1 Red Yellow Blue

8|Page
SHIKHA SHAH 2426035

2 NULL Red Green

3 Yellow NULL Violet

Print the rows which have ‘Yellow’ in one of the columns C1, C2, or C3, but without using OR.

SELECT * FROM table WHERE 'Yellow' IN (C1, C2, C3);

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

27.How do you get the last id without the max function?

In SQL Server:

select top 1 id from table order by id desc;

28.What is the difference between IN and EXISTS?

IN:

• Works on List result set

• Doesn’t work on subqueries resulting in Virtual tables with multiple columns

• Compares every value in the result list

• Performance is comparatively SLOW for larger resultset of subquery EXISTS:

• Works on Virtual tables

• Is used with co-related queries

• Exits comparison when match is found

• Performance is comparatively FAST for larger resultset of subquery

29.Suppose in a table, seven records are there.

The column is an identity column.

Now the client wants to insert a record after the identity value 7 with its identity value starting
from 10.

Is it possible? If so, how? If not, why not?

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

id INT IDENTITY, name

NVARCHAR(50)

);

INSERT INTO tableA VALUES ('ram');

INSERT INTO tableA VALUES ('rahim');

INSERT INTO tableA VALUES ('roja');

INSERT INTO tableA VALUES ('rahman');

INSERT INTO tableA VALUES ('rani');

INSERT INTO tableA VALUES ('raja');

INSERT INTO tableA VALUES

('raga');

Why Use DBCC CHECKIDENT:

• 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;

31.Given the following table named A:

------

-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;

32.Given the table mass_table:

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

12 | P a g e
SHIKHA SHAH 2426035

365.253 365 253

34 34 0

select weight, trunc(weight) as kg, nvl(substr(weight - trunc(weight), 2), 0) as

gms from mass_table;

33.Consider the Employee table below.

Emp_Id Emp_name Salary Manager_Id

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

Write a query to generate below output:

Manager_Id Manager Average_Salary_Under_Manager

16 Rajesh 65000

17 Raman 62500

18 Santosh 53750

select b.emp_id as "Manager_Id", b.emp_name as "Manager", avg(a.salary) as


"Average_Salary_Under_Manager" from Employee a, Employee b where a.manager_id = b.emp_id
group by b.emp_id, b.emp_name order by b.emp_id;

34.How do you copy data from one table to another table ?

INSERT INTO table2 (column1, column2, column3, ...)

SELECT column1, column2, column3, ... FROM table1 WHERE condition;

35.Find the SQL statement below that is equal to the following: SELECT name FROM customer
WHERE state = 'VA';

SELECT name FROM customer WHERE state IN ('VA');

36.Given these contents of the Customers table:


Id Name ReferredBy

1 John Doe NULL

14 | P a g e
SHIKHA SHAH 2426035

2 Jane Smith NULL

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:

SELECT Name FROM Customers WHERE ReferredBy <> 2;

What will be the result of the query? Why? What would be a better way to write it? The query

should be written in one of two ways:

SELECT Name FROM Customers WHERE ReferredBy IS NULL OR ReferredBy <> 2;

SELECT Name FROM Customers WHERE ISNULL(ReferredBy, 0) <> 2; -- (Or COALESCE() );

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

Write a query to add 2 where Nmbr is 0 and add 3 where Nmbr is 1.

UPDATE TBL

SET Nmbr = Nmbr + 2 * (Nmbr = 0) + 3 * (Nmbr = 1);

38.Suppose we have a Customer table containing the following data:

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;

40.How to find a duplicate record?

1. duplicate records with one field

SELECT name, COUNT(email) FROM users GROUP BY email HAVING COUNT(email) > 1 ;

2. duplicate records with more than one field

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

You might also like