Está en la página 1de 8

CONSTRAINTS - CASO PRACTICO

EJERCICIO 1:
----------------------------------------------
-- 1. CREACION DE CONSTRAINT A NIVEL DE CAMPO
----------------------------------------------
CREATE TABLE CURSO_01
( IDCURSO INTEGER PRIMARY KEY, -- constraint: pk
DESCRIPCION CHAR(50) NOT NULL, -- constraint: not null
ESTADO INTEGER default 1 ); -- constraint: default

----------------------------------------------
-- 2. CREACION DE CONSTRAINT A NIVEL DE TABLA
----------------------------------------------
CREATE TABLE CURSO_02
( IDCURSO INTEGER ,
DESCRIPCION CHAR(50) NOT NULL,
ESTADO INTEGER ,
CONSTRAINT CONS_PK_CURSO_02 -- yo le coloco el nombre al constraint, sino oracle se lo asigna
PRIMARY KEY (IDCURSO));

----------------------------------------------
-- 3. CONSULTANDO LOS CONSTRAINTS
----------------------------------------------
SELECT * FROM DBA_CONSTRAINTS WHERE TABLE_NAME = 'CURSO_02'

----------------------------------------------
-- 4. PRIMARY KEY, NOT NULL, DEFAULT, CHECK
----------------------------------------------
CREATE TABLE ALUMNO
( IDALUMNO INTEGER PRIMARY KEY,
PATERNO CHAR(50) NOT NULL,
MATERNO CHAR(50) NOT NULL,
NOMBRE CHAR(50) NOT NULL,
DNI CHAR(8) UNIQUE,
FECNAC DATE NOT NULL,
EDAD INTEGER CHECK( EDAD > 18 ),
ESTADO INTEGER DEFAULT 1 );

IT América L. Sabalú Santillan


Instructora& Docente
MOS & MTA Microsoft
asabalu@isise.edu.pe
993.921.087
----------------------------------------------
-- CREANDO RELACION CATEGORIA - ARTICULO
----------------------------------------------
CREATE TABLE CATEGORIA CREATE TABLE ARTICULOS --CREANDO LA RELACION
( IDCATEGORIA INTEGER PRIMARY ( IDARTICULO INTEGER PRIMARY ARTICULOS - CATEGORIA
KEY, KEY, ALTER TABLE ARTICULOS
DSC_CATEGORIA CHAR(50), DSC_ARTICULO CHAR(50), ADD CONSTRAINT
ESTADO INTEGER DEFAULT 1 ); ID_CATEGORIA INTEGER, CONST_ARTICULO_CATEGORIA
ESTADO INTEGER DEFAULT 1 ); FOREIGN KEY (ID_CATEGORIA)
REFERENCES CATEGORIA
(IDCATEGORIA)
----------------------------------------------
--CREANDO LAS RELACIONES DE LA BD VENTAS:
----------------------------------------------
ALTER TABLE ARTICULOS ALTER TABLE CTACTECLIENTES
ADD CONSTRAINT CONST_ARTICULOS_CATEGORIA ADD CONSTRAINT CONST_CTACTECLIENTES_PEDIDOS
FOREIGN KEY (CodCategoria) FOREIGN KEY (IdPedido)
REFERENCES CATEGORIAS (CodCategoria) REFERENCES PEDIDOS (CCodPedido)

ALTER TABLE DETALLEPEDIDOS ALTER TABLE PEDIDOS


ADD CONSTRAINT CONST_DETPEDIDO_ARTICULOS ADD CONSTRAINT CONST_PEDIDOS_CLIENTES
FOREIGN KEY (CCodArticulo) FOREIGN KEY (CCodCliente)
REFERENCES Articulos (CodArt) REFERENCES CLIENTES (CodCliente)

ALTER TABLE DETALLEPEDIDOS


ADD CONSTRAINT CONST_DETPEDIDO_PEDIDOS ALTER TABLE PEDIDOS
FOREIGN KEY (CCodPedido) ADD CONSTRAINT CONST_PEDIDOS_EMPLEADOS
REFERENCES PEDIDOS (CCodPedido) FOREIGN KEY (CCodEmpleado)
REFERENCES EMPLEADOS (CCodEmpleado)

---------------------
create user VENTAS_DESTINO IDENTIFIED BY "123"
DEFAULT TABLESPACE USERS
QUOTA UNLIMITED ON USERS;

GRANT DBA TO VENTAS_DESTINO;

IT América L. Sabalú Santillan


Instructora& Docente
MOS & MTA Microsoft
asabalu@isise.edu.pe
993.921.087
EJERCICIO 2:

-- 1 CREAR SCHEMA O USER


create user RRHH IDENTIFIED BY "123"
DEFAULT TABLESPACE USERS
QUOTA UNLIMITED ON USERS;

GRANT DBA TO RRHH;

-- 2 PROCESO DE IMPORTACION
From: HR To: RRHH

-- 3 VERIFICAR
Seleccionar en el "Schema Browser" el combo del usuario RRHH
(si no se muestra, refresacar con el boton de la derecha)
----------------------------

En una sentencia de SQL tiene caracteristicas de:


Proyeccion : seleccionar solo algunas columasn
Seleccion: .. solo algunas filas
Join (Union)
----------------------------
- CONSULTAS SIMPLES:
----------------------------
----------------------------------
-- 1. ESTRUCTURA DE TABLAS
----------------------------------
DESCRIBE JOBS; -- se puede usar describe o desc
DESC JOBS;
DESC EMPLOYEES;
----------------------------------
-- 2. CONSULTAS SIMPLES ( TODAS LAS COLUMNAS )
----------------------------------
SELECT * FROM EMPLOYEES;
----------------------------------
-- 3. CONSULTA CON CAMPOS ESPECIFICOS
----------------------------------
SELECT EMPLOYEE_ID, FIRST_NAME , LAST_NAME
FROM EMPLOYEES;

IT América L. Sabalú Santillan


Instructora& Docente
MOS & MTA Microsoft
asabalu@isise.edu.pe
993.921.087
----------------------------------
-- 4. CONSULTA CON CAMPOS CONCATENADOS
----------------------------------
SELECT EMPLOYEE_ID, FIRST_NAME || ' ' || LAST_NAME "DATOS PERSONALES" -- si es cadena compuesta uso doble
comilla
FROM EMPLOYEES;

----------------------------------
-- 5. LISTA DE DATOS NO REPETIDOS ( SIN DUPLICADOS )
----------------------------------
SELECT COUNTRY_ID FROM LOCATIONS;
SELECT DISTINCT COUNTRY_ID FROM LOCATIONS; -- resultados unicos
-- puedo hacerlo para 2 campos también, me muestra campos unicos

----------------------------------
-- 6. CONSULTA CON CAMPOS CALCULADOS
----------------------------------
SELECT LAST_NAME, SALARY SUELDO, SALARY * 1.1 "SUELDO CON AUMENTO"
FROM EMPLOYEES;

----------------------------------
-- 7. CONSULTA CON FILTRO CONDICIONAL
-- OPERADOR DE COMPARACION
-- = / >= / <= / > / < / <>
----------------------------------

-- CUANTOS EMPLEADOS TIENEN UN SUELDO MAYOR A 5000?


----------------------------
SOLUCION:

-- LISTA DE EMPLEADOS CON SALARIO MAYOR A 7000 Y MENOR A 9000 ( 17 )


SOLUCION:

----------------------------------
-- 8. BETWEEN ... AND
----------------------------------
SELECT *
FROM EMPLOYEES
WHERE SALARY BETWEEN 7000 AND 9000 ; -- incluye los limites

IT América L. Sabalú Santillan


Instructora& Docente
MOS & MTA Microsoft
asabalu@isise.edu.pe
993.921.087
----------------------------------
--- 9. IN / NOT IN
----------------------------------
SELECT * FROM EMPLOYEES WHERE MANAGER_ID IN ( 205 , 149 , 124);

----------------------------------
-- 10. LIKE
----------------------------------
SELECT * FROM EMPLOYEES WHERE JOB_ID LIKE 'SA%'

----------------------------------
-- 11. IS NULL
----------------------------------
SELECT * FROM EMPLOYEES WHERE COMMISSION_PCT IS NULL;

----------------------------------
-- 12. ORDER BY
----------------------------------
SELECT LAST_NAME , FIRST_NAME, SALARY FROM EMPLOYEES ORDER BY LAST_NAME; -- ASC es por defecto

SELECT LAST_NAME , FIRST_NAME, SALARY FROM EMPLOYEES ORDER BY LAST_NAME, FIRST_NAME;

SELECT LAST_NAME , FIRST_NAME, SALARY FROM EMPLOYEES ORDER BY 2 ASC;

----------------------------
- CONSULTAS MULTIPLES
----------------------------
-- NATURAL JOINS : ES SOLO PARA 2 TABLAS, EL CAMPO RELACIONADO DEBE TENER IGUAL NOMBRE
SELECT LAST_NAME , SALARY, DEPARTMENT_NAME FROM EMPLOYEES
NATURAL JOIN DEPARTMENTS
----------------------------
SELECT DEPARTMENT_ID, DEPARTMENT_NAME, LOCATION_ID, CITY
FROM DEPARTMENTS NATURAL JOIN LOCATIONS ORDER BY 1
----------------------------
-- USING CLAUSE: se especifica
----------------------------
SELECT EMPLOYEE_ID, LAST_NAME, LOCATION_ID, DEPARTMENT_ID
FROM EMPLOYEES
JOIN DEPARTMENTS USING (DEPARTMENT_ID)
WHERE DEPARTMENT_ID = 100;

IT América L. Sabalú Santillan


Instructora& Docente
MOS & MTA Microsoft
asabalu@isise.edu.pe
993.921.087
SELECT FIRST_NAME , LAST_NAME , JOB_TITLE FROM EMPLOYEES JOIN JOBS USING ( JOB_ID )
----------------------------
-- CONSULTAR EMPLEADOS Y DPTOS (106 registros)
----------------------------
SOLUCION:

----------------------------
-- LEFT - JOIN
-- CONSULTAR EMPLEADOS Y DPTOS (107 registros)
SOLUCION:

----------------------------
- RIGHT - JOIN
-- CONSULTAR EMPLEADOS Y DPTOS
SOLUCION:

----------------------------
-- FULL - JOIN
-- CONSULTAR EMPLEADOS Y DPTOS
SOLUCION:

----------------------------
--REPORTE DE EMPLEADOS Y LAS CIUDADES
SOLUCION:

------------------------------
-- Ejercicio: Reporte
-----------------------------
-- APELLIDOS, NOMBRE, PUESTO, DEPARTAMENTO (106 registros)
-- 106 REGISTROS
SELECT LAST_NAME , FIRST_NAME , J.JOB_TITLE , D.DEPARTMENT_NAME FROM EMPLOYEES E
JOIN JOBS J ON ( E.JOB_ID = J.JOB_ID ) JOIN DEPARTMENTS D ON ( E.DEPARTMENT_ID = D.DEPARTMENT_ID )

TABLA RECURSIVA
----------------------------------
-- 5. JOINS A LA MISMA TABLA ( RECURSIVIDAD )
----------------------------------
SELECT TRABAJADOR.LAST_NAME APE_TRABAJADOR , TRABAJADOR.FIRST_NAME NOM_TRABAJADOR
, JEFE.LAST_NAME APE_JEFE
FROM EMPLOYEES TRABAJADOR
JOIN EMPLOYEES JEFE ON ( TRABAJADOR.MANAGER_ID = JEFE.EMPLOYEE_ID )

IT América L. Sabalú Santillan


Instructora& Docente
MOS & MTA Microsoft
asabalu@isise.edu.pe
993.921.087
----------------------------------
-- 9. ROWNUM
----------------------------------
SELECT DEPTNO, DNAME , ROWNUM
FROM SCOTT.DEPT;
-- ROWNUM: es una columna virtual, tiene el nro de insertados, limita el nro de filas en un reporte

SELECT DEPTNO, DNAME , ROWNUM


FROM SCOTT.DEPT
WHERE DEPTNO > 20 AND ROWNUM < 3

SELECT * FROM (
SELECT ENAME , SAL
FROM SCOTT.EMP ORDER BY SAL )
WHERE ROWNUM < 5

----------------------------------
-- 11. PIVOT
----------------------------------
CREATE TABLE VENTAS
( VENTA_ID NUMBER,
VENDEDOR CHAR(10),
MONTO NUMBER,
FECHA DATE );

INSERT INTO VENTAS VALUES ( 1 , 'ALBERTO' , 1200, '01/09/2014');


INSERT INTO VENTAS VALUES ( 2 , 'JUAN' , 5000, '01/10/2014');
INSERT INTO VENTAS VALUES ( 3 , 'SOFIA' , 3000, '01/09/2014');
INSERT INTO VENTAS VALUES ( 4 , 'ALBERTO' , 1200, '01/10/2014');
COMMIT;

SELECT * FROM VENTAS;

-- MUESTRA LA SUMA DE VENTAS POR CADA VENDEDOR POR MES


SOLUCION:

RESULTADO:
mes ALBERTO_TOTAL SOFIA_TOTAL JUAN_TOTAL
09 1200 3000
10 1200 5000

IT América L. Sabalú Santillan


Instructora& Docente
MOS & MTA Microsoft
asabalu@isise.edu.pe
993.921.087
-- CUENTA EL NO DE EMPLEADOS A CARGO DE LOS SGTES JEFES
SOLUCION:

RESULTADO:
AÑO ST_MAN ST_CLERK SH_CLERK
2000 0 2 2
1987 0 0 0
1997 2 6 4
1994 0 0 0

----------------------------------
-- 12. CASE
----------------------------------
SELECT LAST_NAME , SALARY, JOB_ID, SALARY * 1.1 FROM EMPLOYEES;

-- si no quiero aplicar a todo... usar un resultado condicional


SELECT LAST_NAME , SALARY, JOB_ID ,
CASE JOB_ID
WHEN 'SH_CLERK' THEN SALARY * 1.1
WHEN 'HR_REP' THEN SALARY * 1.2
ELSE SALARY
END "CON INCREMENTO"
FROM EMPLOYEES;

IT América L. Sabalú Santillan


Instructora& Docente
MOS & MTA Microsoft
asabalu@isise.edu.pe
993.921.087

También podría gustarte