SQL & Advanced SQL
SQL & Advanced SQL
Outline
Introduction
SQL basics
Joins & Complex queries
Analytical functions & Set operators
Other DB objects (Sequences, Synonyms, DBlinks, Views & Mviews)
Indexes & IOTs
Partitioning
Undo & Flashback technologies
INSERT
UPDATE Data Manipulation Language (DML)
DELETE
CREATE
ALTER
DROP Data Definition Language (DDL)
RENAME
TRUNCATE
GRANT
Data Control Language (DCL)
REVOKE
COMMIT
Transaction Control
ROLLBACK
INSERT
UPDATE Data Manipulation Language (DML)
DELETE
CREATE
ALTER
DROP Data Definition Language (DDL)
RENAME
TRUNCATE
GRANT
Data Control Language (DCL)
REVOKE
COMMIT
Transaction Control
ROLLBACK
integer NUMBER(38)
Oracle has its set of built-in types
smallint NUMBER(38)
User-defined types
numeric(p,s) NUMBER(p,s)
varchar(n) VARCHAR2(n)
char(n) CHAR(n)
float NUMBER
real NUMBER
But also:
Add/modify/drop constraints
Enable/Disable constraints
Modify more advanced properties…
EMP_NAME EMP_DEPTNO
KING 10
20 OPERATIONS
KING 10 ACCOUNTING
BLAKE 30 SALES
CLARK 10 ACCOUNTING
EMP_NAME EMP_DEPTNO
DEPT_NO DEPT_NAME
KING 10
10 ACCOUNTING
BLAKE NULL
30 SALES
CLARK 10
20 OPERATIONS
MARTIN 20
EMP_NAME EMP_DEPTNO DEPT_NAME
TURNER 10
KING 10 ACCOUNTING
JONES NULL
BLAKE NULL NULL
CLARK 10 ACCOUNTING
MARTIN 20 OPERATIONS
TURNER 10 ACCOUNTING
JONES NULL NULL
WHERE e.dept_id=d.dept_id;
Outerjoins
ANSI syntax (LEFT, RIGHT, FULL)
SELECT e.name, d.name FROM employees e
WHERE e.dept_id(+)=d.dept_id;
What are the employees salary and the MINIMAL salary in their
department?
SELECT e.emp_id a.dept_id, e.last_name, EMP_ID DEPT_ID LAST_NAME SALARY MIN_SAL
------ ------- ----------- ------ -------
e.salary, a.min_sal, 200 10 Whalen 4400 4400
FROM employees e, 201 20 Hartstein 13000 6000
202 20 Fay 6000 6000
(SELECT MIN(salary)min_sal, dept_id 114 30 Raphaely 11000 2500
FROM employees 115 30 Khoo 3100 2500
116 30 Baida 2900 2500
GROUP BY dept_id) a 117 30 Tobias 2800 2500
WHERE e.dept_id = a.dept_id 118 30 Himuro 2600 2500
119 30 Colmenares 2500 2500
ORDER BY e.dept_id, e.salary DESC; 203 40 Mavris 6500 6500
121 50 Fripp 8200 2100
120 50 Weiss 8000 2100
122 50 Kaufling 7900 2100
123 50 Vollman 6500 2100
124 50 Mourgos 5800 2100
184 50 Sarchand 4200 2100
185 50 Bull 4100 2100
192 50 Bell 4000 2100
SELECT analytical-function(col-expr)
EWWEQEWQEQ
WINDOW
OVER (window-spec) [AS col-alias]
FROM [TABLE]; CURRENT ROW
SQL> select day, EURCHF, ((EURCHF - prev_eurchf) / prev_eurchf )*100 as pct_change from (
select day, EURCHF, LAG(EURCHF,1) over (order by day) as prev_eurchf from currency);
Intersect
SELECT name FROM employees
INTERSECT
SELECT name FROM visitors;
Minus
SELECT name FROM employees
MINUS
SELECT name FROM visitors;