0% found this document useful (0 votes)
76 views13 pages

Microsoft SQL Server

bb

Uploaded by

prasatha90
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
Download as docx, pdf, or txt
0% found this document useful (0 votes)
76 views13 pages

Microsoft SQL Server

bb

Uploaded by

prasatha90
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1/ 13

Microsoft SQL Server # Interview Questions - (last updated on )

 Transact-SQL Optimization Tips


 Index Optimization tips
 T-SQL Queries
 Data Types
 Index
 Joins
 Lock
 Stored Procedure
 Trigger
 View
 Transaction
 Other
 XML
 Tools
 Permission
 Administration

Transact-SQL Optimization Tips

 Use views and stored procedures instead of heavy-duty queries.


This can reduce network traffic, because your client will send to server
only stored procedure or view name (perhaps with some parameters)
instead of large heavy-duty queries text. This can be used to facilitate
permission management also, because you can restrict user access to
table columns they should not see.
 Try to use constraints instead of triggers, whenever possible.
Constraints are much more efficient than triggers and can boost
performance. So, you should use constraints instead of triggers,
whenever possible.
 Use table variables instead of temporary tables.
Table variables require less locking and logging resources than
temporary tables, so table variables should be used whenever possible.
The table variables are available in SQL Server 2000 only.
 Try to use UNION ALL statement instead of UNION, whenever
possible.
The UNION ALL statement is much faster than UNION, because UNION
ALL statement does not look for duplicate rows, and UNION statement
does look for duplicate rows, whether or not they exist.
 Try to avoid using the DISTINCT clause, whenever possible.
Because using the DISTINCT clause will result in some performance
degradation, you should use this clause only when it is necessary.
 Try to avoid using SQL Server cursors, whenever possible.
SQL Server cursors can result in some performance degradation in
comparison with select statements. Try to use correlated sub-query or
derived tables, if you need to perform row-by-row operations.
 Try to avoid the HAVING clause, whenever possible.
The HAVING clause is used to restrict the result set returned by the

Page 1 of 13
GROUP BY clause. When you use GROUP BY with the HAVING clause, the
GROUP BY clause divides the rows into sets of grouped rows and
aggregates their values, and then the HAVING clause eliminates
undesired aggregated groups. In many cases, you can write your select
statement so, that it will contain only WHERE and GROUP BY clauses
without HAVING clause. This can improve the performance of your
query.
 If you need to return the total table's row count, you can use
alternative way instead of SELECT COUNT(*) statement.
Because SELECT COUNT(*) statement make a full table scan to return
the total table's row count, it can take very many time for the large
table. There is another way to determine the total row count in a table.
You can use sysindexes system table, in this case. There is ROWS
column in the sysindexes table. This column contains the total row count
for each table in your database. So, you can use the following select
statement instead of SELECT COUNT(*): SELECT rows FROM sysindexes
WHERE id = OBJECT_ID('table_name') AND indid < 2 So, you can
improve the speed of such queries in several times.
 Include SET NOCOUNT ON statement into your stored procedures
to stop the message indicating the number of rows affected by a
T-SQL statement.
This can reduce network traffic, because your client will not receive the
message indicating the number of rows affected by a T-SQL statement.
 Try to restrict the queries result set by using the WHERE clause.
This can results in good performance benefits, because SQL Server will
return to client only particular rows, not all rows from the table(s). This
can reduce network traffic and boost the overall performance of the
query.
 Use the select statements with TOP keyword or the SET
ROWCOUNT statement, if you need to return only the first n
rows.
This can improve performance of your queries, because the smaller
result set will be returned. This can also reduce the traffic between the
server and the clients.
 Try to restrict the queries result set by returning only the
particular columns from the table, not all table's columns.
This can results in good performance benefits, because SQL Server will
return to client only particular columns, not all table's columns. This can
reduce network traffic and boost the overall performance of the query.

1.Indexes
2.avoid more number of triggers on the table
3.unnecessary complicated joins
4.correct use of Group by clause with the select list
5.in worst cases Denormalization

Index Optimization tips

Page 2 of 13
 Every index increases the time in takes to perform INSERTS, UPDATES
and DELETES, so the number of indexes should not be very much. Try to
use maximum 4-5 indexes on one table, not more. If you have read-only
table, then the number of indexes may be increased.
 Keep your indexes as narrow as possible. This reduces the size of the
index and reduces the number of reads required to read the index.
 Try to create indexes on columns that have integer values rather than
character values.
 If you create a composite (multi-column) index, the order of the columns
in the key are very important. Try to order the columns in the key as to
enhance selectivity, with the most selective columns to the leftmost of
the key.
 If you want to join several tables, try to create surrogate integer keys
for this purpose and create indexes on their columns.
 Create surrogate integer primary key (identity for example) if your table
will not have many insert operations.
 Clustered indexes are more preferable than nonclustered, if you need to
select by a range of values or you need to sort results set with GROUP
BY or ORDER BY.
 If your application will be performing the same query over and over on
the same table, consider creating a covering index on the table.
 You can use the SQL Server Profiler Create Trace Wizard with "Identify
Scans of Large Tables" trace to determine which tables in your database
may need indexes. This trace will show which tables are being scanned
by queries instead of using an index.
 You can use sp_MSforeachtable undocumented stored procedure to
rebuild all indexes in your database. Try to schedule it to execute during
CPU idle time and slow production periods.
sp_MSforeachtable @command1="print '?' DBCC DBREINDEX ('?')"

T-SQL Queries

1. 2 tables

Employ
Phone
ee
empid
empnam empid
e phnumb
salary er
mgrid

2. Select all employees who doesn't have phone?


SELECT empname
FROM Employee
WHERE (empid NOT IN
(SELECT DISTINCT empid
FROM phone))
3. Select the employee names who is having more than one phone
numbers.

Page 3 of 13
SELECT empname
FROM employee
WHERE (empid IN
(SELECT empid
FROM phone
GROUP BY empid
HAVING COUNT(empid) > 1))
4. Select the details of 3 max salaried employees from employee table.
SELECT TOP 3 empid, salary
FROM employee
ORDER BY salary DESC
5. Display all managers from the table. (manager id is same as emp id)
SELECT empname
FROM employee
WHERE (empid IN
(SELECT DISTINCT mgrid
FROM employee))
6. Write a Select statement to list the Employee Name, Manager Name
under a particular manager?
SELECT e1.empname AS EmpName, e2.empname AS ManagerName
FROM Employee e1 INNER JOIN
Employee e2 ON e1.mgrid = e2.empid
ORDER BY e2.mgrid
7. 2 tables emp and phone.
emp fields are - empid, name
Ph fields are - empid, ph (office, mobile, home). Select all employees
who doesn't have any ph nos.
SELECT *
FROM employee LEFT OUTER JOIN
phone ON employee.empid = phone.empid
WHERE (phone.office IS NULL OR phone.office = ' ')
AND (phone.mobile IS NULL OR phone.mobile = ' ')
AND (phone.home IS NULL OR phone.home = ' ')
8. Find employee who is living in more than one city.
Two Tables:

Emp City
Empid
Empid
empName
City
Salary

9. SELECT empname, fname, lname


FROM employee
WHERE (empid IN
(SELECT empid
FROM city
GROUP BY empid
HAVING COUNT(empid) > 1))
10. Find all employees who is living in the same city. (table is same as
above)

Page 4 of 13
SELECT fname
FROM employee
WHERE (empid IN
(SELECT empid
FROM city a
WHERE city IN
(SELECT city
FROM city b
GROUP BY city
HAVING COUNT(city) > 1)))
11. There is a table named MovieTable with three columns -
moviename, person and role. Write a query which gets the movie details
where Mr. Amitabh and Mr. Vinod acted and their role is actor.
SELECT DISTINCT m1.moviename
FROM MovieTable m1 INNER JOIN
MovieTable m2 ON m1.moviename = m2.moviename
WHERE (m1.person = 'amitabh' AND m2.person = 'vinod' OR
m2.person = 'amitabh' AND m1.person = 'vinod') AND (m1.role =
'actor') AND (m2.role = 'actor')
ORDER BY m1.moviename
12. There are two employee tables named emp1 and emp2. Both
contains same structure (salary details). But Emp2 salary details are
incorrect and emp1 salary details are correct. So, write a query which
corrects salary details of the table emp2
update a set a.sal=b.sal from emp1 a, emp2 b where a.empid=b.empid
13. Given a Table named “Students” which contains studentid,
subjectid and marks. Where there are 10 subjects and 50 students.
Write a Query to find out the Maximum marks obtained in each subject.
14. In this same tables now write a SQL Query to get the studentid
also to combine with previous results.
15. Three tables – student , course, marks – how do go at finding
name of the students who got max marks in the diff courses.
SELECT student.name, course.name AS coursename, marks.sid,
marks.mark
FROM marks INNER JOIN
student ON marks.sid = student.sid INNER JOIN
course ON marks.cid = course.cid
WHERE (marks.mark =
(SELECT MAX(Mark)
FROM Marks MaxMark
WHERE MaxMark.cID = Marks.cID))
16. There is a table day_temp which has three columns dayid, day and
temperature. How do I write a query to get the difference of
temperature among each other for seven days of a week?
SELECT a.dayid, a.dday, a.tempe, a.tempe - b.tempe AS Difference
FROM day_temp a INNER JOIN
day_temp b ON a.dayid = b.dayid + 1
OR

Page 5 of 13
Select a.day, a.degree-b.degree from temperature a, temperature b
where a.id=b.id+1
17. There is a table which contains the names like this. a1, a2, a3, a3,
a4, a1, a1, a2 and their salaries. Write a query to get grand total salary,
and total salaries of individual employees in one query.
SELECT empid, SUM(salary) AS salary
FROM employee
GROUP BY empid WITH ROLLUP
ORDER BY empid
18. How to know how many tables contains empno as a column
in a database?
SELECT COUNT(*) AS Counter
FROM syscolumns
WHERE (name = 'empno')
19. Find duplicate rows in a table? OR I have a table with one
column which has many records which are not distinct. I need to
find the distinct values from that column and number of times it’s
repeated.
SELECT sid, mark, COUNT(*) AS Counter
FROM marks
GROUP BY sid, mark
HAVING (COUNT(*) > 1)
20. How to delete the rows which are duplicate (don’t delete
both duplicate records).
SET ROWCOUNT 1
DELETE yourtable
FROM yourtable a
WHERE (SELECT COUNT(*) FROM yourtable b WHERE b.name1 =
a.name1 AND b.age1 = a.age1) > 1
WHILE @@rowcount > 0
  DELETE yourtable
  FROM yourtable a
  WHERE (SELECT COUNT(*) FROM yourtable b WHERE b.name1 =
a.name1 AND b.age1 = a.age1) > 1
SET ROWCOUNT 0
21. How to find 6th highest salary
SELECT TOP 1 salary
FROM (SELECT DISTINCT TOP 6 salary
FROM employee
ORDER BY salary DESC) a
ORDER BY salary
22. Find top salary among two tables
SELECT TOP 1 sal
FROM (SELECT MAX(sal) AS sal
FROM sal1
UNION
SELECT MAX(sal) AS sal
FROM sal2) a
ORDER BY sal DESC

Page 6 of 13
23. Write a query to convert all the letters in a word to upper
case
SELECT UPPER('test')
24. Write a query to round up the values of a number. For
example even if the user enters 7.1 it should be rounded up to 8.
SELECT CEILING (7.1)
25. Write a SQL Query to find first day of month?
SELECT DATENAME(dw, DATEADD(dd, - DATEPART(dd, GETDATE()) + 1,
GETDATE())) AS FirstDay

Datepart Abbreviations
year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
weekday dw
hour hh
minute mi, n
second ss, s
millisecond ms

26. Table A contains column1 which is primary key and has 2 values
(1, 2) and Table B contains column1 which is primary key and has 2
values (2, 3). Write a query which returns the values that are not
common for the tables and the query should return one column with 2
records.
SELECT tbla.a
FROM tbla, tblb
WHERE tbla.a <>
(SELECT tblb.a
FROM tbla, tblb
WHERE tbla.a = tblb.a)
UNION
SELECT tblb.a
FROM tbla, tblb
WHERE tblb.a <>
(SELECT tbla.a
FROM tbla, tblb
WHERE tbla.a = tblb.a)

OR (better approach)

SELECT a
FROM tbla
WHERE a NOT IN
(SELECT a
Page 7 of 13
FROM tblb)
UNION ALL
SELECT a
FROM tblb
WHERE a NOT IN
(SELECT a
FROM tbla)
27. There are 3 tables Titles, Authors and Title-Authors (check PUBS
db). Write the query to get the author name and the number of books
written by that author, the result should start from the author who has
written the maximum number of books and end with the author who has
written the minimum number of books.
SELECT authors.au_lname, COUNT(*) AS BooksCount
FROM authors INNER JOIN
titleauthor ON authors.au_id = titleauthor.au_id INNER JOIN
titles ON titles.title_id = titleauthor.title_id
GROUP BY authors.au_lname
ORDER BY BooksCount DESC
28.
UPDATE emp_master
SET emp_sal =
CASE
WHEN emp_sal > 0 AND emp_sal <= 20000 THEN (emp_sal * 1.01)
WHEN emp_sal > 20000 THEN (emp_sal * 1.02)
END
29. List all products with total quantity ordered, if quantity ordered is
null show it as 0.
SELECT name, CASE WHEN SUM(qty) IS NULL THEN 0 WHEN SUM(qty)
> 0 THEN SUM(qty) END AS tot
FROM [order] RIGHT OUTER JOIN
product ON [order].prodid = product.prodid
GROUP BY name
Result:
coke 60
mirinda 0
pepsi 10
30. ANY, SOME, or ALL?
ALL means greater than every value--in other words, greater than the
maximum value. For example, >ALL (1, 2, 3) means greater than 3.
ANY means greater than at least one value, that is, greater than the
minimum. So >ANY (1, 2, 3) means greater than 1. SOME is an SQL-92
standard equivalent for ANY.
31. IN & = (difference in correlated sub query)

INDEX
32. What is Index? It’s purpose?
Indexes in databases are similar to indexes in books. In a database, an
index allows the database program to find data in a table without
scanning the entire table. An index in a database is a list of values in a

Page 8 of 13
table with the storage locations of rows in the table that contain each
value. Indexes can be created on either a single column or a
combination of columns in a table and are implemented in the form of B-
trees. An index contains an entry with one or more columns (the search
key) from each row in a table. A B-tree is sorted on the search key, and
can be searched efficiently on any leading subset of the search key. For
example, an index on columns A, B, C can be searched efficiently on A,
on A, B, and A, B, C.
33. Explain about Clustered and non clustered index? How to
choose between a Clustered Index and a Non-Clustered Index?
There are clustered and nonclustered indexes. A clustered index is a
special type of index that reorders the way records in the table are
physically stored. Therefore table can have only one clustered index. The
leaf nodes of a clustered index contain the data pages.
A nonclustered index is a special type of index in which the logical order
of the index does not match the physical stored order of the rows on
disk. The leaf nodes of a nonclustered index does not consist of the data
pages. Instead, the leaf nodes contain index rows.
Consider using a clustered index for:
o Columns that contain a large number of distinct values.
o Queries that return a range of values using operators such as
BETWEEN, >, >=, <, and <=.
o Columns that are accessed sequentially.
o Queries that return large result sets.
Non-clustered indexes have the same B-tree structure as clustered
indexes, with two significant differences:
o The data rows are not sorted and stored in order based on their
non-clustered keys.
o The leaf layer of a non-clustered index does not consist of the data
pages. Instead, the leaf nodes contain index rows. Each index row
contains the non-clustered key value and one or more row locators
that point to the data row (or rows if the index is not unique)
having the key value.
o Per table only 249 non clustered indexes.
34. Disadvantage of index?
Every index increases the time in takes to perform INSERTS, UPDATES
and DELETES, so the number of indexes should not be very much.
35. Given a scenario that I have a 10 Clustered Index in a Table
to all their 10 Columns. What are the advantages and
disadvantages?
A: Only 1 clustered index is possible.
36. How can I enforce to use particular index?
You can use index hint (index=<index_name>) after the table name.
SELECT au_lname FROM authors (index=aunmind)
37. What is Index Tuning?
One of the hardest tasks facing database administrators is the selection
of appropriate columns for non-clustered indexes. You should consider
creating non-clustered indexes on any columns that are frequently
referenced in the WHERE clauses of SQL statements. Other good

Page 9 of 13
candidates are columns referenced by JOIN and GROUP BY operations.
You may wish to also consider creating non-clustered indexes that cover
all of the columns used by certain frequently issued queries. These
queries are referred to as “covered queries” and experience excellent
performance gains.
Index Tuning is the process of finding appropriate column for non-
clustered indexes.
SQL Server provides a wonderful facility known as the Index Tuning
Wizard which greatly enhances the index selection process.
38. Difference between Index defrag and Index rebuild?
When you create an index in the database, the index information used
by queries is stored in index pages. The sequential index pages are
chained together by pointers from one page to the next. When changes
are made to the data that affect the index, the information in the index
can become scattered in the database. Rebuilding an index reorganizes
the storage of the index data (and table data in the case of a clustered
index) to remove fragmentation. This can improve disk performance by
reducing the number of page reads required to obtain the requested
data
DBCC INDEXDEFRAG - Defragments clustered and secondary indexes of
the specified table or view.
**
39. What is sorting and what is the difference between sorting
& clustered indexes?
The ORDER BY clause sorts query results by one or more columns up to
8,060 bytes. This will happen by the time when we retrieve data from
database. Clustered indexes physically sorting data, while
inserting/updating the table.
40. What are statistics, under what circumstances they go out
of date, how do you update them?
Statistics determine the selectivity of the indexes. If an indexed column
has unique values then the selectivity of that index is more, as opposed
to an index with non-unique values. Query optimizer uses these indexes
in determining whether to choose an index or not while executing a
query.
Some situations under which you should update statistics:
1) If there is significant change in the key values in the index
2) If a large amount of data in an indexed column has been added,
changed, or removed (that is, if the distribution of key values has
changed), or the table has been truncated using the TRUNCATE TABLE
statement and then repopulated
3) Database is upgraded from a previous version
41. What is fillfactor? What is the use of it ? What happens
when we ignore it? When you should use low fill factor?
When you create a clustered index, the data in the table is stored in the
data pages of the database according to the order of the values in the
indexed columns. When new rows of data are inserted into the table or
the values in the indexed columns are changed, Microsoft® SQL
Server™ 2000 may have to reorganize the storage of the data in the

Page 10 of 13
table to make room for the new row and maintain the ordered storage of
the data. This also applies to nonclustered indexes. When data is added
or changed, SQL Server may have to reorganize the storage of the data
in the nonclustered index pages. When a new row is added to a full
index page, SQL Server moves approximately half the rows to a new
page to make room for the new row. This reorganization is known as a
page split. Page splitting can impair performance and fragment the
storage of the data in a table.
When creating an index, you can specify a fill factor to leave extra gaps
and reserve a percentage of free space on each leaf level page of the
index to accommodate future expansion in the storage of the table's
data and reduce the potential for page splits. The fill factor value is a
percentage from 0 to 100 that specifies how much to fill the data pages
after the index is created. A value of 100 means the pages will be full
and will take the least amount of storage space. This setting should be
used only when there will be no changes to the data, for example, on a
read-only table. A lower value leaves more empty space on the data
pages, which reduces the need to split data pages as indexes grow but
requires more storage space. This setting is more appropriate when
there will be changes to the data in the table.

DATA TYPES
42. What are the data types in SQL

bigint Binary bit char cursor


datetime Decimal float image int
money Nchar ntext nvarchar real
smalldatetime Smallint smallmoney text timestamp
tinyint Varbinary Varchar uniqueidentifier  

43. Difference between char and nvarchar / char and varchar


data-type?
char[(n)] - Fixed-length non-Unicode character data with length of n
bytes. n must be a value from 1 through 8,000. Storage size is n bytes.
The SQL-92 synonym for char is character.
nvarchar(n) - Variable-length Unicode character data of n characters. n
must be a value from 1 through 4,000. Storage size, in bytes, is two
times the number of characters entered. The data entered can be 0
characters in length. The SQL-92 synonyms for nvarchar are national
char varying and national character varying.
varchar[(n)] - Variable-length non-Unicode character data with length of
n bytes. n must be a value from 1 through 8,000. Storage size is the
actual length in bytes of the data entered, not n bytes. The data entered
can be 0 characters in length. The SQL-92 synonyms for varchar are
char varying or character varying.
44. GUID datasize?
128bit

Page 11 of 13
45. How GUID becoming unique across machines?
To ensure uniqueness across machines, the ID of the network card is
used (among others) to compute the number.
46. What is the difference between text and image data type?
Text and image. Use text for character data if you need to store more
than 255 characters in SQL Server 6.5, or more than 8000 in SQL Server
7.0. Use image for binary large objects (BLOBs) such as digital images.
With text and image data types, the data is not stored in the row, so the
limit of the page size does not apply.All that is stored in the row is a
pointer to the database pages that contain the data.Individual text,
ntext, and image values can be a maximum of 2-GB, which is too long to
store in a single data row.

JOINS
47. What are joins?
Sometimes we have to select data from two or more tables to make our
result complete. We have to perform a join.
48. How many types of Joins?
Joins can be categorized as:

o Inner joins (the typical join operation, which uses some


comparison operator like = or <>). These include equi-joins and
natural joins.
Inner joins use a comparison operator to match rows from two
tables based on the values in common columns from each table.
For example, retrieving all rows where the student identification
number is the same in both the students and courses tables.
o Outer joins. Outer joins can be a left, a right, or full outer join.
Outer joins are specified with one of the following sets of keywords
when they are specified in the FROM clause:
 LEFT JOIN or LEFT OUTER JOIN -The result set of a left outer
join includes all the rows from the left table specified in the
LEFT OUTER clause, not just the ones in which the joined
columns match. When a row in the left table has no
matching rows in the right table, the associated result set
row contains null values for all select list columns coming
from the right table.
 RIGHT JOIN or RIGHT OUTER JOIN - A right outer join is the
reverse of a left outer join. All rows from the right table are
returned. Null values are returned for the left table any time
a right table row has no matching row in the left table.
 FULL JOIN or FULL OUTER JOIN - A full outer join returns all
rows in both the left and right tables. Any time a row has no
match in the other table, the select list columns from the
other table contain null values. When there is a match
between the tables, the entire result set row contains data
values from the base tables.
o Cross joins - Cross joins return all rows from the left table, each
row from the left table is combined with all rows from the right

Page 12 of 13
table. Cross joins are also called Cartesian products. (A
Cartesian join will get you a Cartesian product. A Cartesian join is
when you join every row of one table to every row of another
table. You can also get one by joining every row of a table to every
row of itself.)
 What is self join?
A table can be joined to itself in a self-join.
 What are the differences between UNION and JOINS?
A join selects columns from 2 or more tables. A union selects rows.
 Can I improve performance by using the ANSI-style joins
instead of the old-style joins?
Code Example 1:
select o.name, i.name
from sysobjects o, sysindexes i
where o.id = i.id
Code Example 2:
select o.name, i.name
from sysobjects o inner join sysindexes i
on o.id = i.id
You will not get any performance gain by switching to the ANSI-
style JOIN syntax.
Using the ANSI-JOIN syntax gives you an important advantage:
Because the join logic is cleanly separated from the filtering
criteria, you can understand the query logic more quickly.
The SQL Server old-style JOIN executes the filtering conditions
before executing the joins, whereas the ANSI-style JOIN reverses
this procedure (join logic precedes filtering).
Perhaps the most compelling argument for switching to the ANSI-
style JOIN is that Microsoft has explicitly stated that SQL Server
will not support the old-style OUTER JOIN syntax indefinitely.
Another important consideration is that the ANSI-style JOIN
supports query constructions that the old-style JOIN syntax does
not support.
 What is derived table?
Derived tables are SELECT statements in the FROM clause referred to by an alias
or a user-specified name. The result set of the SELECT in the FROM clause forms a
table used by the outer SELECT statement. For example, this SELECT uses a
derived table to find if any store carries all book titles in the pubs database:
SELECT ST.stor_id, ST.stor_name
FROM stores AS ST,
     (SELECT stor_id, COUNT(DISTINCT title_id) AS title_count
      FROM sales
      GROUP BY stor_id
     ) AS SA
WHERE ST.stor_id = SA.stor_id
AND SA.title_count = (SELECT COUNT(*) FROM titles)

Page 13 of 13

You might also like