Professional Documents
Culture Documents
CUSTOMER
PITAB
PRODUCT
1. INNER JOIN
2. LEFT OUTER JOIN
3. RIGHT OUTER JOIN
4. FULL OUTER JOIN
5. CROSS JOIN
6. SELF JOIN
INNER JOIN: INNER JOIN IS USED TO FETCH MATCHING DATA FROM BOTH TABLES.
ON LEFT_TABLE.KEY_COLUMN=RIGHT_TABLE.KEY_COLUMN
SQL> SELECT *
FROM CUSTOMER INNER JOIN PITAB
ON CUSTOMER.CID=PITAB.CID;
IF BOTH TABLES HAVING SAME COLUMN NAMES THEN WE SHOULD DIFFERENCIATE THOSE BY USING
TABLE NAMES BEFORE COLUMN NAMES IN THE SELECT STATEMENT.
NOTE: AFTER CREATING ALIAS NAMES, IF WE USE TABLE NAMES ANYWHERE IN THAT QUERY THEN IT
WILL THROW ERROR.
CID CID
----- -----
1 1
2 2
2 2
4 4
5 5
NOTE: THOSE ALIAS NAMES ARE VALID ONLY IN THAT QUERY, IF THE EXECUTION OF QUERY IS OVER
THEN AUTOMATICALLY THOSE ALIAS NAMES WILL EXPIRE.
SQL> SELECT * FROM C; ---C IS THE ALIAS NAME OF CUSTOMER TABLE IN THE ABOVE QUERY
NOTE: WE CAN STORE THE RESULT OF SELECT STATEMENT AS A SEPERATE TABLE.
SQL> CREATE TABLE INNER_RESULT_TAB AS SELECT C.CNAME,A.PNAME FROM CUSTOMER C INNER JOIN
PITAB P ON C.CID=P.CID INNER JOIN PRODUCT A ON A.PID=P.PID;
Table created.
CNAME PNAME
---------- ----------
sai lap
nani pen drive
nani tab
renu mouse
SQL> SELECT *
FROM CUSTOMER C INNER JOIN PITAB P
ON C.CID=P.CID INNER JOIN PRODUCT PR
ON P.PID=PR.PID;
CID CNAME LOC IN SALES CID PID SALESAMT TAXAMT PID PNAME CLASS
------- -------- ------ ------ -------- ----- ------ ------------- ------ -------- ----------- -------
1 sai hyd P 10000 1 10 20000 1000 10 lap h
2 nani hyd K 40000 2 13 40000 1000 13 pen drive l
3 satya bang CH 20000 3 11 60000 1000 11 tab h
4 renu chennai M 25000 4 12 40000 1050 12 mouse l
CNAME PNAME
---------- ----------
sai lap
nani pen drive
nani tab
renu mouse
Syn:
SELECT */COL_LIST
FROM LEFT_TABLE LEFT OUTER JOIN RIGHT_TABLE
ON LEFT_TABLE.KEY_COL=RIGHT_TABLE.KEY_COL
SQL> SELECT *
FROM CUSTOMER C LEFT OUTER JOIN PITAB P
ON C.CID=P.CID;
WE CAN ALSO GET THE SAME RESULT BY USING INNER JOIN, BUT WE SHOULD USE + FOR RIGHT TABLE
IN ON CONDITION.
SQL> SELECT *
FROM CUSTOMER C INNER JOIN PITAB P
ON C.CID=P.CID(+);
CNAME SALESAMT
---------- --------
sai 20000
nani 40000
satya 60000
renu 40000
chandu 45000
santhosh
rajesh
SQL> SELECT *
FROM CUSTOMER C LEFT OUTER JOIN PITAB P
ON C.CID=P.CID WHERE P.CID IS NULL;
CID CNAME LOC IN SALES CID PID SALESAMT TAXAMT
----- ---------- ---------- -- ----- ----- -- --- ------ --------- ----- ----------- ------------
8 santhosh pune K 30000
9 rajesh bang M 10000
HERE RIGHT TABLE IS GIVING ONLY NULL VALUES, SO DONT REQUIRED RIGHT TABLE ATTRIBUTES HERE,
THEN WE SHOULD TAKE ATTRIBUTES FROM ONLY LEFT TABLE.
SQL> SELECT C.* FROM CUSTOMER C LEFT OUTER JOIN PITAB P ON C.CID=P.CID WHERE P.CID IS NULL;
SQL> SELECT CNAME FROM CUSTOMER C LEFT OUTER JOIN PITAB P ON C.CID=P.CID WHERE P.CID IS
NULL;
CNAME
---------
santhosh
rajesh
Syn:
SELECT */COL_LIST
FROM LEFT_TABLE RIGHT JOIN RIGHT_TABLE
ON LEFT_TABLE.KEY_COL=RIGHT_TABLE.KEY_COL;
SQL> SELECT *
FROM CUSTOMER C RIGHT JOIN PITAB P
ON C.CID=P.CID;
CID CNAME LOC IN SALES CID PID SALESAMT TAXAMT
---- ----------- ---------- -- ----- ----- ----- ----- -- ---------- --------------------
1 sai hyd P 10000 1 10 20000 1000
2 nani hyd K 40000 2 13 40000 1000
3 satya bang CH 20000 3 11 60000 1000
4 renu chennai M 25000 4 12 40000 1050
5 chandu pune S 45000 5 16 45000 1050
6 11 34000 1050
7 11 45000 1050
WE CAN ALSO GET SAME RESULT BUY USING INNER JOIN BUT WE SHOULD USE + FOR LEFT TABLE.
SQL> SELECT *
FROM CUSTOMER C INNER JOIN PITAB P
ON C.CID(+)=P.CID;
SQL> SELECT * FROM CUSTOMER C RIGHT JOIN PITAB P ON C.CID=P.CID WHERE C.CNAME IS NULL;
CID CNAME LOC IN SALES CID PID SALESAMT TAXAMT
----- ---------- ---------- -- ----- ----- ----- -------- ------------------------------
6 11 34000 1050
7 11 45000 1050
HERE CUSTOMER TABLE IS DISPLAYING ONLY NULL VALUES SO NO NEED OF CUSTOMER TABLE
ATTRIBUTES.
SQL> SELECT P.* FROM CUSTOMER C RIGHT JOIN PITAB P ON C.CID=P.CID WHERE C.CNAME IS NULL;
FULL JOIN: IT FETCHES MATCHING DATA AND REMAIN LEFT TABLE DATA AND ALSO REMAIN RIGHT
TABLE DATA.
SQL> SELECT *
FROM CUSTOMER C FULL JOIN PITAB P
ON C.CID=P.CID;
CID CID
----- -----
1 1
2 2
3 3
4 4
5 5
8
9
6
7
WE CAN ALSO GET SAME RESULT BY USING LEFT AND RIGHT JOINS ALONG WITH UNION OPERATOR.
CID CID
----- -----
1 1
2 2
3 3
4 4
5 5
8
9
6
7
SQL> SELECT *
FROM CUSTOMER C FULL JOIN PITAB P
ON C.CID=P.CID
WHERE C.CID IS NULL OR P.CID IS NULL;
SQL> SELECT C.CID,P.CID FROM CUSTOMER C FULL JOIN PITAB P ON C.CID=P.CID WHERE C.CID IS NULL
OR P.CID IS NULL;
CID CID
----- -----
8
9
6
7
CROSS JOIN: IT FETCHES BOTH MATCHING POSSIBILITIES AND NON MATCHING POSSIBILITIES.
IT WORKS LIKE A CROSS-TAB MODEL.
49 rows selected.
WE CAN SIMPLY USE ',' BETWEEN BOTH TABLES OR WE CAN MENTION CROSS JOIN.
BOTH WILL GIVE SAME RESULTS.
EMP TABLE:
----- ---------- --------- ----- --------- ----- ----- ------ -------------- ------- -------------- -------------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
SQL> SELECT E.ENAME AS EMPNAME,M.ENAME AS MGRNAME FROM EMP E,EMP M WHERE
E.MGR=M.EMPNO;
EMPNAME MGRNAME
---------- ----------
FORD JONES
SCOTT JONES
TURNER BLAKE
ALLEN BLAKE
WARD BLAKE
JAMES BLAKE
MARTIN BLAKE
MILLER CLARK
ADAMS SCOTT
BLAKE KING
JONES KING
CLARK KING
SMITH FORD
PRACTICE THE FOLLOWING ALL QUESTIONS: