You are on page 1of 14

JOINS: JOINS ARE USED TO FETCH REQUIRED DATA FROM REQUIRED TABLES..

CUSTOMER

CID CNAME LOC IN SALES


---------- ---------- ---------- --------- -- ---------
1 sai hyd P 10000
2 nani hyd K 40000
3 satya bang CH 20000
4 renu Chennai M 25000
5 chandu pune S 45000
8 santhosh pune K 30000
9 rajesh bang M 10000

PITAB

CID PID SALESAMT TAXAMT


-------- ---------- ---------- --- -------
1 10 20000 1000
2 13 40000 1000
2 11 60000 1000
4 12 40000 1050
5 16 45000 1050
7 11 45000 1050
6 11 34000 1050

PRODUCT

PID PNAME CLASS


---------- ---------- ---------
10 lap h
11 tab h
12 mouse l
13 pen drive l
14 pen l
15 disk m
JOINS ARE DIFFRENT TYPES:

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.

Syn: SELECT */COL_LIST

FROM LEFT_TABLE INNER JOIN RIGHT_TABLE

ON LEFT_TABLE.KEY_COLUMN=RIGHT_TABLE.KEY_COLUMN

SQL> SELECT *
FROM CUSTOMER INNER JOIN PITAB
ON CUSTOMER.CID=PITAB.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
2 nani hyd K 40000 2 11 60000 1000
4 renu chennai M 25000 4 12 40000 1050
5 chandu pune S 45000 5 16 45000 1050

SQL> SELECT CID,CID


FROM CUSTOMER INNER JOIN PITAB
ON CUSTOMER.CID=PITAB.CID;

SQL> SELECT CID,CID


FROM CUSTOMER INNER JOIN PITAB
ON CUSTOMER.CID=PITAB.CID

IT WILL THROW AN AMBIGUOUSLY DEFINED ERROR

IF BOTH TABLES HAVING SAME COLUMN NAMES THEN WE SHOULD DIFFERENCIATE THOSE BY USING
TABLE NAMES BEFORE COLUMN NAMES IN THE SELECT STATEMENT.

SQL> SELECT CUSTOMER.CID,PITAB.CID


FROM CUSTOMER INNER JOIN PITAB
ON CUSTOMER.CID=PITAB.CID;
CID CID
----- -----
1 1
2 2
2 2
4 4
5 5

BY USING ALIAS NAMES

SQL> SELECT CUSTOMER.CID,PITAB.CID FROM CUSTOMER C INNER JOIN PITAB P ON


CUSTOMER.CID=PITAB.CID;

NOTE: AFTER CREATING ALIAS NAMES, IF WE USE TABLE NAMES ANYWHERE IN THAT QUERY THEN IT
WILL THROW ERROR.

SQL> SELECT C.CID,P.CID FROM CUSTOMER C INNER JOIN PITAB P ON C.CID=P.CID;

CID CID
----- -----
1 1
2 2
2 2
4 4
5 5

SQL> SELECT C.CNAME,C.LOC,P.SALESAMT FROM CUSTOMER C INNER JOIN PITAB P ON C.CID=P.CID;

CNAME LOC SALESAMT


--------- ------ ----- --------
sai hyd 20000
nani hyd 40000
nani hyd 60000
renu chennai 40000
chandu pune 45000

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.

SQL> SELECT * FROM INNER_RESULT_TAB;

CNAME PNAME
---------- ----------
sai lap
nani pen drive
nani tab
renu mouse

JOINING MULTIPLE TABLES:

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

SQL> SELECT CNAME,LOC,SALESAMT,PNAME


FROM CUSTOMER C INNER JOIN PITAB P
ON C.CID=P.CID INNER JOIN PRODUCT PR
ON P.PID=PR.PID;

CNAME LOC SALESAMT PNAME


---------- ---------- -------- ----------
sai hyd 20000 lap
nani hyd 40000 pen drive
satya bang 60000 tab
renu chennai 40000 mouse
--DISPLAY CUSTOMER NAMES AND THEIR PRODUCTS?

SQL> 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;

CNAME PNAME
---------- ----------
sai lap
nani pen drive
nani tab
renu mouse

NOTE: TO JOIN ‘N’ TABLES WE SHOULD USE ‘N-1’ JOINS.

LEFT OUTER JOIN:


IT FETCHES MATCHING DATA AND REMAINING UNMATCHED DATA FROM LEFT TABLE, RIGHT TABLE
GIVES NULL VALUES FOR THIS UNMATCHED DATA FROM LEFT TABLE.

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;

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
8 santhosh pune K 30000
9 rajesh bang M 10000

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(+);

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

8 santhosh pune K 30000

9 rajesh bang M 10000

SQL> SELECT CNAME,SALESAMT


FROM CUSTOMER C LEFT OUTER JOIN PITAB P
ON C.CID=P.CID;

CNAME SALESAMT
---------- --------
sai 20000
nani 40000
satya 60000
renu 40000
chandu 45000
santhosh
rajesh

--DISPLAYING ONLY LEFT TABLE DATA

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;

CID CNAME LOC IN SALES


----- ----------- -------- --------- - --------- -- -----
8 santhosh pune K 30000
9 rajesh bang M 10000

--DISPLAY CUSTOMER NAMES WHO DIDN'T BUY ANY PRODUCTS

SQL> SELECT CNAME FROM CUSTOMER C LEFT OUTER JOIN PITAB P ON C.CID=P.CID WHERE P.CID IS
NULL;

CNAME
---------
santhosh
rajesh

RIGHT OUTER JOIN:


IT FETCHES MATCHING DATA AND REMAINING RIGHT TABLE UNMATCHED DATA,
LEFT TABLE GIVES NULL VALUES FOR THIS UNMATCHED DATA FROM RIGHT TABLE.

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;

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

SQL> SELECT C.CNAME,C.LOC,P.SALESAMT,P.TAXAMT


FROM CUSTOMER C INNER JOIN PITAB P
ON C.CID(+)=P.CID;

CNAME LOC SALESAMT TAXAMT


---------- ---------- -------- ------
sai hyd 20000 1000
nani hyd 40000 1000
satya bang 60000 1000
renu chennai 40000 1050
chandu pune 45000 1050
34000 1050
45000 1050

--DISPLAYING ONLY RIGHT TABLE DATA:

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;

CID PID SALESAMT TAXAMT


----- - ---- -------- ------------------
6 11 34000 1050
7 11 45000 1050

FULL JOIN: IT FETCHES MATCHING DATA AND REMAIN LEFT TABLE DATA AND ALSO REMAIN RIGHT
TABLE DATA.

Syn: SELECT */COL_LIST


FROM LEFT_TABLE FULL JOIN RIGHT_TABLE
ON LEFT_TABLE.KEY_COL=RIGHT_TABLE.KEY_COL

SQL> SELECT *
FROM CUSTOMER C FULL 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
8 santhosh pune K 30000
9 rajesh bang M 10000
6 11 34000 1050
7 11 45000 1050
SQL> SELECT C.CID,P.CID
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.

SQL> SELECT C.CID,P.CID FROM CUSTOMER C LEFT JOIN PITAB P ON C.CID=P.CID


UNION
SELECT C.CID,P.CID FROM CUSTOMER C RIGHT JOIN PITAB P ON C.CID=P.CID;

CID CID
----- -----
1 1
2 2
3 3
4 4
5 5
8
9
6
7

--DISPLAYING ONLY UNMATCHED DATA FROM BOTH TABLES?

SQL> SELECT *
FROM CUSTOMER C FULL JOIN PITAB P
ON C.CID=P.CID
WHERE C.CID IS NULL OR P.CID IS NULL;

CID CNAME LOC IN SALES CID PID SALESAMT TAXAMT


----- ---------- ---------- -- ----- ----- ----- -------- ------
8 santhosh pune K 30000
9 rajesh bang M 10000
6 11 34000 1050
7 11 45000 1050

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.

Syn: SELECT */COL_LIST


FROM LEFT_TABLE,RIGHT_TABLE;

SQL> SELECT * FROM CUSTOMER,PITAB;


OR
SQL> SELECT * FROM CUSTOMER CROSS JOIN PITAB;

CID CNAME LOC IN SALES CID PID SALESAMT TAXAMT


----- ---------- ---------- -- ----- ----- ----- -------- ------
1 sai hyd P 10000 1 10 20000 1000
1 sai hyd P 10000 2 13 40000 1000
1 sai hyd P 10000 3 11 60000 1000
1 sai hyd P 10000 4 12 40000 1050
1 sai hyd P 10000 5 16 45000 1050
1 sai hyd P 10000 7 11 45000 1050
1 sai hyd P 10000 6 11 34000 1050
2 nani hyd K 40000 1 10 20000 1000
2 nani hyd K 40000 2 13 40000 1000
2 nani hyd K 40000 3 11 60000 1000
2 nani hyd K 40000 4 12 40000 1050
2 nani hyd K 40000 5 16 45000 1050
2 nani hyd K 40000 7 11 45000 1050
2 nani hyd K 40000 6 11 34000 1050
3 satya bang CH 20000 1 10 20000 1000
3 satya bang CH 20000 2 13 40000 1000
3 satya bang CH 20000 3 11 60000 1000
3 satya bang CH 20000 4 12 40000 1050
3 satya bang CH 20000 5 16 45000 1050
3 satya bang CH 20000 7 11 45000 1050
3 satya bang CH 20000 6 11 34000 1050
4 renu chennai M 25000 1 10 20000 1000
4 renu chennai M 25000 2 13 40000 1000
4 renu chennai M 25000 3 11 60000 1000
4 renu chennai M 25000 4 12 40000 1050
4 renu chennai M 25000 5 16 45000 1050
4 renu chennai M 25000 7 11 45000 1050
4 renu chennai M 25000 6 11 34000 1050
5 chandu pune S 45000 1 10 20000 1000
5 chandu pune S 45000 2 13 40000 1000
5 chandu pune S 45000 3 11 60000 1000
5 chandu pune S 45000 4 12 40000 1050
5 chandu pune S 45000 5 16 45000 1050
5 chandu pune S 45000 7 11 45000 1050
5 chandu pune S 45000 6 11 34000 1050
8 santhosh pune K 30000 1 10 20000 1000
8 santhosh pune K 30000 2 13 40000 1000
8 santhosh pune K 30000 3 11 60000 1000
8 santhosh pune K 30000 4 12 40000 1050
8 santhosh pune K 30000 5 16 45000 1050
8 santhosh pune K 30000 7 11 45000 1050
8 santhosh pune K 30000 6 11 34000 1050
9 rajesh bang M 10000 1 10 20000 1000
9 rajesh bang M 10000 2 13 40000 1000
9 rajesh bang M 10000 3 11 60000 1000
9 rajesh bang M 10000 4 12 40000 1050
9 rajesh bang M 10000 5 16 45000 1050
9 rajesh bang M 10000 7 11 45000 1050
9 rajesh bang M 10000 6 11 34000 1050

49 rows selected.

WE CAN SIMPLY USE ',' BETWEEN BOTH TABLES OR WE CAN MENTION CROSS JOIN.
BOTH WILL GIVE SAME RESULTS.

CORSS JOIN GIVES BOTH MATCHING AND NON-MATCHING POSSIBILITIES,

IF WE TAKE ONLY MATCHING POSSIBILITIES THEN IT WORKS LIKE A INNER JOIN.


FOR THAT WE SHOULD USE WHERE CONDITION WITH KEY COLUMNS FROM BOTH THE TABLES.

SQL> SELECT * FROM CUSTOMER CROSS JOIN PITAB WHERE CUSTOMER.CID=PITAB.CID;


OR
SQL> SELECT * FROM CUSTOMER, PITAB WHERE CUSTOMER.CID=PITAB.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

SELF JOIN: JOINING A TABLE ITSELF IS CALLED SELF JOIN.


HERE WE USE SINGLE TABLE ONLY BUT TWO TIMES WITH TWO DIFFERENT ALIAS NAMES.

EMP TABLE:

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

----- ---------- --------- ----- --------- ----- ----- ------ -------------- ------- -------------- -------------
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:

1. DISPLAY CUSTOMER NAMES WHOSE SALESAMT IS MORE THEN 20000?


2. DISPLAY CNAMES WHO’S SALESAMT IS 40000 AND TAXAMT IS 1000?
3. DISPLAY CUSTOMER NAMES AND LOCATIONS WHOSE TAXAMT IS LESSTHEN 2000?
4. DISPLAY CNAMES WHOSE SALESAMT IS LESS THEN 30000 AND TAXAMT MORE THEN 1000?
5. DISPLAY CNAMES WHOSE SALES MOTETEHN 20000 AND SALESAMT IS MORE THEN 30000?
6. DISPLAY CUSTOMER NAMES WHOSE SALES LESSTHEN 30000 AND SALESAMT IS BETWEEN
20000 AND 40000?
7. WHAT IS THE INITIAL OF CUSTOMER WHOSE SALESAMT IS 20000?
8. DISPLAY CNAMES AND THEIR SALESAMTS?
9. DISPLAY CNAMES AND SALESAMT WHOSE SALESAMT IS 20000?
10. DISPLAY CNAME, LOC AND SALESAMT OF CUSTOMERS WHOSE INITIAL IS ‘M’?
11. DISPLAY CNAMES AND THEIR PRODUCT NAMES?
12. DISPLAY CNAME WHO BOUGHT LAP?
13. DISPLAY CNAMES WHO BOUGHT LOW CLASS PEN?
14. DISPLAY CNAMES AND SALESAMT OF CUSTOMER WHO BOUGHT LOW CLASS PRODUCTS?
15. DISPLAY SALESAMT AND TAXAMT OF HIGH CLASS PRODUCTS?
16. WHAT IS THE PRODUCT OF ‘SATYA’?
17. WHO BOUGHT PEN DRIVE?
18. WHO BOUGHT PRODUCTS EAITHER LAP OR PEN?
19. WHAT ARE THE PRODUCTS OF RENU AND SANTHOSH?
20. DISPLAY CNAMES WHO DID NOT BUY LOW CLASS PRODUCTS?
21. DISPLAY LIST OF CUSTOMERS WHO BOUGHT THE PRODUCTS EXCEPT LAP?

You might also like