Advanced SQL Queries Interview Questions and Answers:
1. Select employee details from employee table if data exists in
incentive table ?
select * from EMPLOYEE where
exists (select * from INCENTIVES)
Explanation : Here "exists"
statement helps us to do the job of If statement. Main query will get executed
if the sub query returns at least one row. So we can consider the sub query as
"If condition" and the main query as "code block" inside
the If condition. We can use any SQL commands (Joins, Group By , having etc) in
sub query. This command will be useful in queries which need to detect an event
and do some activity.
2. How to
fetch data that are common in two query results ?
select * from EMPLOYEE where
EMPLOYEE_ID INTERSECT select * from EMPLOYEE where EMPLOYEE_ID < 4
Explanation : Here "INTERSECT"
command is used to fetch data that are common in 2 queries. In this example, we
had taken EMPLOYEE table in both the queries.We can apply INTERSECT command on
different tables. The result of the above query will return employee details of
"ROY" because, employee id of ROY is 3, and both query results have
the information about ROY.
3. Get Employee ID's of those employees
who didn't receive incentives without using sub query ?
select EMPLOYEE_ID from EMPLOYEE
MINUS
select EMPLOYEE_REF_ID from
INCENTIVES
Explanation : To filter out certain
information we use MINUS command. What MINUS Command odes is that, it returns
all the results from the first query, that are not part of the second query. In
our example, first three employees received the incentives. So query will
return employee id's 4 to 8.
4. Select 20 % of salary from John , 10% of Salary for Roy and for
other 15 % of salary from employee table
SELECT FIRST_NAME, CASE FIRST_NAME
WHEN 'John' THEN SALARY * .2 WHEN 'Roy' THEN SALARY * .10 ELSE SALARY * .15 END
"Deduced_Amount" FROM EMPLOYEE
Explanation : Here, we are using
"SQL CASE" statement to achieve the desired results. After case
statement, we had to specify the column on which filtering is applied. In our
case it is "FIRST_NAME". And in then condition, specify the name of
filter like John, Roy etc. To handle conditions outside our filter, use else
block where every one other than John and Roy enters.
5. Select Banking as 'Bank Dept', Insurance as 'Insurance Dept'
and Services as 'Services Dept' from employee table
SQL Queries in Oracle, SELECT
distinct DECODE (DEPARTMENT, 'Banking', 'Bank Dept', 'Insurance', 'Insurance
Dept', 'Services', 'Services Dept') FROM EMPLOYEE
SQL Queries in SQL Server and
MySQL, SELECT case DEPARTMENT when 'Banking' then 'Bank Dept' when 'Insurance'
then 'Insurance Dept' when 'Services' then 'Services Dept' end FROM EMPLOYEE
Explanation : Here "DECODE"
keyword is used to specify the alias name. In oracle we had specify, Column
Name followed by Actual Name and Alias Name as arguments. In SQL Server and
MySQL, we can use the earlier switch case statements for alias names.
6. Delete employee data from employee table who got incentives in
incentive table
delete from EMPLOYEE where
EMPLOYEE_ID in (select EMPLOYEE_REF_ID from INCENTIVES)
Explanation : Trick about this question
is that we can't delete data from a table based on some condition in another
table by joining them. Here to delete multiple entries from EMPLOYEE table, we
need to use Subquery. Entries will get deleted based on the result of Subquery.
7. Insert into employee table Last Name with " ' "
(Single Quote - Special Character)
Use another single quote before
special character
Insert into employee (LAST_NAME)
values ('Test''')
8. Select Last Name from employee table which contain only numbers
Select * from EMPLOYEE where
lower(LAST_NAME)=upper(LAST_NAME)
Explanation : In order to achieve the
desired result, we use "ASCII" property of the database. If we get
results for a column using Lower and Upper commands, ASCII of both results will
be same for numbers. If there is any alphabets in the column, results will
differ.
9. Write a query to rank employees based on their incentives
for a month
select
FIRST_NAME,INCENTIVE_AMOUNT,DENSE_RANK() OVER (PARTITION BY INCENTIVE_DATE
ORDER BY INCENTIVE_AMOUNT DESC) AS Rank from EMPLOYEE a, INCENTIVES b where
a.EMPLOYEE_ID=b.EMPLOYEE_REF_ID
Explanation : In order to rank employees
based on their rank for a month, "DENSE_RANK" keyword is used. Here
partition by keyword helps us to sort the column with which filtering is done.
Rank is provided to the column specified in the order by statement. The above
query ranks employees with respect to their incentives for a given month.
10. Update incentive table where employee name is 'John'
update INCENTIVES set
INCENTIVE_AMOUNT='9000' where EMPLOYEE_REF_ID=(select EMPLOYEE_ID from EMPLOYEE
where FIRST_NAME='John' )
Explanation : We need to join Employee
and Incentive Table for updating the incentive amount. But for update statement
joining query wont work. We need to use sub query to update the data in the
incentive table. SQL Query is as shown below.
"SQL Join" Interview Questions:
1. Select first_name, incentive amount from employee and
incentives table for those employees who have incentives
Select FIRST_NAME,INCENTIVE_AMOUNT
from employee a inner join incentives B on A.EMPLOYEE_ID=B.EMPLOYEE_REF_ID
2. Select first_name, incentive amount from employee and
incentives table for those employees who have incentives and incentive amount
greater than 3000
Select FIRST_NAME,INCENTIVE_AMOUNT
from employee a inner join incentives B on A.EMPLOYEE_ID=B.EMPLOYEE_REF_ID and
INCENTIVE_AMOUNT >3000
3. Select first_name, incentive amount from employee and
incentives table for all employes even if they didn't get incentives
Select FIRST_NAME,INCENTIVE_AMOUNT
from employee a left join incentives B on A.EMPLOYEE_ID=B.EMPLOYEE_REF_ID
SQL Interview Questions on "SQL Table Scripts":
1. Write create table syntax for employee table
CREATE TABLE EMPLOYEE (
EMPLOYEE_ID NUMBER,
FIRST_NAME VARCHAR2(20 BYTE),
LAST_NAME VARCHAR2(20 BYTE),
SALARY FLOAT(126),
JOINING_DATE TIMESTAMP (6) DEFAULT
sysdate,
DEPARTMENT VARCHAR2(30 BYTE) )
SQL Server -CREATE TABLE EMPLOYEE(
EMPLOYEE_ID int NOT NULL,
FIRST_NAME varchar(50) NULL,
LAST_NAME varchar(50) NULL,
SALARY decimal(18, 0) NULL,
JOINING_DATE datetime2(7) default
getdate(),
DEPARTMENT varchar(50) NULL)
2. Write
syntax to delete table employee
DROP table employee;
3. Write
syntax to set EMPLOYEE_ID as primary key in employee table
ALTER TABLE EMPLOYEE add
CONSTRAINT EMPLOYEE_PK PRIMARY KEY(EMPLOYEE_ID)
4. Write
syntax to set 2 fields(EMPLOYEE_ID,FIRST_NAME) as primary key in employee table
ALTER TABLE EMPLOYEE add
CONSTRAINT EMPLOYEE_PK PRIMARY KEY(EMPLOYEE_ID,FIRST_NAME)
5. Write
syntax to drop primary key on employee table
Alter TABLE EMPLOYEE drop
CONSTRAINT EMPLOYEE_PK;
6. Write Sql
Syntax to create EMPLOYEE_REF_ID in INCENTIVES table as foreign key with
respect to EMPLOYEE_ID in employee table
ALTER TABLE INCENTIVES ADD
CONSTRAINT INCENTIVES_FK FOREIGN KEY (EMPLOYEE_REF_ID) REFERENCES
EMPLOYEE(EMPLOYEE_ID)
7. Write SQL
to drop foreign key on employee table
ALTER TABLE INCENTIVES drop
CONSTRAINT INCENTIVES_FK;
8. Write SQL
to create Orcale Sequence
CREATE SEQUENCE EMPLOYEE_ID_SEQ
START WITH 0 NOMAXVALUE MINVALUE 0 NOCYCLE NOCACHE NOORDER;
9. Write Sql
syntax to create Oracle Trigger before insert of each row in employee table
CREATE OR REPLACE TRIGGER
EMPLOYEE_ROW_ID_TRIGGER
BEFORE INSERT ON EMPLOYEE FOR EACH
ROW
DECLARE
seq_no number(12);
BEGIN
select EMPLOYEE_ID_SEQ.nextval
into seq_no from dual ;
:new EMPLOYEE_ID :=seq_no;
END;
SHOW ERRORS;
10. What is
SQL Injection ?
SQL Injection is one of the the techniques uses by hackers to hack a
website by injecting SQL commands in data fields.
"SQL Union" Query Interview Questions:
1. Select First_Name,LAST_NAME from employee table as separate
rows
select FIRST_NAME from EMPLOYEE
union select LAST_NAME from EMPLOYEE
2. What is the difference between UNION and UNION ALL ?
Both UNION and UNION ALL is used to select information from structurally
similar tables. That means corresponding columns specified in the union should
have same data type. For example, in the above query, if FIRST_NAME is DOUBLE
and LAST_NAME is STRING above query wont work. Since the data type of both the
columns are VARCHAR, union is made possible. Difference between UNION and UNION
ALL is that , UNION query return only distinct values.
No comments:
Post a Comment