Curso Oracle
Curso Oracle
http://www.oracle.com/technetwork/developer-tools/sqldeveloper/downloads/sqldev-install-windows-1969674.html
1. Crear tablas
--DROP TABLE employees PURGE;
--DROP TABLE departments PURGE;
VARCHAR2(13)
);
job
VARCHAR2(9),
manager_id
hiredate
salary
NUMBER(4),
DATE,
NUMBER(7,2),
commission
NUMBER(7,2),
(department_id)
);
1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO employees VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-
1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO employees VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-
1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO employees VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-
1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO employees VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-
1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO employees VALUES (7698,'BLAKE','MANAGER',7839,to_date('1-5-
1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO employees VALUES (7782,'CLARK','MANAGER',7839,to_date('9-6-
1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO employees VALUES (7788,'SCOTT','ANALYST',7566,to_date('13-JUL-
87','dd-mm-rr')-85,3000,NULL,20);
INSERT INTO employees VALUES (7839,'KING','PRESIDENT',NULL,to_date('17-11-
1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO employees VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-
1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO employees VALUES (7876,'ADAMS','CLERK',7788,to_date('13-JUL-87',
'dd-mm-rr')-51,1100,NULL,20);
INSERT INTO employees VALUES (7900,'JAMES','CLERK',7698,to_date('3-121981','dd-
mm-yyyy'),950,NULL,30);
INSERT INTO employees VALUES (7902,'FORD','ANALYST',7566,to_date('3-12-
1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO employees VALUES (7934,'MILLER','CLERK',7782,to_date('23-1-
1982','dd-mm-yyyy'),1300,NULL,10);
COMMIT;
2. SELECT
SELECT *
FROM employees
ORDER BY employee_id;
COLUMNAS
ALIAS
SELECT e.employee_id,
e.employee_name,
d.department_id,
d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id
ORDER BY e.employee_id;
FUNCIONES
3. SUBQUERIES
SELECT d.department_id, d.department_name,
(SELECT COUNT(*) FROM employees e WHERE e.department_id =
d.department_id)
AS emp_count
FROM departments d
ORDER BY d.department_id;
INLINE VIEWS
WITH CLAUSE
WITH emp_dept_join AS (
SELECT e.employee_name, d.department_name
d.department_id = 20
AND
-- Filter
-- Filter
ORDER BY e.employee_name;
or
-- Filter
-- Filter
ORDER BY e.employee_name;
= : Equal.
<> or != : Not equal.
> : Greater than.
< : Less than.
>= : Great than or equal.
<= : Less than or equal.
ORDER BY e.employee_name;
OR CONDITION
e.job = 'MANAGER'
e.job = 'CLERK'
ORDER BY e.employee_id;
ORDER BY e.employee_id;
4. The ORDER BY Clause
Identify Columns : Expression, Position and Column Alias
FROM employees e
WHERE department_id = 30
ORDER BY e.salary ASC;
5. JOINS
SELECT d.department_name,
e.employee_name
FROM departments d
JOIN employees e ON d.department_id = e.department_id
SELECT d.department_name,
e.employee_name
FROM departments d, employees e
WHERE d.department_id = e.department_id
AND
d.department_id >= 30
ORDER BY d.department_name;
SELECT d.department_name,
e.employee_name
FROM departments d, employees e
WHERE d.department_id = e.department_id (+)
AND
d.department_id >= 30
SELECT d.department_name,
e.employee_name
FROM departments d
LEFT OUTER JOIN employees e ON d.department_id = e.department_id AND
e.salary >= 2000
WHERE d.department_id >= 30
SELECT d.department_name,
e.employee_name
FROM employees e
RIGHT OUTER JOIN departments d ON e.department_id =
d.department_id
WHERE d.department_id >= 30
ORDER BY d.department_name, e.employee_name;
SELECT d.department_name,
e.employee_name
FROM employees e
FULL OUTER JOIN departments d ON e.department_id =
d.department_id
ORDER BY d.department_name, e.employee_name;
SELECT d.department_name,
e.employee_name
FROM employees e, departments d
WHERE e.department_id = d.department_id (+)
UNION ALL
SELECT d.department_name,
e.employee_name
FROM departments d, employees e
WHERE d.department_id = e.department_id (+)
AND
e.employee_name IS NULL
ORDER BY 1, 2;
CROSS JOIN
SELECT e.employee_name,
d.department_name
FROM employees e
CROSS JOIN departments d
ORDER BY e.employee_name, d.department_name;
SELECT e.employee_name,
d.department_name
FROM employees e, departments d
ORDER BY e.employee_name, d.department_name;
6. Set Operators
UNION
UNION ALL
SELECT department_id, department_name
FROM departments
WHERE department_id <= 30
UNION ALL
SELECT department_id, department_name
FROM departments
INTERSECT
SELECT department_id, department_name
FROM departments
WHERE department_id <= 30
INTERSECT
SELECT department_id, department_name
FROM departments
WHERE department_id >= 20
ORDER BY 1;
MINUS
SELECT department_id, department_name
FROM departments
WHERE department_id <= 30
MINUS
SELECT department_id, department_name
FROM departments
WHERE department_id >= 20
ORDER BY 1;
ORDER BY
-- Column name.
SELECT employee_id, employee_name
FROM employees
WHERE department_id = 10
UNION ALL
SELECT department_id, department_name
FROM departments
WHERE department_id >= 20
ORDER BY employee_id;
SELECT e.department_id,
COUNT(*) AS employee_count,
AVG(e.salary) AS avg_salary,
SUM(e.salary) AS sum_salary
FROM employees e
GROUP BY e.department_id
ORDER BY e.department_i
SELECT e.department_id,
e.job,
COUNT(*) AS employee_count,
AVG(e.salary) AS avg_salary,
SUM(e.salary) AS sum_salary
FROM employees e
GROUP BY e.department_id, e.job
ORDER BY e.department_id, e.job;
Joins
SELECT d.department_name,
COUNT(*) AS employee_count,
AVG(e.salary) AS avg_salary,
SUM(e.salary) AS sum_salary
FROM departments d
JOIN employees e ON d.department_id = e.department_id
GROUP BY d.department_name
ORDER BY d.department_name;
SELECT d.department_name,
COUNT(*) AS employee_count,
AVG(e.salary) AS avg_salary,
SUM(e.salary) AS sum_salary
FROM departments d
LEFT OUTER JOIN employees e ON d.department_id = e.department_id
GROUP BY d.department_name
ORDER BY d.department_name;
HAVING Clause
SELECT d.department_name, e.job,
COUNT(e.employee_id) AS employee_count,
AVG(e.salary) AS avg_salary,
SUM(e.salary) AS sum_salary
FROM departments d
LEFT OUTER JOIN employees e ON d.department_id = e.department_id
GROUP BY d.department_name, e.job
ORDER BY d.department_name, e.job;