Here we are going through different types of Joins, special queries used in Oracle.
Implicit JOIN:
SELECT * FROM A, B WHERE A.column = B.column(+)
Explicit JOINs associate join conditions with a specific table's inclusion instead of in a WHERE clause.
from emp a , emp b
where a.empno = b.mgr
The placement of the (+) determines RIGHT or LEFT. (Specifically, if the (+) is on the right, it's a LEFT JOIN. If (+) is on the left, it's a RIGHT JOIN.
select dept.deptno, sum(sal) from emp , dept where emp.deptno(+) = dept.deptno
group by dept.deptno
d.deptno, d.loc
FROM emp e JOIN dept d
ON (e.deptno = d.deptno);
FROM emp a
start with a.ename = 'KING'
CONNECT BY PRIOR a.empno = a.mgr
select lpad(' ',2*level)||ename organization_chart
from emp
connect by prior empno = mgr
start with ename = 'KING';
Sub Query:select * from emp where deptno in (select deptno from dept)
select * from emp where deptno = (select deptno from dept where dname = 'SALES')
FROM emp outer
WHERE sal > (SELECT AVG(sal)
FROM emp
WHERE deptno =
outer.deptno)
select max(rowid) from tests
group by name
)
Create Index:
create index emp_no on emp(deptno)
Types of JOIN:
Implicit JOIN:
SELECT * FROM A, B WHERE A.column = B.column(+)
- Implicit JOINs simply list all tables together.
- The join conditions are specified in a WHERE clause.
Explicit JOIN:
SELECT * FROM A LEFT OUTER JOIN B ON A.column = B.columnExplicit JOINs associate join conditions with a specific table's inclusion instead of in a WHERE clause.
Natural Join:
select * from emp natural join dept
Equi Join:
select * from emp , dept where dept.deptno = emp.deptno
Self Join:
Select a.empno, a.ename, b.empno,b.enamefrom emp a , emp b
where a.empno = b.mgr
Cartesian - Cross Join:
select * from emp, dept
LEFT OUTER JOIN:
SELECT * FROM A, B WHERE A.column = B.column(+)
RIGHT OUTER JOIN:
SELECT * FROM A, B WHERE B.column(+) = A.columnThe placement of the (+) determines RIGHT or LEFT. (Specifically, if the (+) is on the right, it's a LEFT JOIN. If (+) is on the left, it's a RIGHT JOIN.
Group By:
select deptno, sum(sal) from emp group by deptnoselect dept.deptno, sum(sal) from emp , dept where emp.deptno(+) = dept.deptno
group by dept.deptno
Using clause:
SELECT emp.empno, ename, dept.loc, deptno FROM emp JOIN dept USING (deptno) ;
ON Clause:
SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc
FROM emp e JOIN dept d
ON (e.deptno = d.deptno);
Connect BY.. Tree Structure:
SELECT a.empno, a.ename, a.mgrFROM emp a
start with a.ename = 'KING'
CONNECT BY PRIOR a.empno = a.mgr
select lpad(' ',2*level)||ename organization_chart
from emp
connect by prior empno = mgr
start with ename = 'KING';
Sub Query:select * from emp where deptno in (select deptno from dept)
select * from emp where deptno = (select deptno from dept where dname = 'SALES')
Correlated:
SELECT ename, sal, deptnoFROM emp outer
WHERE sal > (SELECT AVG(sal)
FROM emp
WHERE deptno =
outer.deptno)
Delete duplicate records:
delete from tests where rowid not in (select max(rowid) from tests
group by name
)
Create Index:
create index emp_no on emp(deptno)
--If there are any locks on the db.
Select session_id "sid",SERIAL# "Serial",
substr(object_name,1,20) "Object",
substr(os_user_name,1,10) "Terminal",
substr(oracle_username,1,10) "Locker",
nvl(lockwait,'active') "Wait",
decode(locked_mode,
2, 'row share',
3, 'row
exclusive',
4, 'share',
5, 'share row
exclusive',
6,
'exclusive', 'unknown')
"Lockmode",
OBJECT_TYPE
"Type"
FROM
SYS.V_$LOCKED_OBJECT A,
SYS.ALL_OBJECTS
B,
SYS.V_$SESSION c
WHERE
A.OBJECT_ID =
B.OBJECT_ID AND
C.SID =
A.SESSION_ID
ORDER BY 1 ASC, 5 Desc
--Session count
Select SESSIONS_CURRENT "current sessions",
SESSIONS_HIGHWATER "highwater sessions" from v$license;
--Maximum number of process
Select SESSIONS_CURRENT "current sessions",
SESSIONS_HIGHWATER "highwater sessions" from v$license;
--Session Info
character
Select s.username||'@||
s.command||'@'||
s.lockwait||'@'||
s.status
||'@'||
s.schemaname||'@'||
s.osuser||'@||
s.process||'@'||
s.machine||'@'||
s.terminal||'@'||
s.program||'@'||
s.type||'@'||
s.row_wait_row||'@'||
s.logon_time||'@||
s.last_call_et||'@'||
s.blocking_session_status||'@'||
s.blocking_instance||'@'||
s.blocking_session||'@'||
s.wait_time||'@'||
s.seconds_in_wait||'@'||
s.state||'@'||
s.service_name from v$session s
--If there are any locks on the db.
Select session_id "sid",SERIAL# "Serial",
substr(object_name,1,20) "Object",
substr(os_user_name,1,10) "Terminal",
substr(oracle_username,1,10) "Locker",
nvl(lockwait,'active') "Wait",
decode(locked_mode,
2, 'row share',
3, 'row
exclusive',
4, 'share',
5, 'share row
exclusive',
6,
'exclusive', 'unknown')
"Lockmode",
OBJECT_TYPE
"Type"
FROM
SYS.V_$LOCKED_OBJECT A,
SYS.ALL_OBJECTS
B,
SYS.V_$SESSION c
WHERE
A.OBJECT_ID =
B.OBJECT_ID AND
C.SID =
A.SESSION_ID
ORDER BY 1 ASC, 5 Desc
--Session count
Select SESSIONS_CURRENT "current sessions",
SESSIONS_HIGHWATER "highwater sessions" from v$license;
--Maximum number of process
Select SESSIONS_CURRENT "current sessions",
SESSIONS_HIGHWATER "highwater sessions" from v$license;
No comments:
Post a Comment