Vous êtes sur la page 1sur 10

CLAUSES: CLAUSES ARE BUILDING BLOCKS OF ANY SQL QUERY.

1. FROM
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
6. DISTINCT
7. ORDER BY

--WE USE THE FOLLOWING TABLE FOR PRACTICING CLAUSES:

EMP

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

14 rows selected.

FROM: THIS FROM CLAUSE WILL FETCH TABLE DATA .


Syn: FROM <TABLE_NAME>
Eg: FROM EMP;
FROM CUSTOMER;

SQL> SELECT *
FROM EMP;
HERE 'FROM EMP' WILL FETCH EMP TABLE DATA AND 'SELECT *' WILL DISPLAY ALL FETCHED DATA.

AFTER FETCHING, IF WE NEED TO DISPLAY FEW COLUMNS INSTEAD OF ALL COLUMNS (*) THEN WE
SHOULD SPECIFY THE LIST OF COLUMNS IN SELECT STATEMENT.

SQL> SELECT ENAME,JOB,SAL


FROM EMP;

WHERE: WHERE CLAUSE IS USED TO FILTER THE FETCHED DATA BY USING FROM CLAUSE.

WE USE WHERE CLAUSE TO TAKE OR AVOID SET OF ROWS FROM THE TABLE.

Syn: WHERE <CONDITION>


Eg: WHERE JOB='SALESMAN'
WHERE DEPTNO=20
WHERE COMM IS NULL

DISPLAY EMP DETAILS WHO ARE WORKING AS CLERK?

SQL> SELECT *
FROM EMP
WHERE JOB='CLERK';

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


----- ---------- --------- ----- --------- ----- ----- -----------------------------------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7934 MILLER CLERK 7782 23-JAN-82 1300 10

DISPLAY ENAMES WHO ARE WORKING UNDER DEPT 20?

SQL> SELECT ENAME


FROM EMP
WHERE DEPTNO=10;

ENAME
----------
CLARK
KING
MILLER
DISPLAY EMP NAMES WHO ARE TAKING COMM?

SQL> SELECT ENAME


FROM EMP
WHERE COMM IS NOT NULL;

ENAME
----------
ALLEN
WARD
MARTIN
TURNER

DISPLAY ENAMES WHO ARE NOT TAKING COMM?

SQL> SELECT ENAME


FROM EMP
WHERE COMM IS NULL;

ENAME
----------
SMITH
JONES
BLAKE
CLARK
SCOTT
KING
ADAMS
JAMES
FORD
MILLER

DISPLAY EMP DETAILS WHO ARE WORKING AS MANAGER AND NOT TAKING COMM?

SQL> SELECT *
FROM EMP
WHERE JOB='MANAGER' AND COMM IS NULL;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


----- ---------- --------- ----- --------- ----- ----- ------
7566 JONES MANAGER 7839 02-APR-81 2975 20
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
DISPLAY EMP DETAILS WHOSE SAL IS LESS THAN 3000?

SQL> SELECT *
FROM EMP
WHERE SAL <3000;

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
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
7934 MILLER CLERK 7782 23-JAN-82 1300 10

GROUP BY: GROUP BY CLAUSE WILL GROUP SIMILAR VALUES AND CALCULATES AGGREGATE VALUE
(MAX,MIN,SUM,AVG OR COUNT).

Syn: GROUO BY <COL_NAME>


Eg: GROUP BY LOC
GROUP BY JOB

DISPLAY SUM OF SALARIES FOR EACH JOB?

SQL> SELECT JOB,SUM(SAL) SUMSAL


FROM EMP
ROUP BY JOB;

JOB SUMSAL
--------- -----------------------
CLERK 4150
SALESMAN 5600
PRESIDENT 5000
MANAGER 8275
ANALYST 6000
DISPLAY MAX OF SALARY FROM EACH JOB?

SQL> SELECT JOB,MAX(SAL) MAXSAL


FROM EMP
GROUP BY JOB;

JOB MAXSAL
--------- ------
CLERK 1300
SALESMAN 1600
PRESIDENT 5000
MANAGER 2975
ANALYST 3000

DISPLAY MINIMUM SALARY FROM EACH DEPT?

SQL> SELECT DEPTNO,MIN(SAL) MINSAL


FROM EMP
GROUP BY DEPTNO;

DEPTNO MINSAL
------ ------
30 950
20 800
10 1300

HAVING: HAVING CLAUSE IS USED TO FILTER GROUP BY RESULT.

Syn: HAVING <CONDITION>


Eg. HAVING SUM(SAL)<30000
HAVING MIN(SAL)<5000

DISPLAY JOBS AND SUM OF SALARIES AND WHOSE SUM OF SALARIES ARE MORE THAN 5000?

SQL> SELECT JOB,SUM(SAL) SUMSAL


FROM EMP
GROUP BY JOB
HAVING SUM(SAL)>5000;

JOB SUMSAL
--------- ------
SALESMAN 5600
MANAGER 8275
ANALYST 6000
DISPLAY JOBS AND THEIR MAXIMUM SALARIES AND MAX OF SAL MUST BE LESS THAN 3000?

SQL> SELECT JOB,MAX(SAL) SUMSAL


FROM EMP
GROUP BY JOB
HAVING MAX(SAL)<3000;

JOB SUMSAL
--------- ------
CLERK 1300
SALESMAN 1600
MANAGER 2975

DISPLAY JOBS AND COUNT OF EMPLOYEES FOR EACH JOB AND THE COUNT MUST BE MORE THAN 3?

SQL> SELECT JOB,COUNT(*) SUMSAL


FROM EMP
GROUP BY JOB
HAVING COUNT(*)>3;

JOB SUMSAL
--------- ----------------
CLERK 4
SALESMAN 4

DISTINCT: DISTINCT IS USED TO AVOID DUPLICATE DATA.


DISTINCT MUST BE USED AFTER SELECT CLAUSE.

SQL> SELECT DISTINCT *


FROM EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


----- ---------- --------- ----- --------- ----- ----- ------
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7369 SMITH CLERK 7902 17-DEC-80 800 20
7566 JONES MANAGER 7839 02-APR-81 2975 20
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7839 KING PRESIDENT 17-NOV-81 5000 10
14 rows selected.

DISPLAY DISTINCT JOBS FROM TABLE?

SQL> SELECT DISTINCT JOB


FROM EMP;

JOB
---------
CLERK
SALESMAN
PRESIDENT
MANAGER
ANALYST

DISPLAY DISTINCT DEPARTMENTS FROM TABLE?

SQL> SELECT DISTINCT DEPTNO


FROM EMP;

DEPTNO
------
30
20
10

ORDER BY: ORDER BY CLAUSE IS USED TO SORT THE DATA EAITHE IN ASC OR DESC ORDER.
IF WE DONT SPECIFY ANY SORTING TYPE THEN IT TAKES ASC BY DEFAULT.
WE CAN SPECIFY COLUMN NAMES, POSITION OF COLUMN OR ALIAS NAMES ALSO IN
ORDER BY CLAUSE.

SQL> SELECT *
FROM EMP
ORDER BY SAL DESC;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


----- ---------- --------- ----- --------- ----- ----- ------
7839 KING PRESIDENT 17-NOV-81 5000 10
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7566 JONES MANAGER 7839 02-APR-81 2975 20
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7369 SMITH CLERK 7902 17-DEC-80 800 20

14 rows selected.

SQL> SELECT *
FROM EMP
ORDER BY SAL;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


----- ---------- --------- ----- --------- ----- ----- ---------------------------------------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
14 rows selected.

SQL> SELECT ENAME,JOB,SAL AS SALARY,COMM


FROM EMP
ORDER BY SALARY DESC;
ENAME JOB SALARY COMM
---------- --------- ------ ----------------------------
KING PRESIDENT 5000
FORD ANALYST 3000
SCOTT ANALYST 3000
JONES MANAGER 2975
BLAKE MANAGER 2850
CLARK MANAGER 2450
ALLEN SALESMAN 1600 300
TURNER SALESMAN 1500 0
MILLER CLERK 1300
WARD SALESMAN 1250 500
MARTIN SALESMAN 1250 1400
ADAMS CLERK 1100
JAMES CLERK 950
SMITH CLERK 800
14 rows selected.

SQL> SELECT *
FROM EMP
ORDER BY 3 DESC;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


----- ---------- --------- ----- --------- ----- ----- ------
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7839 KING PRESIDENT 17-NOV-81 5000 10
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7934 MILLER CLERK 7782 23-JAN-82 1300 10
7369 SMITH CLERK 7902 17-DEC-80 800 20
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
7788 SCOTT ANALYST 7566 19-APR-87 3000 20

14 rows selected.
NOTE: We can also sort the data by using multiple columns in single select

SQL> SELECT ENAME,JOB,SAL FROM EMP ORDER BY JOB,SAL DESC;

ENAME JOB SAL


---------- --------- ----------
FORD ANALYST 3000
SCOTT ANALYST 3000
MILLER CLERK 1300
ADAMS CLERK 1100
JAMES CLERK 950
SMITH CLERK 800
JONES MANAGER 2975
BLAKE MANAGER 2850
CLARK MANAGER 2450
KING PRESIDENT 5000
ALLEN SALESMAN 1600
TURNER SALESMAN 1500
MARTIN SALESMAN 1250
WARD SALESMAN 1250

In this case job will sort the data in asc order and based on this result next sal will sort the data in desc
order

Vous aimerez peut-être aussi