Skip to main content

SQL: Subqueries

Comments

zahiruddin said…
Hi sir this is zahiruddin from QSPIDER,i have interview on saturday but am not getting the answer with these questions can u tel me the answer ...
1. Two tables emp (empid, name, deptid, sal) and dept(deptid, deptname) are there. Write a query which displays empname, corresponding deptname also display those employee names who do not belong to any dept.

2. Display the employees whose salary is less than average salary.

this is my mail id please froward it sir..
sayzaheer@gmail.com
Mithun Ashok said…
Hi Zahiruddin,

1. SELECT e.ename, e.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno (+) = d.deptno;

2. select * from emp where sal < (select avg(sal) from emp);

Have also sent this to your mail id.

Regards,
Mithun
baba said…
hello mithun u r a good looking and i want this answer can u explain plz explain how this query works
pradeep said…
can u plz explain how this query works

select a.sal from emp a
where 0=(select count(*) from emp b
where b.sal>a.sal)
/
Mithun Ashok said…
Hi Pradeep,

This is a co-related sub query. Please go through my presentation on Subqueries below.

SUBQUERIES

Regards,
Mithun
Anonymous said…
can u tel me how this query works

SELECT REPLACE(TRANSLATE(LTRIM(RTRIM('!! ATHEN !!','!'), '!'), 'AN', '**'),'*','TROUBLE') FROM DUAL;

we get this answer plz tel sir
TROUBLETHETROUBLE
Mithun Ashok said…
Hi Anonymous,

Always innermost function gets executed first,

check below,

SQL> select RTRIM('!! ATHEN !!','!') from dual;

RTRIM('!!
---------
!! ATHEN


You are first doing RTRIM and removing all ! from right side.

Next,

SQL> select LTRIM('!! ATHEN','!') from dual;

LTRIM(
------
ATHEN

You have used LTRIM to remove ! from left.

SQL> select TRANSLATE(' ATHEN', 'AN','**') from dual;

TRANSL
------
*THE*


Now you are using TRANSLATE function to replace A with * and N with *.

SQL> select REPLACE(' *THE*','*','TROUBLE') from dual;

REPLACE('*THE*','*
------------------
TROUBLETHETROUBLE

Finally you are replacing * with TROUBLE.


Hope this is clear.

Regards,
Mithun
aDDEr said…
Hello sir,
this is ravi here.
Would you please explain the following questions...
1>What is the advantage of JOINS over correlations??
2>Give some specific condition
when we should use joins and
when we should use correlation??
Pramodnkul90 said…
sir when we go for subqueries?i mean can u explain me wit 1 scenario?pls
veda said…
Two tables emp(empid,name,deptid,sal) and dept(deptid,deptname) are there.write a query which displays empname,corresponding deptname also display those employee names who donot belong to any dept.
thrupthi a said…
hai sir,how to display second row in the table??

Popular posts from this blog

SQL Interview Questions on Subqueries

SUB Queries:
1. List the employees working in research department 2. List employees who are located in New York and Chicago
3. Display the department name in which ANALYSTS are working
4. Display employees who are reporting to JONES
5. Display all the employees who are reporting to Jones Manager
6. Display all the managers in SALES and ACCOUNTING department
7. Display all the employee names in Research and Sales Department who are having at least 1 person reporting to them
8. Display all employees who do not have any reportees
9. List employees who are having at least 2 reporting
10. List the department names which are having more than 5 employees
11. List department name having at-least 3 salesman
12. List employees from research and accounting having at-least 2 reporting
13. Display second max salary
14. Display 4th max salary
15. Display 5th max salary  -- Answer for nth Max Salary
Co-Related Subqueries:
16. Write a query to get 4th max salary from EMP table
17. Write a query to get 2nd…

Answers for SUB Queries

1. SQL> select empno, ename from emp where deptno=(select deptno from dept where dname='RESEARCH');


2. SQL> select empno, ename from emp where deptno in (select deptno from dept where loc in ('NEW YORK','CHICAGO'));

3. SQL> select dname from dept where deptno in ( select deptno from emp where job ='ANALYST');

4. SQL> select empno, ename, mgr from emp where mgr = (select empno from emp where ename='JONES');

5. SQL> select empno, ename, mgr from emp where mgr = (select mgr from emp where ename='JONES')

6. SQL> select empno, ename, job from emp where deptno in ( select deptno from dept where dname in ('SALES','ACCOUNTING'))

7. SQL> select empno, ename, job from emp where deptno in ( select deptno from dept where dname in ('SALES','RESEARCH')) and empno in (select mgr from emp)

8. SQL> select empno, ename from emp where empno not in ( select mgr from emp where mgr is not null)

9. select…

'Linux-x86_64 Error: 28: No space left on device' While trying to start the database -- Error

SQL> startup mount pfile='/tmp/initdlfasp12.ora'
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device


This as you can see is on Linux x86 with 64 bit processor. We got this error after we changed SGA on 10gR2 database. So was sure that this is something to do with the OS.

Parameters to check for this are shmall.

shmall is the total amount of shared memory, in pages, that the system can use at one time.

$cat /proc/sys/kernel/shmmax
53687091200

$ getconf PAGE_SIZE
4096

As per Oracle SHMALL should be set to the total amount of physical RAM divided by page size.

Our system has 64GB memory, so change kernel.shmall = 1024 * 1024 * 1024 * 64 / 4096 = 16777216


Once this value is calculated you can modify Linux system configuration file directly.

$ su - root
vi /etc/sysctl.conf file:
kernel.shmall=16777216

and

# sysctl -p

Once this is done the database was started without any problem.