Вы находитесь на странице: 1из 45

Structured Query Language

Structured Query Language

• English-like
• Non-procedural
• Platform Independent
• Transparent Physical Organization
Advantage SQL
(pronounced sequel)
• Native language of Relational databases RDBMS
Standard language to access data in RDBMS
• Functionally complete
Allows users to define, store, retrieve and manipulate data
• User friendly
Easy to use English like syntax.
SELECT NAME, SALARY FROM EMPLOYEE WHERE ID = 7092;
• Focuses on what rather than how
Other languages are procedural. They have instructions on how to open What How
files, get data, print and close files step-by-step. SQL focuses on what to
get. Acts on sets of data.
• Industry standard (ANSI 99)
It is ANSI and ISO standard language.

10/30/2006 © Copyright CKL & CKC 3


The Relational Model

assigned to DEPARTMENT Assign one or more employees to a department


Employee
# ID # DEPT An employee belongs to one and only one dept
● NAME ● NAME
o JOB o LOCATION
● DEPT
composed of

Database

Table: Department Table: Employee


ID NAME JOB DEP DEP NAME LOCATION
8756 KING PRESIDENT 01 01 ADMIN DALLAS
5349 EDWARD MANAGER 10 10 FINANCE AUSTIN
2916 MARY SECRETARY 01 20 SALES HOUSTON
6291 JULIA ANALYST 20 6291 JULIA DENTON

10/30/2006 © Copyright CKL & CKC 4


Relational Database Management System

SQL

Result Set Server

User Tables Data Dictionary

10/30/2006 © Copyright CKL & CKC 5


Structured Query Language

• Data Definition (DDL)


• Data Retrieval (Query)
• Data Manipulation (DML)
Types of SQL Statements

• SELECT Data retrieval


• INSERT, UPDATE, DELETE Data manipulation
(DML)
• CREATE, ALTER, DROP Data definition (DDL)
• COMMIT, ROLLBACK Transaction control
• GRANT, REVOKE Data Control

10/30/2006 © Copyright CKL & CKC 7


Data – Employee Table
Table Name: EMP
EMPNO ENAME JOB MGR HIREDATE SAL COMMDEPTNO
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 2-Apr-81 2975  20
7654 MARTIN SALESMAN 7698 28-Sep-81 1250 1400 30
7698 BLAKE MANAGER 7839 1-May-81 2850  30
7782 CLARK MANAGER 7839 9-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 8-Sep-81 1500 0 30
7876 ADAMS CLERK 7788 23-May-87 1100  20
7900 JAMES CLERK 7698 3-Dec-81 950  30
7902 FORD ANALYST 7566 3-Dec-81 3000  20
7934 MILLER CLERK 7782 23-Jan-82 1300  10
Data – Department Table

Table Name: DEPT


DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
Data – Salary Grade Table

Table Name: SALGRADE


GRADE LOSAL HISAL
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
SQL Statements
SELECT (select list)
FROM (table list)
WHERE (conditions for retrieval)
ORDER BY (sort criteria)

Example:
SELECT empno, ename, job, sal
FROM emp
WHERE sal > 2500
ORDER BY job, ename

EMPNO ENAME JOB SAL


8756 KING PRESIDENT 8000
5349 EDWARD MANAGER 4500
……… ……… ……… ………

10/30/2006 © Copyright CKL & CKC 11


Simple SELECT Statements

SELECT EMPNO, ENAME, JOB FROM EMP;


SELECT * FROM EMP;
SELECT DISTINCT DEPTNO FROM EMP;
SELECT EMPNO, SAL*12 FROM EMP;
SELECT EMPNO, SAL*12 + COMM FROM EMP;
SELECT EMPNO, SAL*12 ANNSAL FROM EMP;
Concept of NULL

SELECT ENAME, NZ(COMM,0) EMP;

SELECT ENAME, NZ(COMM,100) FROM EMP;

SELECT ENAME, NZ(MGR, ‘NO BOSS’)


FROM EMP;
WHERE CLAUSE
SELECT EMPNO, ENAME, JOB, DEPTNO
FROM EMP
WHERE DEPTNO = 10;
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP
WHERE SAL > 1400;

SELECT EMPNO, ENAME, JOB, SAL


FROM EMP
WHERE SAL BETWEEN 1400 AND 2500;
WHERE CLAUSE
SELECT EMPNO, ENAME, JOB, DEPTNO
FROM EMP
WHERE JOB = ‘PRESIDENT’;
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP
WHERE JOB LIKE ‘MAN*’;

SELECT EMPNO, ENAME, JOB, SAL


FROM EMP
WHERE JOB LIKE ‘*MAN’;
WHERE CLAUSE

SELECT EMPNO, ENAME, JOB, SAL


FROM EMP
WHERE JOB LIKE ‘?????’;

SELECT EMPNO, ENAME, JOB, SAL


FROM EMP
WHERE JOB LIKE ‘????K’;
WHERE CLAUSE
SELECT EMPNO, ENAME, JOB, DEPTNO
FROM EMP
WHERE JOB = ‘MANAGER’
OR JOB = ‘PRESIDENT’;

SELECT EMPNO, ENAME, JOB, DEPTNO


FROM EMP
WHERE COMM IS NOT NULL;
WHERE CLAUSE

SELECT EMPNO, ENAME, JOB, DEPTNO


FROM EMP
WHERE COMM IS NULL;

SELECT EMPNO, ENAME, JOB, DEPTNO


FROM EMP
WHERE NZ(COMM,0) = 0;
WHERE CLAUSE

SELECT EMPNO, ENAME, JOB, DEPTNO


FROM EMP
WHERE JOB NOT = ‘PRESIDENT’
OR JOB NOT = ‘SALESMAN’;

SELECT DEPTNO, DNAME, LOC


FROM DEPT;
CONCATENATION

SELECT ENAME & ' WORKS FOR ' &


' DEPARTMENT ' & DEPTNO &
' AND EARNS A SALARY OF ' & SAL AS STORY
FROM EMP;
SORTING
SELECT ENAME, JOB, SAL
FROM EMP
ORDER BY ENAME;
SELECT ENAME, JOB, SAL
FROM EMP
ORDER BY DEPTNO, ENAME;

SELECT ENAME, JOB, SAL


FROM EMP
ORDER BY DEPTNO, ENAME DESC;
SORTING

SELECT ENAME, JOB, HIREDATE, SAL


FROM EMP
ORDER BY HIREDATE;

SELECT ENAME, JOB, HIREDATE, SAL


FROM EMP
ORDER BY HIREDATE DESC;
UNIQUE ROWS
SELECT DISTINCT DEPTNO
FROM EMP
ORDER BY DEPTNO;

SELECT DISTINCT JOB


FROM EMP
ORDER BY DEPTNO;

SELECT DISTINCT DEPTNO, JOB


FROM EMP
ORDER BY DEPTNO;
COUNTING
SELECT COUNT(*)
FROM EMP;

SELECT COUNT (EMPNO)


FROM EMP;

SELECT DISTINCT (DEPTNO)


FROM EMP;
COUNTING

SELECT COUNT(*) AS [NO OF EMPLOYEES]


FROM EMP
WHERE DEPTNO = 10;
ROW FUNCTIONS

NOW()
CURRENTUSER()
THE ARITHMETIC OPERATORS
OPERATION OPERATOR
ADDITION +
SUBTRACTION -
MULTIPLICATION *
DIVISION /
EXPONENTIATION ^
PARENTHESES ()
THE ARITHMETIC

ANNUAL SALARY = SAL + COMMISSION


FOR 12 MONTHS + ONE MONTH SAL AS
BONUS

SELECT ENAME,
(SAL +NVL(COMM,0))*12
+ SAL ANNSAL
FROM EMP;
ONE TO MANY

DEPT EMP

Primary Key of EMP is EMPNO

Primary Key of DEPT is DEPTNO

Foreign Key of EMP is DEPTNO


THE EQUIJOIN

SELECT ENAME, DNAME, LOC


FROM EMP DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
THE EQUIJOIN – SELF JOIN

SELECT E.ENAME, M.ENAME


FROM EMP E, EMP M*
WHERE M.EMPNO = E.MGR

(* NOTICE USE OF ALIAS)


THE NON-EQUIJOIN

SELECT ENAME, JOB, GRADE


FROM EMP, SALGRADE
WHERE SAL BETWEEN LOSAL AND HISAL
THE OUTER JOIN

SELECT ENAME, DNAME, JOB, GRADE


FROM EMP E, DEPT D
WHERE E.DEPTNO(+) = D.DEPTNO
COMPOUND WHERE CLAUSE
SELECT ENAME, DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND D.DEPTNO = 10

SELECT ENAME, DNAME, LOC


FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND LOC = ‘NEW YORK’
ORDER BY ENAME
IN OPERATOR
SELECT ENAME, JOB, SAL, COMM
FROM EMP
WHERE JOB = ‘PRESIDENT’ OR JOB = ‘MANAGER’ OR JOB = ‘ANALYST’;

SELECT ENAME, JOB, SAL, COMM


FROM EMP
WHERE JOB IN (‘PRESIDENT’, ‘MANAGER’, ‘ANALYST’);

SELECT ENAME, JOB, SAL, COMM


FROM EMP
WHERE JOB NOT IN (‘SALESMAN’, ‘CLERK’);
SINGLE ROW SUBQUERY
SELECT ENAME, JOB, SAL, COMM
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND D.LOC = ‘CHICAGO’

SELECT ENAME, JOB, SAL, COMM


FROM EMP
WHERE DEPTNO = (SELECT DEPTNO FROM DEPT
WHERE LOC = ‘CHICAGO’)

SELECT ENAME, JOB, SAL, COMM


FROM EMP
WHERE DEPTNO = (SELECT DEPTNO FROM DEPT
WHERE LOC > ‘CHICAGO’)
MULTIROW SUBQUERY

SELECT ENAME, JOB, SAL, COMM


FROM EMP
WHERE DEPTNO IN (SELECT DEPTNO FROM DEPT
WHERE LOC > ‘CHICAGO’)

SELECT ENAME, JOB, SAL, COMM


FROM EMP
WHERE DEPTNO > ANY (10, 20)

SELECT ENAME, JOB, SAL, COMM


FROM EMP
WHERE DEPTNO > ALL (10, 20)
SINGLE ROW NUMBER FUNCTIONS

SELECT ENAME, ROUND(SAL + SAL * 0.08) NEWSAL


FROM EMP

SELECT MOD(7,2) FROM DUAL;

SELECT ABS(2), ABS(-2) FROM DUAL;

SELECT CEIL(58.5), FLOOR(58.5), ROUND(58.5) FROM DUAL;

SELECT POWER (5,3 ) FROM DUAL;


SINGLE ROW DATE FUNCTIONS

SELECT NOW() FROM DUMMY;

SELECT NOW() + 9 FROM DUMMY;

SELECT DateAdd ("m", 12, HIREDATE) FROM EMP;


SINGLE ROW CHAR FUNCTIONS

SELECT Len(ENAME) FROM EMP;


GROUP FUNCTIONS

SELECT COUNT(SAL), MAX(SAL), MIN(SAL), AVG(SAL),


SUM(SAL), VARIANCE(SAL), STDDEV(SAL)
FROM EMP;

SELECT DEPTNO, COUNT(SAL), MAX(SAL), MIN(SAL),


AVG(SAL), SUM(SAL), VARIANCE(SAL), STDDEV(SAL)
FROM EMP
GROUP BY DEPTNO;

SELECT DEPTNO, COUNT(SAL), MAX(SAL), MIN(SAL),


AVG(SAL), SUM(SAL), VARIANCE(SAL), STDDEV(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(SAL) > 2; (3, 5)
GROUP FUNCTIONS

SELECT DNAME, SUM(SAL)


FROM EMP E, DEPT D
WHERE D.DEPTNO = E.DEPTNO
GROUP BY DNAME;

SELECT DNAME, SUM(SAL)


FROM EMP E, DEPT D
WHERE D.DEPTNO = E.DEPTNO
GROUP BY DNAME
HAVING SUM(SAL) > 10000;
GROUP FUNCTIONS

SELECT DNAME, ENAME, SUM(SAL) SAL


FROM EMP E, DEPT D
WHERE D.DEPTNO = E.DEPTNO
GROUP BY ROLLUP (DNAME, ENAME);

SELECT DNAME, ENAME, SUM(SAL)


FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
GROUP BY CUBE(DNAME, ENAME)
TOP-N QUERY

SELECT ENAME, SAL


FROM (SELECT ENAME, SAL FROM EMP ORDER BY SAL DESC)
WHERE ROWNUM < 4;
Other Query Types

• Make Table Query


• Append Query
• Update Query
• Parameter Query

Вам также может понравиться