Base de Datos03

211
UNIDAD 1 Creación y manejo de tablas 6 Objetos de la base de datos 6 Nombramiento de una tabla 6 Creación de tablas 6 Referencia usada con otras tablas 7 La opción predefinida 7 Creando las tablas 7 Tablas en la base de dato Oracle 8 Diccionario de datos (preguntas) 8 Los tipos de datos 8 Los tipos de dato DateTime 9 Los tipos de dato DateTime 9 Tipo de datos TIMESTAMP WITH TIME ZONE 9 Tipos de datos TIMESTAMP WITH LOCAL TIME 9 Intervalo de tipo de dato YEAR A MONTH 10 Intervalo de tipo de dato DAY TO SECOND 10 Intervalo de tipo de dato DAY TO SECOND 11 Creando una tabla usando una sintaxis de subquery 11 Creación de tablas usando SUBQUERY 11 Declaración del ALTER TABLE 12 Declaración del ALTER TABLE 12 Añadiendo una columna 12 Añadiendo una columna 13 Modificando Una Columna 13 Eliminando Una Columna 13 La Opción SET UNUSED 14 Eliminación De Una Tabla 14 Cambiando El Nombre De Un Objeto 14 Truncando Una Tabla 14 0

Transcript of Base de Datos03

Page 1: Base de Datos03

UNIDAD 1Creación y manejo de tablas 6Objetos de la base de datos 6Nombramiento de una tabla 6Creación de tablas 6Referencia usada con otras tablas 7La opción predefinida 7Creando las tablas 7Tablas en la base de dato Oracle 8Diccionario de datos (preguntas) 8Los tipos de datos 8Los tipos de dato DateTime 9Los tipos de dato DateTime 9Tipo de datos TIMESTAMP WITH TIME ZONE 9Tipos de datos TIMESTAMP WITH LOCAL TIME 9Intervalo de tipo de dato YEAR A MONTH 10Intervalo de tipo de dato DAY TO SECOND 10Intervalo de tipo de dato DAY TO SECOND 11Creando una tabla usando una sintaxis de subquery 11Creación de tablas usando SUBQUERY 11Declaración del ALTER TABLE 12Declaración del ALTER TABLE 12Añadiendo una columna 12Añadiendo una columna 13Modificando Una Columna 13Eliminando Una Columna 13La Opción SET UNUSED 14Eliminación De Una Tabla 14Cambiando El Nombre De Un Objeto 14Truncando Una Tabla 14Agregando Comentarios A La Tabla 15Resumen 15Practica, Aplicación global 15

UNIDAD 2Including Constraints 16Què son los Constraints? 16Pautas del Constraint 16Definiendo Constraints 16Definiendo Constraints 17El Constraint NOT NULL 17El Constraint UNIQUE 18El Constraint PRIMARY KEY 19El Constraint FOREIGN KEY 20El Constraint CHECK 21Agregando sintaxis a Constraint 21Añadiendo un Constraint 21Eliminando un Constraint 21Desactivando Constraints 22Activando Constraints 22Constraints Cascada 22:Viendo Constraints 23Viendo las columnas asociadas con los Constraints 23Resume 24Practica . Aplicación global 24

UNIDAD 3Manipulando Datos 25Lenguaje De Manipulación De Datos 25Agregando Una Nueva Fila A Una Tabla 25La Inserción De La Declaración De Sintaxis 26Insertando Nuevas Líneas 26

0

Page 2: Base de Datos03

Insertando Líneas Con Valores Nulos 26Insertando valores especiales 27Insertando Valores De Fecha Específicos 27Creando Un Texto 27Copiando Líneas Para Otras Tablas 28Cambiando Datos En La Tabla 28Declarar La Sintaxis Update 28Poniendo Al Dia Líneas En Una Tabla 28Poniendo Al Dia Dos Columnas Con Una Subpregunta 29Poniendo Al Dia Líneas Basándose En Otras Tablas 29Poniendo Al Día Líneas:Integrando Restrinciones De Error. 29Eliminar La Declaración 30Eliminando Líneas Desde Una Tabla. 30Eliminando Líneas Basándose En Otras Tablas. 30Usando Una Subpregunta En Una Declaración Insert. 31Usando la opción with check como palabra clavepuesta en la declaración dml. 32Acabada La Vista De La Falta Fracción Explicada 32USANDO LA FALTA DE VALORES EXPLÍCITOS 32La Declaración Merge 33El Merge La Declación De Sintaxis 33Merging Líneas 33Transacciones De Base Da Datos 34Ventajas De Las Declaraciones Commit Y Rollback 34Marque hacia atras antes de listar un punto 34Procesando La Transaccion Implisita 35Estado De Los Datos Antes Del Commit O Rollback 35Estado De Los Datos Despues Del Commit 35Encomendando Datos 35El Dato De Estado Después De La Lista. 36Declaracion-Nivelado Rollback 36Leer Consistencias 36Implementación De La Consistencia Leer 36Cerrando 37Cerrando Implícita 37Resume 37Practica, Aplicación Global 37

UNIDAD 4SQL Básico escribiendo las Declaraciones SELECT 38Las capacidades de SQL las Declaraciones SELECT 38La Declaración basicas SELECT 38Seleccionando Todas las Columnas 39Las Columnas Específicas seleccionando 39Escribiendo declaraciones SQL 39Columna que Encabeza los Valores por defect 39Las Expresiones aritméticas 40Usando operadores aritmetico 40Procedimientos de operadores 40Usando paréntesis 41Definiendo un Valor Nulo 41Los Valores nulos en las Expresiones Aritméticas 42Definiendo una Columna Alias 42Usando alias en columna 42Concatenación de operadores 43Usando la concatenacion de operadores 43Las Cadenas de caracteres literales 43Las Cadenas de caracteres literales 43Duplicando fila 44

1

Poner al día líneas en la tabla empleado

Page 3: Base de Datos03

Eliminando filas duplicadas 44Resumen 45Practica, Aplicación global 45

UNIDAD 5Restringiendo y Ordenando los Datos 46Filas limitando que Usan una Selección 46Limitando las Filas Seleccionadas 46Usando la cláusula WHERE 47Caracter cadena y datos 47Condiciones de comparación 47Usando las condiciones de comparación 48Otras condiciones con comparaciones 48Usando la condicion BETWEEN 48Usando la condición IN 49Usando la condicion LIKE 49Usando la condicion LIKE 49Usando la condicion NULL 50Condiciones logicas 50Usando el operador AND 50Usando el operador OR 51Usando el operador NOT 51Reglas de procedencia 52Reglas de procedencia 52Cláusula ORDER BY 53Ordenando en el Orden Descendente 53Ordenando Alias por la Columna 53Ordenando por las Columnas Múltiples 54Resumen 54Practica, Apreciación global 54

UNIDAD 6Funciones De Registro Simple 55Funciones SQL 55Dos tipos de funciones de SQL 55Funciones De Registro Simple 56Funciones De Registro Simple 56Función De Caracteres 56Casos de funciones de manipulación 57Usando Los Casos De Funciones De Manipulación 57Funciones De Manipulación Tipo Carácter 57Usando Las Funciones Manipulación Tipo Carácter 58Función tipo numérico 58Usando La Función Round 58Usando La Función Trunc 59Usando La Función Mod 59Trabajando Con Fechas 59Trabajando Con Fechas 60Fechas En Forma Aritmética 60Usando Operaciones Aritméticas Con Fechas 60Funciones De La Fecha 60Usando funciones de fecha 61Usando funciones de fecha 61Practica, Apreciación Global 61Conversión de funciones 62Conversión De Tipo De Datos Implícita 62Conversión De Tipo De Datos Implícita 62Usando La Función To_Char Con Fechas 63Elementos Del Modelo De Formato De Fecha 63Elementos Del Modelo De Formato De Fecha 64Usando La Función To_Char Con Fechas 64Usando la función to_char con números 64

2

Page 4: Base de Datos03

Usando La Función To_Char Con Números 65Uusando la función to_number y to_date 65Usando La Función To_Number Y Funciones To_Date 66Formato De Fecha RR 66Ejemplo de formato rr 66Anidando Funciones 67Funciones generales 67Funciones NVL 67Uusando la función de NVL 68Usando La Función NVL2 68Usando La Función De NULLIF 69Usando La Función COALESCE 69Expresiones condicionales 70Expresión Del Case 70Expresión CASE 70Función DECODE 70Usando La Función DECODE 71Resumen 71Practica, Apreciación Global 71

UNIDAD 7Visualizar datos múltiples de una tabla 72Obtener datos de tablas múltiples 72Productos Cartesianos 72Generando Un Producto Cartesiano 73Tipos De Uniones 73Tables Unidas Usando Sintaxis Oracle 73( Oracle Proprietary ) 74Recuperando registros con Igualdad de unión 74Buscar condiciones adicionales usando el operador AND 75Limitando Columnas con nombres ambiguos 75Usando Tables con Alias 75Uniendo más de dos tablas 75No Igualdad de union ( Oracle Propietario ) 76Recuperando Registros con No-Igualdad de unión 76Uniones Exteriores ( Oracle Propietario) 76Sintaxis de Uniones Exteriores 77Usando Uniones Exteriores 77Uniones con si misma 77Uniendo una tabla a si misma 78Uniendo Tablas Usando SQL: Sintaxis 1999 78Creando uniones cruzadas 78Creando Uniones Naturales 79Recuperando Registros con Uniones Naturales 79Creando Uniones Con La Cláusula Usando 79Recuperando Registros Con La Cláusula Usando 79Creando Uniones Con La Cláusula ON 80Creando tres maneras de unir con la cláusula ON 80Creando tres maneras de unir con la cláusula ON 80Uniones Internas VS Externas 81Union Externa Salida 81Corregir Unión Externa

81Llenar Unión Externa 82Adicionar Condiciones 82Resumen 82Practica, Apreciación global 82

3

Page 5: Base de Datos03

UNIDAD 8Agregando datos con funciones de grupo 83

¿Que son las funciones de grupo? 83Tipos de funciones de grupo 83Sintaxis de una función de grupo 84Usando la funcion AVG y SUM 84Usando la función MIN y MAX 84Usando la función COUNT 84Usando la funcion COUNT (*) 85

Usando la palabra clave DISTINCT 85Funciones de grupos y valores nulos 85Usando la función NVL con funciones de grupos 85Creando datos de grupos 86Creando grupos de datos 86Usando la clausula GROUP BY 86

Agrupando mas de una columna 87Usando la cláusula GROUP BY en columnas múltiples 88Preguntas ilegales que usan las funciones de grupos 88Los Resultados De grupo excluyendo 89Los Resultados De grupo excluyendo:La cláusula HAving 89Usando la cláusula HAVING 89Anidando funciones de grupos 90Resumen 90Practica, Aplicación global 90

UNIDAD 9Subqueries 91Usar Sub-queriesPara resolver problemas 91Sintaxis de un subqueries 91

Usando subqueries 92Las pautas para usar subqueries 92Tipos de subqueries 92Subqueries de una sola fila 92Ejecutando subqueries solo una fila 93Usando funciones de grupos en un subqueries 93La cláusula HAVING con subqueries 93Cual esta equivocado con estadeclaracion? 94¿Esta Declaración Devolverá las Filas? 94Subqueries múltiples filas 94Usando el operador ANY en subqueries multiples filas 95Usando el operador ALL en subqueries multiples filas 95Valores nulos en un subqueries 95Resumen 96Practica, Aplicación global 96

UNIDAD 10Otros objetos de base de daros 97Otros objetos de base de daros 97Secuencias 97Creando una Sucesión 98Usando una Sucesión 98Usando una secuencia 99Modificando una Sucesión 99Las pautas por Modificar una Sucesión 99Índices 100Que es un indice 100¿Cómo los Índices se Crean? 100Creando Indices 100Cuándo Crear un Indices 100

4

Page 6: Base de Datos03

Los Índices confirmando 101Los Índices función-basado 101Quitando un Índice 101Los sinónimos 102Creando y Quitando los Sinónimos 102En resumen 102

UNIDAD 11Creando un vista 103¿Por qué Use las Vistas? 103Creando un avista 103Los Datos recuperando de una Vista 104Modificando una Vista 105Creando una Vista Compleja 105Quitando una Vista 105Resumen 106Practica, Aplicación Global 106

UNIDAD 12Usando Operadores De Conjuntos 107Usando Operadores De Conjuntos 107Las Tablas Usadas En Esta Lección 107El Operador Unión 107Usando El Operador Unión 108El operador unión all 108Usando El Operador Union All 108El Operador Intersect 109Usando El Operador Intersect 109El Operador Minus 110Guías Para Los Operadores Conjuntos 110Correspondencia en la instrucción select 111Controlando El Orden De Las Filas 112Resumen 112Ejercicio de aplicación 112

UNIDAD 13Código Almacenado145Procedimientos y Funciones 145Creación de un Procedimiento 145Sintaxis de un Procedimiento 145Ejemplo de un Procedimiento 146Creación de una Función 146Sintaxis de una Función 146Ejemplo de una Función 146Eliminación de Procedimientos y Funciones 147Creación de un Paquete 147Sintaxis de un Paquete 147Ejemplo de un Paquete 147Subprogramas almacenados frente a subprogramas locales 148DDL sobre código almacenado 148Ejecución de instrucciones DDL mediante SQL Dinámico 148Uso del paquete DBMS_SQL para ejecutar instrucciones DDL 149Ejecutando instrucciones DDL mediante el paquete DBMS_SQL 149Uso de SQL dinámico nativo para ejecutar instrucciones DDL 149Ejecutando instrucciones DDL mediante el SQL dinámico nativo 149Ejecución de código almacenado desde SQL Plus 150Ejecutando código almacenado desde SQL Plus 150Restricciones de accesos a funciones desde una expresión SQL 150Ejercicio de aplicación 151

5

Page 7: Base de Datos03

UNIDAD 1

Objetos de la base de datos

Nombramiento de una tabla

Nombre de tabla y nombre de columna; Debe empezar con una letra Debe tener una longitud de 1–30 caracteres Sólo debe contener A-Z, a-z, 0–9, _, $, y # No debe reproducir el nombre de otro objeto poseído por el mismo usuario No debe tener una palabra reservada del servidor de Oracle.

Creación de tablasSe debe:

Crear la tabla Un área de almacenamiento

6

OBJETO DESCRIPCION

Tabla Unidad básica de almacenamiento compuesta por filas y columnas

Vista Lógicamente representa subconjuntos de datos de uno o más tablas

Secuencia Generación de valores numéricos

Indicé Mejora la actuación de algunas preguntas

Sinónimo Da los nombres alternativos a los objetos

CREATE TABLE [schema.]table (column datatype [DEFAULT expr]

[, ...]);

Creación y manejo de tablasLos Objetivos

Después de terminada esta unidad, usted debe poder realizar lo siguiente: Describa los objetos de la base de datos principales Crear las Tablas Describa los tipos de los datos que pueden usarse al especificar la

definición de la columna Cambiar las definiciones de la tabla Eliminar, renombrar, y truncar las tablas

Page 8: Base de Datos03

Se debe especificar: Nombre de la tabla Nombre de la columna , tipo de dato de la columna, tamaño de la columna

Referencia usada con otras tablas

Tablas que pertenecen a otros usuarios no están en el esquema del usuario.

Debe usar el nombre del respectivo como un prefijo a esas tablas

La opción predefinida

Especifique un valor predefinido por una columna durante una inserción.

Los valores literales, expresiones, o funciones de SQL son los valores legales. El nombre de otra columna o un pseudocolumna son valores ilegales. El tipo de los datos predefinido debe emparejar el tipo de datos de columna.

Creando las tablas

Creando la tabla

Confirmación de la creación de la tabla

Tablas en la base de dato Oracle

... hire_date DATE DEFAULT SYSDATE, ...

CREATE TABLE dept(deptno NUMBER(2),dname VARCHAR2(14),loc VARCHAR2(13));

Table created.Table created.

DESCRIBE dept

7

Page 9: Base de Datos03

Uso de las tablas: Es una colección de tablas mantenidas por el usuario Contiene la información del usuario

Diccionario de datos: Es una colección de tablas creada y mantenidas por el Servidor de Oracle Contiene la información de la base de datos

Diccionario de datos (preguntas)

Vea el nombre de las tablas creadas por el usuario

Tipo de objetos distintos creado por el usuario

Vea las mesas, vistas, sinónimos, y sucesiones poseídas por el usuario.

Los tipos de datos

Los tipos de dato DateTime

SELECT table_name FROM user_tables ;

SELECT DISTINCT object_type FROM user_objects ;

SELECT * FROM user_catalog ;

8

Page 10: Base de Datos03

Las mejoras de Datetime con Oracle9i: Se han introducido los Nuevos Datetime tipos de datos. Los Nuevos datos teclean que el almacenamiento está disponible. Se han hecho las mejoras cronometrar zonas y la zona de tiempo local.

Los tipos de dato DateTime

El TIMESTAMP ..tipo datos es una extensión del tipo de datos de FECHA. Guarda el año, mes, y día de los datos de la FECHA , más hora, minuto, y

segundo valora así como el segundo valor fraccionario. El TIMESTAMP los tipo datos se especifica como :

Tipo de datos TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH TIME ZONE es una variante de TIMESTAMP que incluye un desplazamiento de zona de tiempo en su valor.

El desplazamiento de zona de tiempo es la diferencia, en horas y minutos, entre el tiempo local y UTC.

Tipos de datos TIMESTAMP WITH LOCAL TIME

TIMESTAMP WITH LOCAL TIME es otro variante de TIMESTAMP que incluye un desplazamiento de zona de tiempo en su valor.

Datos guardado en la base de datos se normaliza a la zona de tiempo de base de datos.

El desplazamiento de zona de tiempo no se guarda como la parte de los datos de la columna; Oracle devuelve los datos en la zona de tiempo de sesión local de los usuarios.

TIMESTAMP CON EL TIEMPO ZONA DATO DE TIPO LOCAL se especifica como sigue:

Intervalo de tipo de dato YEAR A MONTH

TIMESTAMP[(fractional_seconds_precision)]WITH LOCAL TIME ZONE

9

TIMESTAMP[(fractional_seconds_precision)]WITH TIME ZONE

TIMESTAMP[(fractional_seconds_precision)]

Page 11: Base de Datos03

INTERVAL YEAR TO MONTH guarda un período de tiempo que usa el AÑO y campos de datetime de MES

Intervalo de tipo de dato DAY TO SECOND

INTERVAL DAY TO SECOND un período de tiempo por lo que se refiere a días, horas, minutos, y segundos

Intervalo de tipo de dato DAY TO SECOND

El intervalo DAY TO SECOND un período de tiempo por lo que se refiere a días, horas, minutos, y segundos.

INTERVAL YEAR [(year_precision)] TO MONTH

INTERVAL '123-2' YEAR(3) TO MONTHIndicates an interval of 123 years, 2 months.

INTERVAL '123' YEAR(3)Indicates an interval of 123 years 0 months.

INTERVAL '300' MONTH(3)Indicates an interval of 300 months.

INTERVAL '123' YEARReturns an error, because the default precision is 2, and '123' has 3 digits.

INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]

INTERVAL '4 5:12:10.222' DAY TO SECOND(3)Indicates 4 days, 5 hours, 12 minutes, 10 seconds, and 222 thousandths of a second.INTERVAL '123' YEAR(3).

INTERVAL '7' DAYIndicates 7 days.

INTERVAL '180' DAY(3) Indicates 180 days.

10

Page 12: Base de Datos03

Creando una tabla usando una sintaxis de subquery

Cree una tabla y la inserción de filas combinando el CREATE TABLE declaración de la tablas AS subquery option.

Empareje el número de columnas especificadas al número de columnas del subquery.

Defina los nombres de la columna, y valores por default

Creación de tablas usando SUBQUERY

Declaración del ALTER TABLE

Usando el alter tabla en la declaración de la tabla:

Agregue una nueva columna

INTERVAL '4 5:12:10.222' DAY TO SECOND(3)Indicates 4 days, 5 hours, 12 minutes, 10 seconds, and 222 thousandths of a second.

INTERVAL '4 5:12' DAY TO MINUTEIndicates 4 days, 5 hours and 12 minutes.

INTERVAL '400 5' DAY(3) TO HOURIndicates 400 days 5 hours.

INTERVAL '11:12:10.2222222' HOUR TO SECOND(7)indicates 11 hours, 12 minutes, and 10.2222222 seconds.

CREATE TABLE table [(column, column...)]AS subquery;

11

CREATE TABLE dept80 AS SELECT employee_id, last_name, salary*12 ANNSAL, hire_date FROM employees WHERE department_id = 80;Table created.Table created.

Page 13: Base de Datos03

Modifique una columna existente Defina un valor predefinido por la nueva columna Eliminación de una columna

Declaración del ALTER TABLE

Use el ALTER TABLE en la declaración de la tabla para agregar, modifique, o eliminar las columnas

Añadiendo una columna

Añadiendo una columna

Usar ADD para agregar una columna

ALTER TABLE tableADD (column datatype [DEFAULT expr]

[, column datatype]...);

ALTER TABLE tableMODIFY (column datatype [DEFAULT expr]

[, column datatype]...);

ALTER TABLE tableDROP (column);

DEPT80

“Añadir una nueva columna en la tabla Dept. 80

DEPT80

Nueva columna

12

Page 14: Base de Datos03

La nueva columna se convierte en la ultima

Modificando Una Columna

Usted puede cambiar el tipo de los datos de una columna, tamaño, y el valor predefinido

Un cambio al valor predefinido afecta sólo inserciones subsecuentes a la tabla

Eliminando Una Columna

Use DROP TABLE para eliminar una columna

La Opción SET UNUSED

Usted usa la opción SET UNUSED para marcar uno o más columnas como as UNUSED

ALTER TABLE dept80ADD (job_id VARCHAR2(9));Table altered.Table altered.

ALTER TABLE dept80MODIFY (last_name VARCHAR2(30));Table altered.Table altered.

ALTER TABLE dept80DROP COLUMN job_id; Table altered.Table altered.

13

Page 15: Base de Datos03

Usted usa DROP SET UNUSED para quitar las columnas que son marcado as UNUSED

Eliminación De Una Tabla

Todos los datos y estructura en la tabla se anula. Cualquier transacción pendiente se compromete. Todos los índices son eliminados. Se utiliza el CANNOT ROLL BACK para la declaración de la tabla

Cambiando El Nombre De Un Objeto

Para cambiar el nombre de una tabla, vista, sucesión, o sinónimo, usted ejecuta el RENAMED de la declaración

Usted debe ser el dueño del objeto

Truncando Una Tabla

1. la estructura TRUNCATE TABLE Quita todas las filas de una tabla Los descargos el espacio para almacenar usado por es tabla

El CANNOT ROLL BACK remueve el levantamiento de la fila Alternativamente, usted puede quitar las filas usando la estructura DELETE

Agregando Comentarios A La Tabla

ALTER TABLE tableSET UNUSED (column);

ALTER TABLE tableSET UNUSED COLUMN column;

ALTER TABLE tableSET UNUSED (column);

ALTER TABLE tableSET UNUSED COLUMN column;OR

ALTER TABLE tableDROP UNUSED COLUMNS;

ALTER TABLE tableDROP UNUSED COLUMNS;

DROP TABLE dept80;Table dropped.Table dropped.

RENAME dept TO detail_dept;Table renamed.Table renamed.

TRUNCATE TABLE detail_dept;Table truncated.Table truncated.

14

Page 16: Base de Datos03

Usted puede agregar los comentarios a una tabla o columna usando la declaración COMMENT

Pueden verse los comentarios a través de las vistas de diccionario de datos: ALL_COL_COMMENTS USER_COL_COMMENTS ALL_TAB_COMMENTS USER_TAB_COMMENTS

Resumen

En esta lección, usted debe de haber aprendido a usar DDL las declaraciones para crear, alterar, eliminar, y renombrar las tablas

Declaración Descripción

Create table Crea una tabla

Alter table Modifica la estructura de la tabla

Drop table Elimina una tabla

Rename Cambia al nombre de una tabla , vista o sinónimo

Truncate Quita toda las filas y espacios para almacenar

Comment Agrega comentarios a una tabla o vista

Practica, Aplicación global

1. Esta práctica cubre los temas siguientes:

Creación de nuevas tablas Creando una nueva tabla usando el CREATE TABLE AS sintaxis modificando definiciones de la columna Verificar que las tablas existan Agregar comentarios a la tabla Eliminar tablas Alterar tablas

UNIDAD 2

COMMENT ON TABLE employeesIS 'Employee Information';Comment created.Comment created.

15

Including Constraints

Los objetivos

Después de completar esta lección, usted debe ser capaz de hacer lo siguiente:

• Describe los Constraints• Crea y mantiene los constraints

Page 17: Base de Datos03

Què son los Constraints?

• Los Constraints ofrecen reglas a nivel de la tabla.• Los Constraints previenen la eliminación de una tabla si hay dependencia.• Los tipos de constraint que son validos:

– NOT NULL– UNIQUE – PRIMARY KEY– FOREIGN KEY– CHECK

Pautas del Constraint

• El nombre del constraint lo genera el servidor de Oracle usando el formato SYS_Cn f.

• Crea un constraint:– Al mismo tiempo cuando se crea la tabla, o– Después que se ha creado la tabla

• Define un constraint en la columna o a nivel de la tabla.• Ver un constraint en el diccionario de datos.

Definiendo Constraints

Definiendo Constraints

Constraint a nivel de columna

CREATE TABLE [schema.]table (column datatype [DEFAULT expr]

[column_constraint],...[table_constraint][,...]);

CREATE TABLE employees( employee_id NUMBER(6), first_name VARCHAR2(20), ... job_id VARCHAR2(10) NOT NULL,

CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));

16

Page 18: Base de Datos03

Constraint a nivel de tabla

El Constraint NOT NULL

Asegura ese valores nulos no se permiten para la columna:

Se define al nivel de la columna:

column [CONSTRAINT constraint_name] constraint_type,column [CONSTRAINT constraint_name] constraint_type,

column,... [CONSTRAINT constraint_name] constraint_type (column, ...),

column,... [CONSTRAINT constraint_name] constraint_type (column, ...),

CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL,...

17

NOT NULL constraint(Ninguna fila puede contener un valor nulo para esta columna.)

NOT NULL constraint(Ninguna fila puede contener un valor nulo para esta columna.)

NOT NULL constraint(Ninguna fila puede contener un valor nulo para esta columna.)

System named

Usernamed

Page 19: Base de Datos03

El Constraint UNIQUE

UNIQUE constraint

EMPLOYEES

INSERT INTO

Definido a nivele de tabla o nivel de la columna:

El Constraint PRIMARY KEY

PRIMARY KEY

DEPARTMENTS

CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25), salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE NOT NULL,... CONSTRAINT emp_email_uk UNIQUE(email));

CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25), salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE NOT NULL,... CONSTRAINT emp_email_uk UNIQUE(email));

18

No permitido: ya existe

Permitido

Page 20: Base de Datos03

Definido a nivele de tabla o nivel de la columna:

El Constraint FOREIGN KEY

INSERT INTO

Not allowed(Null value)

Not allowed (50 already exists)CREATE TABLE departments( department_id NUMBER(4), department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL, manager_id NUMBER(6), location_id NUMBER(4), CONSTRAINT dept_id_pk PRIMARY KEY(department_id));

CREATE TABLE departments( department_id NUMBER(4), department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL, manager_id NUMBER(6), location_id NUMBER(4), CONSTRAINT dept_id_pk PRIMARY KEY(department_id));

19

Page 21: Base de Datos03

Defined at either the table level or the column level:

FOREIGN KEY: Define la columna en la tabla hijo al nivel del constraint de la tabla

REFERENCES: Identifica la tabla y columna en la tabla padre ON DELETE CASCADE: Anula las filas dependientes en la tabla hijos cuando

una fila de la tabla padre se anula. ON DELETE SET NULL: Convertido los valores importante dependiente

extranjeros a nulo

El Constraint CHECK

DEPARTMENTS

EMPLOYEESFOREIGNKEY

INSERT INTO No permitido(9 no existe)

PermitidPermitidoo

PRIMARYKEY

CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25), salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE NOT NULL,... department_id NUMBER(4), CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES departments(department_id), CONSTRAINT emp_email_uk UNIQUE(email));

20

Page 22: Base de Datos03

Define una condición que cada fila debe satisfacer Las expresiones siguiente no se permite:

– Las referencias CURRVAL, NEXTVAL, LEVEL, y ROWNUM son pseudo columna

– Llama a SYSDATE, UID, USER, y funciones de USERENV

– Pregunta que se refieren a otros valores a otra fila

Agregando sintaxis a Constraint

Use el ALTER TABLE para declarar: Add o drop un constraint, pero no modifica su estructura Active o desactiva los constraints Añadir el constraint NOT NULL usando la clasula MODIFY

Añadiendo un Constraint

Añada un constraint FOREIGN KEY a la tabla EMPLOYEES que indica que una tabla padre ya debe existir con un empleado en la tabla EMPLOYEES

Eliminando un Constraint

Elimina constraint padre de la tabla EMPLOYEES.

Elimina el constraint PRIMARY KEY en la tabla DEPARTMENTS y elimina la asociación del constraint FOREIGN KEY en la columna EMPLOYEES.DEPARTMENT_ID.

..., salary NUMBER(2) CONSTRAINT emp_salary_min CHECK (salary > 0),...

..., salary NUMBER(2) CONSTRAINT emp_salary_min CHECK (salary > 0),...

ALTER TABLE table ADD [CONSTRAINT constraint] type (column);

ALTER TABLE table ADD [CONSTRAINT constraint] type (column);

ALTER TABLE employeesADD CONSTRAINT emp_manager_fk FOREIGN KEY(manager_id) REFERENCES employees(employee_id);Table altered.Table altered.

21

ALTER TABLE employeesDROP CONSTRAINT emp_manager_fk;Table altered.Table altered.

ALTER TABLE departmentsDROP PRIMARY KEY CASCADE;Table altered.Table altered.

Page 23: Base de Datos03

Desactivando Constraints

Ejecute la cláusula DISABLE en la declaración ALTER TABLE para desactivarla integridad del constraint.

Aplica la opción CASCADE para desactivar la integridad de dependencia del constraints.

Activando Constraints

Activando un constraint de integridad actualmente desactivado en la tabla definida usando la cláusula ENABLE .

UNIQUE o PRIMARY KEY el índice se crea automáticamente si usted habilita el constraint UNIQUE key o PRIMARY KEY.

Constraints Cascada

La cláusula CONSTRAINTS CASCADE se usa junto con la cláusula DROP COLUMN

La clausula La clausula CONSTRAINTS CASCADE elimina todas la referencia constraints de integridad referencial que se refiere a las claves primaria y unicas definiendo en la eliminación de las columnas.

La cláusula CONSTRAINTS CASCADE también elimina todos los constraints de las multicolumnas definidas en la columna a eliminar.

Ejemplo:

Viendo Constraints

Pregunta la tabla USER_CONSTRAINTS par aver todas las definiciones de constraint y nombres.

22

ALTER TABLE employeesDISABLE CONSTRAINT emp_emp_id_pk CASCADE;Table altered.Table altered.

ALTER TABLE employeesENABLE CONSTRAINT emp_emp_id_pk;Table altered.Table altered.

ALTER TABLE test1 DROP (pk) CASCADE CONSTRAINTS;Table altered.Table altered.

ALTER TABLE test1 DROP (pk, fk, col1) CASCADE CONSTRAINTS;Table altered.Table altered.

Page 24: Base de Datos03

Viendo las columnas asociadas con los Constraints

Vea las columnas asociadas con el constraints los nombres de la vistas USER_CONS_COLUMNS.

Resume

23

SELECT constraint_name, constraint_type,search_condition

FROM user_constraintsWHERE table_name = 'EMPLOYEES';

SELECT constraint_name, column_nameFROM user_cons_columnsWHERE table_name = 'EMPLOYEES';

Page 25: Base de Datos03

• Tipos de constraints:

– NOT NULL

– UNIQUE

– PRIMARY KEY

– FOREIGN KEY

– CHECK

• Usted puede preguntar por la tabla USER_CONSTRAINTS para ver todas las

definiciones de constraint y nombres.

Practica . Aplicación global

Esta practica cubre los siguientes temas:

• Añadir constraints a las tablas existente

• Añade mas columnas a las tablas

• Muestra la información de las vistas en el diccionario de datos

24

Page 26: Base de Datos03

UNIDAD 3

Lenguaje De Manipulación De Datos

Una declaración DML es ejecutable cuando tu:* Agregar nuevas líneas hacia una tabla.* Modificar líneas existentes en una tabla.* Remover líneas existentes desde una tabla.

Una transacción consiste de una colección de sentencias DML que forma una unidad lógica de trabajo.

Agregando Una Nueva Fila A Una Tabla

25

NuevaFila

Departamento

…insertar una nueva fila dentro de la tabla departamento…

Manipulando Datos

Objetivos

Después de completar esta lección, serás capaz de emplear lo siguiente:

Describe cada declaración DML. Inserta fila hacia el interior de una tabla. Poner al día filas en una tabla. Eliminar filas desde una tabla. Fusionar líneas en una tabla. Control de transacciones.

Page 27: Base de Datos03

La Inserción De La Declaración De Sintaxis

Agregar nuevas filas hacia una tabla usando la declaración Insertar.

Solo una línea es insertada en un tiempo con esta sintaxis.

Insertando Nuevas Líneas

Insertar una nueva fila conteniendo valores para cada columna. Listar valores en la falta de orden de las columnas en la tabla. Opcionalmente, liste las columnas en la cláusula Insertar.

Encerrar caracteres y valores desde el interior de los datos solo cotizando marcos.

Insertando Líneas Con Valores Nulos

Método Implísito: Omitir la columna desde la lista de la columna.

Método Explícito: Especifica la palabra clave NULL en la cláusula valor.

Insertando valores especiales

La función SYSDATE registra la corriente fecha y hora.

26

Page 28: Base de Datos03

Insertando Valores De Fecha Específicos

Añadir un nuevo empleado.

Verificar su adición.

Creando Un Texto

Usar y sustituir en una declaración SQL para mover los valores hacia delante. Y es un placeholder para el valor de las variables.

Copiando Líneas Para Otras Tablas Escribir su declaración INSERT con una subpregunta.

27

Page 29: Base de Datos03

No usar valores en la cláusula. Partir el numero de columnas hacia esa cláusula Insertar en la subpregunta.

Cambiando Datos En La TablaEmpleado

Declarar La Sintaxis Update Modificar líneas existentes con la declaración UPDATE.

Poniendo al día más que una línea en un tiempo, si requiere.

Poniendo Al Dia Líneas En Una Tabla

Especificar línea o líneas que serán modificadas si tu específica la cláusula WHERE.

Todas las líneas en la tabla se modificarán si tú omites la cláusula WHERE.

Poniendo Al Dia Dos Columnas Con Una Subpregunta

28

Poner al día líneas en la tabla empleado

Page 30: Base de Datos03

Poner al día a los empleados 114’s en tareas y salarios a juegos que del empleado 205.

Poniendo Al Dia Líneas Basándose En Otras Tablas

Use subpreguntas poniendo al día declaraciones para poner al día líneas en una tabla basándose sobre valores desde otra tabla.

Poniendo Al Día Líneas:Integrando Restrinciones De Error.

Departamento número 55 no existe

Removiendo Una Línea Desde Una Tabla

Departamentos

29

Page 31: Base de Datos03

Eliminando una línea desde la tabla DEPARTAMENT.

Eliminar La Declaración

Tú puedes remover líneas existentes desde una tabla cerca usando la declaración DELETE.

Eliminando Líneas Desde Una Tabla.

Especifique líneas que serán eliminadas si tu específicas la cláusula WHERE.

Agregar líneas en la tabla que será eliminada si tú omites la cláusula WHERE.

Eliminando Líneas Basándose En Otras Tablas.

Use subpreguntas en declaraciones DELETE hasta remover líneas desde una tabla basándose en valores desde otra tabla.

Eliminando Líneas:Restringir Laintegridad De Error

30

Page 32: Base de Datos03

Tú no puedes eliminar una línea que contenga una clave primaria que este usando o una clave primaria en otra tabla.

Usando Una Subpregunta En Una Declaración Insert.

Usando la opción with check como palabra clave puesta en la declaración dml.

Una subpregunta es usada para identificar la tabla y columnas de la declaración DML.

La palabra clave With Check Option es prohibida desde tú cambias líneas que no este en la subpregunta.

31

Page 33: Base de Datos03

Acabada La Vista De La Falta Fracción Explicada

Con la falta fracción explicada, tú puedes usar la palabra clave Default que un valor de columna donde la falta de columna es deseada.

La adición de esta explicación es para el rendimiento con el SQL: 1999 normal. Este concede el uso para el control cuando y donde la falta de valor puede ser

aplicado para el dato. Explique las faltas que pueden ser usadas en el ingreso y salida de las

declaraciones.

USANDO LA FALTA DE VALORES EXPLÍCITOS Falta coma insertar:

Falta con Update:

La Declaración Merge

Proporcionar la habilidad condicionalmente hacia la falta de insertar datos dentro de una tabla de base de datos.

Ejecutamos un Update si la línea existe, y un insertar si esta es una nueva línea: Evite separar update.

Aumenta la representación y facilidad de uso.

32

Page 34: Base de Datos03

Es útil en datos almacenando aplicaciones.

El Merge La Declación De Sintaxis Tú puedes condicionalmente insertar o actualizar líneas en una tabla cerca

usando la declaración Merge.

Merging Líneas

Insertar o update líneas in la tabla copia EMP hacia partir la tabla empleado.

Transacciones De Base Da Datos

Una transacción de base de datos consiste de una de las siguientes: Declaraciones como DML constituye una peligrosa consistencia hacia el dato. Una declaración DDL. Una declaración DCL.

Comienza cuando la primera declaración DML SQL es ejecutada.

33

Page 35: Base de Datos03

Termina con uno de los siguientes eventos: Un Commit o RollBack declaración esta saliendo.

Un DDL o DCL ejecutas declaración (commit automático).

El usar salidas iSQL*Plus.

Las caídas de sistemas.

Ventajas De Las Declaraciones Commit Y Rollback

Con las declaraciones Commit y RollBack, tú puedes: Asegurar la consistencia de datos. Previamente cambiamos los datos antes de fabricar los cambios permanentes. Agrupar lógicamente las operaciones relacionadas.

Controlando Transacciones

Marque hacia atras antes de listar un punto

Crear un marco en una transacción corriente cerca usando la declaración SAVEPOINT.

Lista un punto hasta que marque a un lado usando la declaración RollBack hasta SavePiont.

34

Page 36: Base de Datos03

Procesando La Transaccion Implisita

Una falta automática ocurre dentro de las siguientes circunstancias: La declaración DDL es emitida.

La declaración DCL es emitida.

La salida normal para iSQL*Plus, emitiendo como salida la declaración explícita COMMIT hacia ROLLBACK

Una lista de puntos automáticos ocurren dentro de una terminación anormal de iSQL*Plus o un sistema fracasado.

Estado De Los Datos Antes Del Commit O Rollback

Los estados previos de los datos pueden ser recordados. La corriente puede usar para revisar los resultados de las operaciones DML

usada cerca a la declaración SELECT. Otros usuarios no pueden ver los resultados de las declaraciones DML cerca del

corriente uso. Las líneas afectadas están cerradas; no pueden cambiar los datos de otros usos

desde el interior de las líneas afectadas.

Estado De Los Datos Despues Del Commit

Estos datos hechos cambian permanentemente en la base de datos. Los estados previos de los datos están permanentemente perdidos. Todos los resultados vistos pueden ser usados. Las llaves en las líneas afectadas son liberadas; estas líneas son disponibles para

la manipulación de otros usos. Todos los puntos guardados son borrados.

Encomendando Datos

Marca los cambios.

Encomendar los datos.

35

Page 37: Base de Datos03

El Dato De Estado Después De La Lista.

Descarte todo cambio pendiente usando la declaración RollBack: Sin hacer nada estos datos cambian. El dato previo de los estados es restaurar. Las llaves en las líneas afectadas están liberadas.

Declaracion-Nivelado Rollback

Si falta solo una declaración DML durante la ejecución, solo esta declaración es listada atrás.

El servidor de oracle se implementa de forma implícita. Todo otro cambio estos retuvo Todos estos cambios estando en otro. El uso de transacciones explicitas se emplea para formar transacciones cerca

ejecutando una declaración Commit o Rollback.

Leer Consistencias

Leer la consistencia de una garantía que consiste en ver el dato todo el tiempo. Cambios hechos acerca de un usuario sin conflicto como cambios hechos acerca

de otros usos. Leer la consistencia que asegura el mismo dato:

Lectores no esperan para escribirse.

Escribirse no esperan para los lectores.

Implementación De La Consistencia Leer

36

Page 38: Base de Datos03

Cerrando

En una base de datos Oracle, cierras: Impedir declaraciones destructivas en medio de transacciones concurrente. No requiere usar acción Automáticamente usa Lowest llano de restricciones. Esta held para la duración de la transacción. Esta es de 2 tipos: Cerrando implícita y cerrado explícita.

Cerrando Implícita Dos modos de cerrar:

Exclusiva: Llaves ausentes para otros usos.

Acción: Dejarse usar para otros accesos. Alto nivel en la ocurrencia de datos:

DML: Partir tablas, líneas exclusivas.

Preguntas: No requiere llaves.

DDL: Protege definiciones de objetos. Llaves de ayuda antes del commit o rollback.

Resume

En esta lección, tú puedes tener líneas ocultas para usar la declaración DML y transacciones de control.

Practica, Aplicación Global

Esta práctica cubre los tópicos siguientes: Insertando líneas into las tablas. Modificando y eliminando líneas en la tabla. Controlando transacciones.

37

Page 39: Base de Datos03

UNIDAD 4

Las capacidades de SQL las Declaraciones SELECT

La Declaración basicas SELECT

SELECT identifica qué columnas FROM identifica la tabla

Proyeccion

Tabla 1 Tabla 2

Tabla 1Tabla 1

Join

38

SELECT *|{[DISTINCT] column|expression [alias],...}FROM table;

SQL Básico escribiendo las Declaraciones SELECT

Los objetivos

Después de completar esta lección, usted debe ser capaz a haga a lo siguiente:

Liste las capacidades de SQL las declaraciones SELECT Ejecute una declaración SELECT básica Diferencie entre las declaraciones de SQL y órdenes del

iSQL*Plus

Page 40: Base de Datos03

Seleccionando Todas las Columnas

Las Columnas Específicas seleccionando

Escribiendo declaraciones SQL

Las declaraciones de SQL no son ningún caso sensible. Las declaraciones de SQL pueden ser encendido o más líneas. No pueden abreviarse las palabras claves o líneas del splitacross. Normalmente se ponen las cláusulas en las líneas separadas. Se usan las sangrías para reforzar la legibilidad.

Columna que Encabeza los Valores por defecto

iSQL*Plus: o La justificación de título de valor por defecto: El centro o El despliegue de título de valor por defecto: El mayúsculo

SQL*Plus: o El carácter y títulos de columna de Fecha quedan - justificado o Numere que los títulos de la columna están derecho-justificados o El despliegue de título de valor por defecto: El mayúsculo

SELECT *FROM departments;

SELECT department_id, location_idFROM departments;

39

Page 41: Base de Datos03

Las Expresiones aritméticas

Cree las expresiones con el número y datos de la fecha usando a los operadores aritméticos.

Usando operadores aritmeticos

Procedimientos de operadores

La multiplicación y prioridad de toma de división encima de la suma y substracción.

Operadores de la misma prioridad se evalúan de salió para corregir. Se usan los paréntesis forzar la evaluación priorizada y clarificar las

declaraciones.

Operator+-*

/

SUMA

RESTA

MULTIPLICACION

DIVISION

SELECT last_name, salary, salary + 300FROM employees;

40

**** //// ++++ ____

DescriptionAddSubtract Multiply Divide

Page 42: Base de Datos03

Usando paréntesis

Definiendo un Valor Nulo

Un nulo es un valor que es indisponible, el unassigned, desconocido, o inaplicable.

Un nulo no está igual que cero o un espacio pálido.

Los Valores nulos en las Expresiones Aritméticas

SELECT last_name, salary, 12*(salary+100)FROM employees;

41…

SELECT last_name, salary, 12*salary+100FROM employees;

SELECT last_name, job_id, salary, commission_pctFROM employees;

Page 43: Base de Datos03

Expresiones aritméticas que contienen un valor nulo

Definiendo una Columna AliasUna columna alias:

Renombra un columna encabezando Es útil con los cálculos Inmediatamente sigue el nombre de la columna - puede haber también el

optativo COMO la palabra clave entre el nombre de la columna y alias Requiere doble comilla si contiene espacios o los caracteres especiales o es el

caso sensible

Usando alias en columna

Concatenación de operadores

SELECT last_name "Name", salary*12 "AnnualSalary"FROM employees;

42

SELECT last_name, 12*salary*commission_pctFROM employees;

SELECT last_name AS name, commission_pct commFROM employees;

Page 44: Base de Datos03

Concatenación de operadores: Encadena las columnas o el carácter ata a otras columnas Se representa por dos barras verticales Crea una columna del resultante que es una expresión del carácter

Usando la concatenacion de operadores

Las Cadenas de caracteres literales Un literal es un carácter, un número, o una fecha incluidos en la lista SELECTA. La fecha y carácter que los valores literales deben incluirse dentro de solo

comilla. Cada concatenación del carácter es una vez el rendimiento para cada uno.

Las Cadenas de caracteres literales

Duplicando fila

SELECT last_name||job_id AS "Employees"FROM employees;

SELECT last_name ||' is a '||job_id AS "Employee Details"FROM employees;

43

Page 45: Base de Datos03

El despliegue predefinido de preguntas es todas las filas, mientras incluyendo las filas del duplicado.

Eliminando filas duplicadas

Elimine las filas dobles usando la palabra clave DISTINCT en la cláusula SELECT.

Resumen

SELECT department_idFROM employees;

SELECT department_idFROM employees;

SELECT DISTINCT department_idFROM employees;

44

Page 46: Base de Datos03

En esta lección, usted debe de haber aprendido cómo a:

Escriba una declaración SELECTA que:o Los ingresos todas las filas y columnas de una tablao Los ingresos especificaron las columnas de una tablao Los seudónimos de columna de usos para dar los títulos de la columna

descriptivos

Practica, Aplicación global

Esta práctica cubre los temas lo siguiente: Seleccionando todos los datos de las mesas diferentes Describiendo la estructura de tabla Los cálculos aritméticos realizando y los nombres de la columna especificando

UNIDAD 5

45

SELECT *|{[DISTINCT] column|expression [alias],...}FROM table;

Restringiendo y Ordenando los Datos

Objectives

Después de completar esta lección, usted debe ser capaz a haga a lo siguiente:

Limite las filas recuperadas por una pregunta Ordene las filas recuperadas por una pregunta

Page 47: Base de Datos03

Filas limitando que Usan una SelecciónEMPLOYEES

“recupere empleadosdel departamento 90

Limitando las Filas Seleccionadas

Restrinja las filas vueltas usando el DONDE la cláusula.

De la cláusula WHERE sigue la cláusula FROM

Usando la cláusula WHERE

46

SELECT *|{[DISTINCT] column|expression [alias],...}FROM table[WHERE condition(s)];

Page 48: Base de Datos03

Caracter cadena y datos

Los caracteres cadena y datos son valores que son adjuntados en una solo comilla

Los valores del carácter son el caso sensible, y los valores de la fecha son el formato sensible.

El formato de la fecha predefinido es DD-MON-RR.

Condiciones de comparación

Usando las condiciones de comparación

SELECT last_name, job_id, department_idFROM employeesWHERE last_name = 'Whalen';

47

SELECT employee_id, last_name, job_id, department_idFROM employeesWHERE department_id = 90 ;

DESCRIPCIONIGUAL AMAYOR QUEMAYOR IGUAL QUEMENORMENOR IGUAL QUEDIFERENTE A

Operator=>

>=<

<=<>

Page 49: Base de Datos03

Otras condiciones con comparaciones

Usando la condicion BETWEEN

Use el BETWEEN la condición para desplegar filas basadas en un rango de valores.

Usando la condición IN

SELECT last_name, salaryFROM employeesWHERE salary BETWEEN 2500 AND 3500;

Lower limit Upper limit

48

SELECT last_name, salaryFROM employeesWHERE salary <= 3000;

Entre dos valores (inclusivo),

Coincida cualquiera de una lista de valores

Coincida un modelo del carácter

Es un valor nulo

Page 50: Base de Datos03

Use el IN la condición del número de miembros para probar para los valores en una lista.

Usando la condicion LIKE

Use la condición LIKE para realizar búsquedas del wildcard de valores de cadena de búsqueda válidos.

Las condiciones de la búsqueda pueden contener carácteres literales o números: o % denota cero o muchos carácteres. o _ denota un carácter.

Usando la condicion LIKE

o Usted puede combinar modelo-emparejando los carácteres.

o Usted puede usar el identificador del ESCAPE para buscar el real% y símbolos de _.

Usando la condicion NULL

La prueba para el nulls con el operador IS NULL

49

SELECT employee_id, last_name, salary, manager_idFROM employeesWHERE manager_id IN (100, 101, 201);

SELECT first_nameFROM employeesWHERE first_name LIKE 'S%';

SELECT last_nameFROM employeesWHERE last_name LIKE '_o%';

Page 51: Base de Datos03

Condiciones logicas

Usando el operador AND

AND requiere de dos condiciones verdaderas

Usando el operador OR

OR require una condicion verdadera

50

SELECT last_name, manager_idFROM employeesWHERE manager_id IS NULL;

Retorna verdadero si los ambas condiciones son verdaderos

Retorna verdadero si cualquiera de las condiciones son verdaderas

Retorna verdadero si la siguiente condición es falsa

SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary >=10000AND job_id LIKE '%MAN%';

Page 52: Base de Datos03

Usando el operador NOT

Reglas de procedencia

SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary >= 10000OR job_id LIKE '%MAN%';

SELECT last_name, job_idFROM employeesWHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');

51

Page 53: Base de Datos03

Atropelle reglas de anterioridad usando los paréntesis.

Reglas de procedencia

Use los paréntesis para forzar la prioridad.

Cláusula ORDER BY

Las filas de la clase con el ORDEN POR la cláusula o ASC: el orden ascendente, el valor por defecto,

52

SELECT last_name, job_id, salaryFROM employeesWHERE job_id = 'SA_REP'OR job_id = 'AD_PRES'AND salary > 15000;

SELECT last_name, job_id, salaryFROM employeesWHERE (job_id = 'SA_REP'OR job_id = 'AD_PRES')AND salary > 15000;

Page 54: Base de Datos03

o DESC: el orden descendente El ORDEN POR la cláusula entra en último lugar en la declaración SELECTA.

Ordenando en el Orden Descendente

Ordenando Alias por la Columna

Ordenando por las Columnas Múltiples

• El ORDER BY lista en el orden de clase

53

SELECT last_name, job_id, department_id, hire_dateFROM employees

SELECT last_name, job_id, department_id, hire_dateFROM employeesORDER BY hire_date DESC ;

SELECT employee_id, last_name, salary*12 annsalFROM employeesORDER BY annsal;

Page 55: Base de Datos03

• Usted puede ordenar por una columna que ninguna está en la lista SELECT.

Resumen

En esta lección, usted debe de haber aprendido cómo a: o Use el WHERE la cláusula restrinja filas de rendimiento

o Use las condiciones de la comparación o Use la condicion BETWEEN, IN, LIKE, y NULLo Aplique los operadores logicos AND, OR y NOTo Use el ORDEN BY la cláusula ordenar filas de rendimiento

Practica, Apreciación global

Esta práctica cubre los temas siguientes:

o Los datos seleccionando y cambiando el ofrows del orden desplegado o Las filas restringiendo usando el DONDE la cláusula o Las filas ordenando usando el ORDEN BY la cláusula

UNIDAD 6

54

SELECT last_name, department_id, salaryFROM employeesORDER BY department_id, salary DESC;

SELECT *|{[DISTINCT] column|expression [alias],...}FROM table[WHERE condition(s)][ORDER BY {column, expr, alias} [ASC|DESC]];

Funciones De Registro Simple

Objetivos

Completando esta lección usted debe ser capaz de hacer lo siguiente: Describir varios tipos de variables de las funciones SQL Usar carácter, números, y funciones de la fecha en declaraciones SELECTAS Describir el uso de funciones de conversión

Page 56: Base de Datos03

Funciones SQL

Dos tipos de funciones de SQL

Funciones De Registro Simple

Manipula artículos de los datos Acepta argumentos y devuelva un valor

FuncionFuncionInput

arg 1arg 1

arg 2arg 2

arg arg nn

Function performs action

Output

ResultanteResultante

FuncionesFunciones

FUNCIONES DE REGISTRO

SIMPLE

FUNCIONES DE REGISTRO MULTIPLE

55

Entrada Salida

Page 57: Base de Datos03

Actúa en cada fila vuelta Devuelva un resultado por el registro Pueda modificar el tipo de los datos Puede anidarse Acepta argumentos que pueden ser una columna o una expresión

Funciones De Registro Simple

Función De Caracteres

Casos de funciones de manipulación

Estas funciones convierten caso para los cordones del carácter

nombre_de_function [(arg1, arg2,...)]nombre_de_function [(arg1, arg2,...)]

ConversionConversion

CaracterCaracter

NumerosNumeros

FechasFechas

GeneralGeneral

FUNCIONES DE REGISTRO SIMPLE

Funcion deFuncion deCaracterCaracter

LOWERUPPERINITCAP

CONCATSUBSTRLENGTHINSTRLPAD | RPADTRIMREPLACE

CASOS DE FUNCIONES DE MANIPULACIÓN

FUNCIONES DE MANIPULACIÓN TIPO CARACTER

56

Page 58: Base de Datos03

Usando Los Casos De Funciones De Manipulación

Despliegue el número del empleado, nombre, y número de la sección para el empleado Higgins

Funciones De Manipulación Tipo Carácter

Estas funciones manipulan cordones del carácter:

Usando Las Funciones Manipulación Tipo Carácter

Functiones Resultados

LOWER('SQL Course')UPPER('SQL Course')INITCAP('SQL Course')

sql courseSQL COURSESql Course

SELECT employee_id, last_name, department_idFROM employeesWHERE last_name = 'higgins';no rows selectedno rows selected

SELECT employee_id, last_name, department_idFROM employeesWHERE last_name = 'higgins';no rows selectedno rows selected

SELECT employee_id, last_name, department_idFROM employeesWHERE LOWER(last_name) = 'higgins';

CONCAT('Hello', 'World')SUBSTR('HelloWorld',1,5)LENGTH('HelloWorld')INSTR('HelloWorld', 'W')LPAD(salary,10,'*')RPAD(salary, 10, '*')TRIM('H' FROM 'HelloWorld')

HelloWorldHello106*****2400024000*****elloWorld

Function Result

57

Page 59: Base de Datos03

Función tipo numérico

ROUND: Las rondas valoran al decimal especificado ROUND(45.926, 2) 45.93TRUNC: Trunca valor al decimal especificado TRUNC(45.926, 2) 45.92MOD: Resto de los ingresos de divisiónMOD(1600, 300) 100

Usando La Función Round

DUAL es una tabla vacía donde usted puede acostumbrarse a ver resultados de las funciones y cálculos.

Usando La Función Trunc

SELECT employee_id, CONCAT(first_name, last_name) NAME, job_id, LENGTH (last_name), INSTR(last_name, 'a') "Contains 'a'?"FROM employeesWHERE SUBSTR(job_id, 4) = 'REP';

1

2

31 2

3

SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1)FROM DUAL;

1 2

3

31 2

58

Page 60: Base de Datos03

Usando La Función Mod

Calcule el resto de un sueldo después de que es dividido a través de 5000 para todos los empleados cuyo cargo es representante de las ventas.

Trabajando Con Fechaso La base de datos de oracle guarda fechas en un formato numérico interior: siglo,

año, mes, día, horas, minutos, segundos. o El formato de despliegue de fecha predefinido es DD-MON-RR. (día, mes -

año)o Le permite guardar 21 siglos como fecha en 20 siglos especificando sólo

los últimos dos dígitos del año. o Le permite guardar 20 siglo fecha en el 21 siglo de la misma manera.

Trabajando Con Fechas

SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-2)FROM DUAL;

31 2

1 2

3

SELECT last_name, salary, MOD(salary, 5000)FROM employeesWHERE job_id = 'SA_REP';

SELECT last_name, hire_dateFROM employeesWHERE last_name like ''G%';';

59

Page 61: Base de Datos03

SYSDATE es una función que vuelve: o Date o Time

Fechas En Forma Aritmética

Agregue o substraiga un número a o de una fecha para un valor de fecha de resultante.

Substraiga dos fechas para encontrar el número de días entre esas fechas. Agregue horas a una fecha dividiendo el número de horas a través de 24.

Usando Operaciones Aritméticas Con Fechas

Funciones De La Fecha

Usando funciones de fecha

SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKSFROM employeesWHERE department_id = 90;

Número de meses entre dos fechasMONTHS_BETWEEN

ADD_MONTHS

NEXT_DAY

LAST_DAY

ROUND

TRUNC

Añadir meses a la fecha

siguiente día de la fechaespecificada

Último día del mes

Redondear Fecha

Truncar Fecha

Función Descripción

60

Page 62: Base de Datos03

Asuma que SYSDATE = '25-JUL-95':

Usando funciones de fecha

Practica, Apreciación Global

Esta práctica cubre los temas siguientes: Escribiendo una pregunta que despliega la fecha actual Creando preguntas que requieren el uso de numérico, carácter, y funciones de la

fecha Realizando los cálculos de años y meses de servicio para un empleado

Conversión de funciones

MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')

ADD_MONTHS ('11-JAN-94',6)

NEXT_DAY ('01-SEP-95','FRIDAY')

LAST_DAY('01-FEB-95')

19.6774194

'08-SEP-95'

'28-FEB-95'

'11-JUL-94'

ROUND(SYSDATE,'MONTH') 01-AUG-95

TRUNC(SYSDATE ,'MONTH') 01-JUL-95

TRUNC(SYSDATE ,'YEAR') 01-JAN-95

61

Page 63: Base de Datos03

Conversión De Tipo De Datos Implícita

Para las asignaciones, el servidor del Oracle puede automáticamente convertir a lo siguiente:

Conversión De Tipo De Datos Implícita

Para la evaluación de la expresión, el Servidor del Oracle puede automáticamente convertir a lo siguiente:

Conversión De Tipo De Datos Implícita

62

Conversión deConversión deTipos de datosTipos de datos

ImplícitaImplícita

Conversión deConversión deTipos de datos Tipos de datos

ExplícitaExplícita

Tipos de Tipos de ConversiónConversión

FechaFecha

VARCHAR2 or CHAR

DE A

VARCHAR2 or CHAR

NUMBER

DATE

NUMBER

DATE

VARCHAR2

VARCHAR2

VARCHAR2 or CHAR

DE A

VARCHAR2 or CHAR

NUMBER

DATE

Page 64: Base de Datos03

Usando La Función To_Char Con Fechas

El modelo del formato: Debe adjuntarse en comillas simples y debe ser casos sensible Pueda incluir cualquier elemento de formato de fecha válido Tiene el elemento fm para quitar espacios en blanco rellenos o suprimir ceros

principales Está separado del valor de la fecha por una coma

Elementos Del Modelo De Formato De Fecha

Elementos Del Modelo De Formato De Fecha

TO_CHAR(date, 'modelo_de_formato')TO_CHAR(date, 'modelo_de_formato')

YYYYYEAR

MM

MONTH

DY

DAY

Año entero en númerosDeletreo de salida de Año

Tres letras abreviatura del día de la semana

Nombre entero del día de la semana

Nombre entero del mes

MON Tres letras abreviatura del mes

DD Día numérico del mes

Valor del dos dígitos durante mes

63

CARACTER

TO_CHAR

TO_NUMBER

DATE

TO_CHAR

TO_DATE

NUMBER

Page 65: Base de Datos03

Cronometre que los elementos estructuran la porción de tiempo de la fecha.

Agregue que el carácter ata adjuntándolos en doble comillas.

Numere que los sufijos deletrean fuera los números

Usando La Función To_Char Con Fechas

Usando la función to_char con números

Éstos son algunos de los elementos del formato que usted puede usar con la función de TO_CHAR para desplegar un valor del número como un carácter:

HH24:MI:SS AM 15:45:32 PM

DD "of" MONTH 12 of OCTOBER

ddspth fourteenth

SELECT last_name, TO_CHAR(hire_date, 'fmDD Month YYYY') AS HIREDATEFROM employees;

TO_CHAR(number, 'format_model')TO_CHAR(number, 'format_model')

64

9

0

$

L

.

,

Representa un numero

Forza un cero para displayarlo

Places a floating dollar sign

Uses the floating local currency symbol

Muestra el indicador de mil

Muestra un punto decimal

Page 66: Base de Datos03

Usando La Función To_Char Con Números

Uusando la función to_number y to_date

Convierta un cordón del carácter a un formato del número que usa la función de TO_NUMBER:

Convierta un cordón del carácter a un formato de la fecha que usa la función de TO_DATE: Estas funciones tienen un modificador del fx. Este modificador especifica el mparejando exacto para el argumento del carácter y modelo de formato de fecha de una función de TO_DATE

Usando La Función To_Number Y Funciones To_Date

SELECT TO_CHAR(salary, '$99,999.00') SALARYFROM employeesWHERE last_name = 'Ernst';

TO_NUMBER(char[, 'format_model'])TO_NUMBER(char[, 'format_model'])

TO_DATE(char[, 'format_model'])TO_DATE(char[, 'format_model'])

65

Page 67: Base de Datos03

Convierta un cordón del carácter a un formato del número que usa la función de TO_NUMBER:

Convierta un cordón del carácter a un formato de la fecha que usa la función de TO_DATE:

Estas funciones tienen un modificador del fx. Este modificador especifica el mparejando exacto para el argumento del carácter y modelo de formato de fecha de una función de TO_DATE

Formato De Fecha RR

Ejemplo de formato rr

Para encontrar a empleados contratados a prior a 1990, use el RR estructure que reduce los mismos resultados si el orden se corre en 1999 o ahora:

Anidando Funciones

TO_NUMBER(char[, 'format_model'])TO_NUMBER(char[, 'format_model'])

TO_DATE(char[, 'format_model'])TO_DATE(char[, 'format_model'])

SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY')FROM employeesWHERE hire_date < TO_DATE('01-Jan-90', 'DD-Mon-RR');

66

Año Actual1995199520012001

Fecha específica27-OCT-9527-OCT-1727-OCT-1727-OCT-95

Formato RR 1995201720171995

Formato YY 1995191720172095

Si dos dígitos del año actual son:

0–49

0–49 50–99

50–99

La fecha del retorno está en el siglo actualLa fecha del retorno persigue por el siglo el actual

La fecha del retorno está por el siglo antes del actual

La fecha del retorno está en el siglo actual

Si el año especificado es de dos dígitos:

Page 68: Base de Datos03

o Pueden anidarse funciones de la solo-fila a cualquier nivel. o Se evalúan funciones anidadas del nivel más profundo al nivel profundo.

Funciones generales

Estas funciones trabajan con cualquier datos teclee y pertenezca a usar nulls.

• NVL (expr1, expr2)• NVL2 (expr1, expr2, expr3)• NULLIF (expr1, expr2)• COALESCE (expr1, expr2, ..., exprn)

Funciones NVL

Convertido un nulo a un valor real.

o Tipos de los datos que pueden usarse son fecha, carácter, y número. o Los tipos de los datos deben emparejar:

– NVL(commission_pct,0)– NVL(hire_date,'01-JAN-97')– NVL(job_id,'No Job Yet')

67

SELECT last_name, NVL(TO_CHAR(manager_id), 'No Manager')FROM employeesWHERE manager_id IS NULL;

F3(F2(F1(col,arg1),arg2),arg3)Step 1 = Result 1

Step 2 = Result 2

Step 3 = Result 3

Page 69: Base de Datos03

Uusando la función de NVL

Usando La Función NVL2

1 2

12

SELECT last_name, salary, NVL(commission_pct, 0), (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SALFROM employees;

1 2

12

68

SELECT last_name, salary, commission_pct, NVL2(commission_pct, 'SAL+COMM', 'SAL') incomeFROM employees WHERE department_id IN (50, 80);

Page 70: Base de Datos03

Usando La Función De NULLIF

Usando La Función COALESCE

o La ventaja del UNA función encima de la función de NVL es que el UNA la función puede tomar valores del alternante múltiples.

o Si la primera expresión no es nula, vuelve que la expresión; por otra parte, hace un UNA de las expresiones restantes.

Expresiones condicionales

SELECT first_name, LENGTH(first_name) "expr1", last_name, LENGTH(last_name) "expr2", NULLIF(LENGTH(first_name), LENGTH(last_name)) resultFROM employees;

1

23

1 2 3

SELECT last_name, COALESCE(commission_pct, salary, 10) commFROM employeesORDER BY commission_pct;

69

Page 71: Base de Datos03

o Proporcione el uso de lógica del SI-ENTONCES-RESTO dentro de una declaración de SQL

o Use dos métodos: o Expresión del CASE o Función DECODE

Expresión Del Case

Facilita preguntas condicionales haciendo el trabajo de una declaración del SI-NTONCES-RESTO:

Expresión CASE

Facilita preguntas condicionales haciendo el trabajo de una declaración del SI-ENTONCES-RESTO:

Función DECODE

Facilita preguntas condicionales haciendo el trabajo de un CASO o declaración del SI-ENTONCES-RESTO:

Usando La Función DECODE

CASE expr WHEN comparison_expr1 THEN return_expr1 [WHEN comparison_expr2 THEN return_expr2 WHEN comparison_exprn THEN return_exprn ELSE else_expr]END

CASE expr WHEN comparison_expr1 THEN return_expr1 [WHEN comparison_expr2 THEN return_expr2 WHEN comparison_exprn THEN return_exprn ELSE else_expr]END

SELECT last_name, job_id, salary, CASE job_id WHEN 'IT_PROG' THEN 1.10*salary WHEN 'ST_CLERK' THEN 1.15*salary WHEN 'SA_REP' THEN 1.20*salary ELSE salary END "REVISED_SALARY"FROM employees;

70

DECODE(col|expression, search1, result1 [, search2, result2,...,] [, default])

Page 72: Base de Datos03

Despliegue la proporción del impuesto aplicable para cada empleado en sección 80.

Resumen

En esta lección, usted debe de haber aprendido cómo a: o Realice cálculos en datos que usan funciones o Modifique artículos de los datos individuales que usan funciones o Manipule rendimiento para los grupos de filas que usan funciones o Altere formatos de la fecha para despliegue que usa funciones o Convierta que el datos de la columna teclea usando funciones o Uso las funciones de NVL o Use lógica del SI-ENTONCES-RESTO

Practica, Apreciación Global

Esta práctica cubre los temas siguientes: o Preguntas creando que requieren el uso de numérico, carácter, y funciones de la

fecha o Encadenamiento usando con funciones o Preguntas caso-insensibles escribiendo para probar la utilidad de funciones del

carácter o Los cálculos realizando de años y meses de servicio para un empleado o Determinando la fecha de la revisión para un empleado

SELECT last_name, job_id, salary, DECODE(job_id, 'IT_PROG', 1.10*salary, 'ST_CLERK', 1.15*salary, 'SA_REP', 1.20*salary, salary) REVISED_SALARYFROM employees;

71

Page 73: Base de Datos03

UNIDAD 7

Obtener datos de tablas múltiples

Productos Cartesianos

• Un producto cartesiano es formado cuando:– Una condición de unión es omitida– Una condición de unión es invalida– Todas las filas de la primera tabla están unidad a todas las filas en la

segunda tabla• Para evitar un producto cartesiano, siempre incluimos una condición de unión

valida en una cláusula WHERE.

72

EMPLOYEES

EMPLOYEED

DEPARTMENT

Visualizar datos múltiples de una tabla

Objetivos

Completando esta lección usted debe ser capaz a hacer lo siguiente:o Escribir declaraciones SELECTAS para acceder a datos de más de una tabla

usando igualdad e inigualdad juntaso Ver datos que generalmente no se encuentra en una condición de unión

usando otras uniones exterioreso Unir una tabla a si misma usando una unión a si misma

Page 74: Base de Datos03

Generando Un Producto Cartesiano

Tipos De Uniones

Oracle Propiedades de SQL: 1999 (ANSI) uniones en (8i and prior): Compliant Joins:

• Igualdad de union• No igualdad de union• Uniones exteriores• Union con si misma

Tables Unidas Usando Sintaxis Oracle

Use una union para preguntar datos de más de una tabla.

• Escriba la condicion de union en la clausula WHERE .• Prefije el nombre de la columna con el nombre de la tabla cuando el mismo

nombre de la columna aparece en más de una tabla.

Cartesianproduct:

20x8=160 rows

EMPLOYEES (20 rows) DEPARTMENTS (8 rows)

73

• Uniones cruzada• Uniones naturales• Usando clausula• Lleno o dos estado de uniones

exteriores• Condicion de uniones arbitraries

para uniones exteriores

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column1 = table2.column2;

Page 75: Base de Datos03

Que es una igualdad de union?( Oracle Proprietary )

Recuperando registros con Igualdad de unión

EMPLOYEES DEPARTMENTS

Foreign key Primary key

… …

74

SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_idFROM employees, departmentsWHERE employees.department_id =

Page 76: Base de Datos03

Buscar condiciones adicionales usando el operador AND

Limitando Columnas con nombres ambiguos

• Usar tablas prefijos de limitar columnas con nombres que están en múltiples tablas.

• Mejorar la representación usando tablas con prefijos.• Distinguir columnas que tienen nombres idénticos pero residen en diferentes

tablas usando columnas con alias

Usando Tables con Alias

• Simplificar preguntas Usando tablas con alias.

• Mejorar la representación usando tablas con prefijos.

Uniendo más de dos tablas

• Para unir n tablas juntas, tu necesitas un mínimo de n-1 condiciones unidas. Por ejemplo, para juntar tres tablas, un mínimo de dos uniones es requeridas

EMPLOYEES DEPARTMENTS

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e , departments dWHERE e.department_id = d.department_id;

EMPLOYEES LOCATIONS DEPARTMENTS

75

Page 77: Base de Datos03

No Igualdad de union ( Oracle Propietario )

Recuperando Registros con No-Igualdad de unión

Uniones Exteriores ( Oracle Proppietario )

EMPLOYEES JOB_GRADES

El sueldo en los EMPLOYEE la tabla debe ser entre el sueldo más bajo y más alto el sueldo en el JOB_GRADES

SELECT e.last_name, e.salary, j.grade_levelFROM employees e, job_grades jWHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;

EMPLOYEESDEPARTMENTS

There are no employees in department 190. …

76

Page 78: Base de Datos03

Sintaxis de Uniones Exteriores

• Usted usa una unión exterior también para ver filas que no se encuentran en la condición de unión.

• La unión exterior operador es el signo más (+).

Usando Uniones Exteriores

Uniones con si misma

Uniendo una tabla a si misma

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column(+) = table2.column;

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column(+) = table2.column;

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column = table2.column(+);

SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column = table2.column(+);

SELECT e.last_name, e.department_id, d.department_nameFROM employees e, departments dWHERE e.department_id(+) = d.department_id ;

EMPLOYEES (WORKER) EMPLOYEES (MANAGER)

MANAGER_ID es una tabla igual que la tabla EMPLOYEE_ID en la tabla MANAGER.

… …

77

Page 79: Base de Datos03

Uniendo Tablas Usando SQL: Sintaxis 1999

Use una unión para preguntar datos de más de una tabla.

Creando uniones cruzadas

• La cláusula Unión Cruzada produce el producto-cruzado de dos tablas. • Esto está igual que un producto Cartesiano entre las dos tablas

Creando Uniones Naturales

SELECT worker.last_name || ' works for ' || manager.last_nameFROM employees worker, employees managerWHERE worker.manager_id = manager.employee_id ;

SELECT last_name, department_nameFROM employeesCROSS JOIN departments ;

78

SELECT table1.column, table2.columnFROM table1[CROSS JOIN table2] |[NATURAL JOIN table2] |[JOIN table2 USING (column_name)] |[JOIN table2 ON(table1.column_name = table2.column_name)] |[LEFT|RIGHT|FULL OUTER JOIN table2 ON (table1.column_name = table2.column_name)];

Page 80: Base de Datos03

• La cláusula UNION NATURAL esta basada sobre todas las columnas en las dos tablas que tienen el nombre igual.

• Estas filas consultadas de las dos tablas que tienen igual valores en todas las columnas marcadas.

• Si las columnas teniendo los nombres iguales tienen diferentes tipos de datos, esto produce un error.

Recuperando Registros con Uniones Naturales

Creando Uniones Con La Cláusula Usando

• Si varias columnas tienen los mismos nombres excepto los tipos del datos no igualan, la cláusula unión natural puede modificarse con la cláusula usando para especificar las columnas que deben usarse para una igualdad de unión

• Use la cláusula usando para igualar a sólo una columna cuando más de una la columna igualada.

• No use un nombre de la tabla o alias en las columnas referenciadas • La unión natural y cláusulas usando son mutuamente exclusivos.

Recuperando Registros Con La Cláusula Usando

Creando Uniones Con La Cláusula ON

SELECT e.employee_id, e.last_name, d.location_idFROM employees e JOIN departments dUSING (department_id) ;

79

SELECT department_id, department_name, location_id, cityFROM departmentsNATURAL JOIN locations ;

Page 81: Base de Datos03

• La condición unión para la unión natural básicamente una igualdad de unión de todas las columnas con el mismo nombre.

• Especificar condiciones arbitrarias o especificar columnas para unir, en la cláusula ON se usa.

• La condición unión está separada de otras condiciones de la búsqueda. • La cláusula ON esta hacha con código fácil entender.• La condición unión para la unión natural básicamente una igualdad de unión de

todas las columnas con el mismo nombre. • Especificar condiciones arbitrarias o especificar columnas para unir, en la

cláusula ON se usa.

Creando tres maneras de unir con la cláusula ON

Creando tres maneras de unir con la cláusula ON

Uniones Internas VS Externas

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e JOIN departments dON (e.department_id = d.department_id);

80

SELECT employee_id, city, department_nameFROM employees e JOIN departments dON d.department_id = e.department_id JOIN locations lON d.location_id = l.location_id;

Page 82: Base de Datos03

• En SQL: 1999, la unión de dos tablas retornaba solo filas igualadas en una unión interna.

• Una unión entre dos tablas que devuelven los resultados de la unión interior así como cuando salieron filas (o correctas) tablas salieron(o correctas) unión externa.

• Una unión entre dos tablas que devuelven los resultados de una unión interna así como los resultados de una izquierda y derecha es todo una unión externa.

Union Externa Salida

Corregir Unión Externa

Llenar Unión Externa

81

SELECT e.last_name, e.department_id, d.department_nameFROM employees eLEFT OUTER JOIN departments dON (e.department_id = d.department_id) ;

SELECT e.last_name, e.department_id, d.department_nameFROM employees eRIGHT OUTER JOIN departments dON (e.department_id = d.department_id) ;

Page 83: Base de Datos03

Adicionar Condiciones

Resumen

En esta lección, usted debería haber aprendido como usar uniones para presentar datos de múltiples tablas en:

• Sintaxis propiedad de Oracle para versiones 8i y anteriores • SQL: 1999 sintaxis dóciles para versiones 9i

Practica, Apreciación global

Esta práctica cubre los temas siguientes: Uniendo tablas que usan una igualdad de unión Realizando uniones externas a si mismas Agregando condiciones

82

SELECT e.last_name, e.department_id, d.department_nameFROM employees eFULL OUTER JOIN departments dON (e.department_id = d.department_id) ;

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e JOIN departments dON (e.department_id = d.department_id)AND e.manager_id = 149 ;

Page 84: Base de Datos03

UNIDAD 8

¿Que son las funciones de grupo?

Las funciones del grupo operan en los juegos de filas para dar un resultado por el grupo.

Tipos de funciones de grupo

• AVG • COUNT • MAX• MIN • STDDEV • SUM• VARIANCE

Sintaxis de una función de grupo

EMPLOYEES

El máximo salario En la tablaEMPLOYEES,

83

Agregando datos con funciones de grupo

Objetivos

Después de completar esta lección, usted debe ser capaz a hacer lo siguiente:• Identifique las funciones de grupo disponibles• Describa el uso de funciones de grupo• Datos de grupo que usan el GROUP BY la cláusula• Incluya o excluya las filas agrupadas usando la cláusula HAVING

Page 85: Base de Datos03

Usando la funcion AVG y SUM

Usted puede usar AVG y SUM para dato numérico

Usando la función MIN y MAX

Usted puede usar MIN y MAX para cualquier tipo de dato

Usando la función COUNT

COUNT (*) retorna un numero en la fila de una tabla

Usando la funcion COUNT (*)

SELECT [column,] group_function(column), ...FROM table[WHERE condition][GROUP BY column][ORDER BY column];

SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)FROM employeesWHERE job_id LIKE '%REP%';

SELECT COUNT(*)FROM employeesWHERE department_id = 50;

84

SELECT MIN(hire_date), MAX(hire_date)FROM employees;

Page 86: Base de Datos03

• COUNT(expr) los ingresos el número de filas con los valores no-nulos para el expr.

• Despliegue el número de valores del departamento en la mesa de los EMPLOYEE, mientras excluyendo los valores nulos

Usando la palabra clave DISTINCT.

• El expresión de COUNT(DISTINCT) los ingresos el número de valores no-nulos distintos de la expresión.

• Despliegue que el número de departamento distinto valora en la tabla EMPLOYEE.

Funciones de grupos y valores nulos

Funciones de grupos ignoran los valores nulos en una columna

Usando la función NVL con funciones de grupos

Las funciones NVL fuerzan a las funciones de grupos a incluir valores nulos

Creando datos de grupos

SELECT COUNT(commission_pct)FROM employeesWHERE department_id = 80;

SELECT COUNT(DISTINCT department_id)FROM employees;

SELECT AVG(commission_pct)FROM employees;

SELECT AVG(NVL(commission_pct, 0))FROM employees;

85

Page 87: Base de Datos03

Creando grupos de datos

Divida las filas de una tabla en los grupos menores usando la cláusula GROUP BY la cláusula.

Usando la clausula GROUP BY

Todas las columnas en la lista SELECT que no está en el grupo las funciones deben estar en la clausula GROUP BY.

El GROUP BY la columna no tiene que estar en el La lista SELECTA.

EMPLOYEES

The averagesalary in EMPLOYEEStable for each department.

4400

9500

3500

6400

10033

SELECT department_id, AVG(salary)FROM employeesGROUP BY department_id ;

86

SELECT column, group_function(column)FROM table[WHERE condition][GROUP BY group_by_expression][ORDER BY column];

Page 88: Base de Datos03

Agrupando mas de una columna

SELECT AVG(salary)FROM employeesGROUP BY department_id ;

EMPLOYEES

“Add up the salaries in

the EMPLOYEES table

for each job, grouped by department.

87

Page 89: Base de Datos03

Usando la cláusula GROUP BY en columnas múltiples

Preguntas ilegales que usan las funciones de grupos

Cualquier columna o expresión en la lista SELECT que no es una función agregado debe estar en la cláusula GROUP BY.

Usted no puede usar la cláusula WHERE para restringir los grupos. Usted usa la cláusula HAVING restringir los grupos. Usted no puede usar las funciones de grupo en la cláusula WHERE

Los Resultados De grupo excluyendo

SELECT department_id dept_id, job_id, SUM(salary)FROM employeesGROUP BY department_id, job_id ;

SELECT department_id, COUNT(last_name)FROM employees;

SELECT department_id, COUNT(last_name)FROM employees;

SELECT department_id, COUNT(last_name) *ERROR at line 1:ORA-00937: not a single-group group function

SELECT department_id, COUNT(last_name) *ERROR at line 1:ORA-00937: not a single-group group function

SELECT department_id, AVG(salary)FROM employeesWHERE AVG(salary) > 8000GROUP BY department_id;

SELECT department_id, AVG(salary)FROM employeesWHERE AVG(salary) > 8000GROUP BY department_id;

WHERE AVG(salary) > 8000 *ERROR at line 3:ORA-00934: group function is not allowed here

WHERE AVG(salary) > 8000 *ERROR at line 3:ORA-00934: group function is not allowed here

Cannot use the WHERE clause to restrict groupsCannot use the WHERE clause to restrict groups

88

Page 90: Base de Datos03

Los Resultados De grupo excluyendo:La cláusula HAving

Usando la cláusula HAVING para restringir grupos1. Agrupando filas2. La función de grupo es aplicable3. Se despliegan grupos que coinciden la cláusula HAVIN

Usando la cláusula HAVING

Anidando funciones de grupos

The maximumsalary

per departmentwhen it is

greater than$10,000

EMPLOYEES

SELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];

SELECT job_id, SUM(salary) PAYROLLFROM employeesWHERE job_id NOT LIKE '%REP%'GROUP BY job_idHAVING SUM(salary) > 13000ORDER BY SUM(salary);

89

Page 91: Base de Datos03

Presentar el máximo valor de salario

Resumen

En esta lección, usted debe de haber aprendido a: Usar las funciones grupo MÁX, MIN, AVG,COUNT Escriba preguntas que usan la cláusula GROYUP BY Escriba preguntas que usan la cláusula HAVING

Practica, Aplicación global

Esta práctica cubre los temas lo siguiente:

Preguntas escribiendo que usan las funciones de grupo Agrupándose por las filas para lograr más de un resultado Excluyendo grupos usando la cláusula HAVING

SELECT MAX(AVG(salary))FROM employeesGROUP BY department_id;

SELECT column, group_function(column)FROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];

90

Page 92: Base de Datos03

UNIDAD 9

Usar Sub-queriesPara resolver problemas

¿Quién tiene un sueldo mayor que Abel?

Sintaxis de un subqueries

El subquery (la pregunta interna) ejecuta una vez antes de la pregunta principal. El resultado del subquery se usa por la pregunta principal (la pregunta exterior).

Usando subqueries

91

SELECT select_listFROM tableWHERE expr operator

(SELECT select_list FROM table);

Subqueries

Objetivos

Después de completar esta lección, usted debe ser capaz a Hacer lo siguiente Describa los tipos de problema que los subqueries pueden resolver Defina el subqueries Liste los tipos de subqueries Escriba solo-fila y subqueries de la múltiple-fila

¿Qué empleados tienen los sueldos mayor que el sueldo de Abel?

Main Query:

??

¿Cuál es el sueldo de Abel???

Subquery

Page 93: Base de Datos03

Las pautas para usar subqueries

Adjunte el subqueries en los paréntesis. Ponga el subqueries en el lado correcto de la condición de la comparación. La cláusula ORDER BY subquery no se necesita a menos que usted está

realizando un análisis TOP-N. Use a operadores de una solo-fila con los subqueries de la solo-fila y operadores

de múltiple-fila con subqueries de múltiple-flial

Tipos de subqueries

Subqueries de una sola fila Retorna una sola columna Usa una sola fila con operadores de comparación

SELECT last_nameFROM employeesWHERE salary > (SELECT salary FROM employees WHERE last_name = 'Abel');

11000

Main query

Subquery returns ST_CLERK

Multiple-row subquery

ST_CLERKSA_MAN

Main query

Subquery returns

Single-row subquery

92

Page 94: Base de Datos03

Ejecutando subqueries solo una fila

Usando funciones de grupos en un subqueries

La cláusula HAVING con subqueries

El servidor de oracle ejecuta primero los subqueries El servidor de oracle retorna resultados de la cláusula HAVING a la pregunta

principal

SELECT last_name, job_id, salaryFROM employeesWHERE salary = (SELECT MIN(salary) FROM employees);

2500

SELECT department_id, MIN(salary)FROM employeesGROUP BY department_idHAVING MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 50);

2500

93

SELECT last_name, job_id, salaryFROM employeesWHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 141)AND salary > (SELECT salary FROM employees WHERE employee_id = 143);

ST_CLERK

2600

Page 95: Base de Datos03

Cual esta equivocado con estadeclaracion?

¿Esta Declaración Devolverá las Filas?

Subqueries múltiples filas

Retorna mas de una fila Usa múltiples filas para operadores de comparaciones

SELECT employee_id, last_nameFROM employeesWHERE salary = (SELECT MIN(salary) FROM employees GROUP BY department_id);

ERROR at line 4:ORA-01427: single-row subquery returns more thanone row

ERROR at line 4:ORA-01427: single-row subquery returns more thanone row

Single-row operator with multiple-row subquerySingle-row operator with multiple-row subquery

no rows selectedno rows selected

SELECT last_name, job_idFROM employeesWHERE job_id = (SELECT job_id FROM employees WHERE last_name = 'Haas');

Subquery no retorna valoresSubquery no retorna valores

94

Page 96: Base de Datos03

Usando el operador ANY en subqueries multiples filas

Usando el operador ALL en subqueries multiples filas

Valores nulos en un subqueries

9000, 6000, 4200SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'IT_PROG')AND job_id <> 'IT_PROG';

SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary < ALL (SELECT salary FROM employees WHERE job_id = 'IT_PROG')AND job_id <> 'IT_PROG';

9000, 6000, 4200

SELECT emp.last_nameFROM employees empWHERE emp.employee_id NOT IN (SELECT mgr.manager_id FROM employees mgr);no rows selectedno rows selected

95

Page 97: Base de Datos03

Resumen

En esta lección, usted debe de haber aprendido a: Identifique cuando un subquery puede ayudar a resolver una pregunta

Escriba el subqueries cuando una pregunta es basada adelante

Practica, Aplicación global

Esta práctica cubre los temas lo siguiente:

El subqueries creando para preguntar valores basados en el criterio desconocido Los subqueries usando para encontrar fuera que los valores existen en uno

pusieron de datos y no en otro

SELECT select_listFROM tableWHERE expr operator

(SELECT select_list FROM table);

96

Page 98: Base de Datos03

UNIDAD 10

Otros objetos de base de daros

SecuenciasUna sucesión:

Automáticamente genera los únicos números Es un objeto del sharable Se usa para crear un valor importante primario típicamente Reemplaza el código de la aplicación Las velocidades a la eficacia de acceder la sucesión valoran cuando escondió en

la memoria

Defina una sucesión para generar los números secuenciales automáticamente:

Creando una Sucesión

97

CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];

Otros objetos de base de darosObjetivos

Después de completar esta lección, usted debe ser capaz de hacerlo siguiente: Cree, mantenga, y use las sucesiones Cree y mantenga los índices Cree los sinónimos privados y públicos

Page 99: Base de Datos03

Cree que una sucesión nombrada DEPT_DEPTID_SEQ para ser usado para la llave primaria de la tabla de los DEPARTMENT.

No use la opción del CTCLE.

Las Sucesiones confirmando

Verifique sus valores de la sucesión en la USER_SEQUENCES datos diccionario mesa.

La columna de LAST_NUMBER despliega el próximo número de la sucesión isponible si NOCACHE se especifica.

Usando una Sucesión

Inserte un nuevo departamento nombrado “el Apoyo” en la situación ID 2500.

Vea el valor actual por la sucesión de DEPT_DEPTID_SEQ.

Usando una secuencia

Los valores de la sucesión escondiendo en la memoria dan el acceso más rápido a esos valores.

98

INSERT INTO departments(department_id, department_name, location_id)VALUES (dept_deptid_seq.NEXTVAL, 'Support', 2500);1 row created.

SELECT sequence_name, min_value, max_value, increment_by, last_number

FROM user_sequences;

CREATE SEQUENCE dept_deptid_seq INCREMENT BY 10 START WITH 120 MAXVALUE 9999 NOCACHE NOCYCLE;Sequence created.

SELECT dept_deptid_seq.CURRVALFROM dual;

Page 100: Base de Datos03

Los huecos en los valores de la sucesión pueden ocurrir cuando: Un rollback ocurre El sistema choca Una sucesión se usa en otra tabla Si la sucesión se creara con NOCACHE, vea el próximo valor disponible,

preguntando la mesa de USER_SEQUENCES.

Modificando una Sucesión

Cambie el valor de incremento, valor máximo, valor mínimo, opción del ciclo, u opción del escondite

Las pautas por Modificar una Sucesión

Usted debe ser el dueño o debe tener el ALTER el privilegio para la sucesión. Sólo números de la sucesión futuros son afectado. La sucesión debe dejarse caer y debe recrearse para reiniciar la sucesión a un

número diferente. Un poco de aprobación ha realizado.

Quitando una Sucesión

Quite una sucesión del diccionario de los datos usando la declaración de DROP SEQUENCE

Una vez alejado, la sucesión ya no puede ser los referencias

1. VISTAS

Indicex

Que es un indice

o Es un objeto del esquema

99

DROP SEQUENCE dept_deptid_seq;Sequence dropped.

ALTER SEQUENCE dept_deptid_seq INCREMENT BY 20 MAXVALUE 999999 NOCACHE NOCYCLE;Sequence altered.

Page 101: Base de Datos03

o Se usa por el servidor de Oracle para acelerar la recuperación de filas usando un indicador

o Puede reducir el disco I/O usando un método de acceso de camino rápido para localizar los datos rápidamente

o Es independiente de la mesa que pone en un índice o Se usa y mantuvo automáticamente por el servidor de Oracle

¿Cómo los Índices se Crean?

Automáticamente: Un único índice se crea automáticamente cuando usted define una LLAVE PRIMARIA o el ÚNICO constreñimiento en una definición de la mesa. Por mano: Los usuarios pueden crear los índices del nonunique en las columnas acelerar el acceso a las filas.

Creando Indices

Cree un índice encendido o más columnas.

Mejore la velocidad de acceso de la pregunta a la columna de LAST_NAME en la mesa de los EMPLEADOS.

Cuándo Crear un Indices

Usted debe crear un índice si: o Una columna contiene una gama amplia de valores o Una columna contiene un número grande de valores nulos o Uno o más columnas frecuentemente se usan juntos en un DONDE cláusula o un

una la condición o La TABLA es grande y se espera que la mayoría de las preguntas recupere

menos de 2 a 4 por ciento de las filas

Los Índices confirmando

La USER_INDEXES datos diccionario vista contiene el nombre del índice y su singularidad.

100

CREATE INDEX emp_last_name_idxON employees(last_name);Index created.

CREATE INDEX indexON table (column[, column]...);

Page 102: Base de Datos03

La vista de USER_IND_COLUMNS contiene el nombre del índice, el nombre de la tabla, y el nombre de la columna.

Los Índices función-basado

o Un índice función-basado es un índice basado en las expresiones. o La expresión del índice se construye de las columnas de la mesa, las constantes,

que SQL funciona, y usuario-definió las funciones.

Quitando un Índice

Quite un índice del diccionario de los datos usando el orden de DROP INDEX

Quite que los UPPER_LAST_NAME_IDX ponen en un índice del diccionario de los datos.

Para dejar caer un índice, usted debe ser el dueño del índice o debe tener un privilegio DROP ANY INDEX .

Los sinónimos

Simplifique el acceso a los objetos creando un sinónimo (otro nombre para un objeto). Con los sinónimos, usted puede: Facilidad que se refiere a una mesa poseída por otro usuario Acorte los nombres del objeto largos

101

CREATE INDEX upper_dept_name_idxON departments(UPPER(department_name));

Index created.

SELECT *FROM departmentsWHERE UPPER(department_name) = 'SALES';

SELECT ic.index_name, ic.column_name,ic.column_position col_pos,ix.uniqueness

FROM user_indexes ix, user_ind_columns icWHERE ic.index_name = ix.index_nameAND ic.table_name = 'EMPLOYEES';

DROP INDEX upper_last_name_idx;Index dropped.

ROP INDEX index;

Page 103: Base de Datos03

Creando y Quitando los Sinónimos

Cree un nombre acortado para la vista de DEPT_SUM_VU.

Deje caer un sinónimo.

En resumen

En esta lección, usted debe de haber aprendido cómo a: o Automáticamente genere que la sucesión numera usando un generador de la

sucesión o Vea la información de la sucesión en la USER_SEQUENCES datos diccionario

mesa o Cree los índices para mejorar la velocidad de recuperación de pregunta o La información de índice de vista en la USER_INDEXES diccionario mesa o Use los sinónimos para mantener los nombres alternativos los objetos

102

CREATE [PUBLIC] SYNONYM synonymFOR object;

DROP SYNONYM d_sum;Synonym dropped.

CREATE SYNONYM d_sumFOR dept_sum_vu;Synonym Created.

Page 104: Base de Datos03

UNIDAD 11

Creando un vista

¿Por qué Use las Vistas?

Para restringir el acceso de los datos Hacer complejo pregunta fácil Para proporcionar la independencia de los datos Para presentar vistas diferentes de los mismos datos

Creando un avista

Usted empotra un subquery dentro del CREE la declaración de VISTA.

Los subquery pueden contener el complejo la sintaxis SELECTA.

103

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)] AS subquery[WITH CHECK OPTION [CONSTRAINT constraint]][WITH READ ONLY [CONSTRAINT constraint]];

Creando un vista

Objetivos

Después de completar esta lección, usted debe ser capaz para hacer a lo siguiente: Describa una vista Cree, altere la definición de, y deje caer una vista Recupere los datos a través de una vista Inserte, ponga al día, y anule la vista de encontrada de datos Cree y use una vista en linea Realice “Cima-N” el análisis

Page 105: Base de Datos03

Crea una vista, EMPVU80, que contiene detalles de empleados en departamento 80.

Describa la estructura de la vista usando el iSQL*Plus DESCRIBA el orden.

Cree una vista usando los seudónimos de la columna en el subquery.

Seleccione las columnas alias de esta vista por los dados los nombres.

Los Datos recuperando de una Vista

Modificando una Vista

104

CREATE VIEW salvu50 AS SELECT employee_id ID_NUMBER, last_name NAME, salary*12 ANN_SALARY FROM employees WHERE department_id = 50;View created.

DESCRIBE empvu80

CREATE VIEW empvu80 AS SELECT employee_id, last_name, salary FROM employees WHERE department_id = 80;View created.

SELECT *FROM salvu50;

Page 106: Base de Datos03

Modifique los EMPVU80 ven usando CREATE OR REPLACE la cláusula de VIEW. Agregue un alias para cada nombre de la columna.

Los seudónimos de la columna en el CREATE la cláusula de VIEW se lista en el mismo orden como las columnas en el subquery.

Creando una Vista Compleja

Cree una vista compleja que contiene las funciones de grupo para desplegar los valores de dos TABLAS.

Quitando una Vista

Usted puede quitar una vista sin los datos perdedores porque una vista es basada en las TABLAS subyacentes en la base de datos.

Resumen

En esta lección, usted debe de haber aprendido que una vista es derivado de los datos en otras mesas o vistas y proporciona las ventajas siguientes:

105

DROP VIEW view;

CREATE VIEW dept_sum_vu (name, minsal, maxsal, avgsal)AS SELECT d.department_name, MIN(e.salary), AX(e.salary),AVG(e.salary) FROM employees e, departments d WHERE e.department_id = d.department_id GROUP BY d.department_name;View created.

CREATE OR REPLACE VIEW empvu80 (id_number, name, sal, department_id)AS SELECT employee_id, first_name || ' ' || last_name, salary, department_id FROM employees WHERE department_id = 80;View created.

DROP VIEW empvu80;View dropped.

Page 107: Base de Datos03

Restringe el acceso de la base de datos Simplifica las preguntas Proporciona la independencia de los datos Proporciona vistas múltiples de los mismos datos Puede dejarse caer sin quitar los datos subyacentes Una vista del inline es un subquery con un alias el nombre. Cima-N análisis que usa subqueries y las preguntas exteriores puede hacerse.

Practica, Aplicación Global

Esta práctica cubre los temas siguientes: Crear una vista simple Crear una vista compleja Crear una vista con constraint ckech Attempting para modificar los datos en la vista Presentar definiciones de vista Eliminar las vistas

UNIDAD 12

106

Usando Operadores De Conjuntos

Objetivos

Después del completar esta lección, usted debería ser capaz de hacer lo siguiente: Describir los operadores de conjuntos Usar un operador para combinarse múltiples queries en un solo queries. Controlar el orden de las filas devueltas.

Page 108: Base de Datos03

Usando Operadores De Conjuntos

Las Tablas Usadas En Esta Lección

Las tablas usadas en esta lección son:EMPLOYEES: Proporciona detalles en cuanto a todos los empleados actuales. JOB_HISTORY: Registra los detalles de la fecha de principio y la fecha de final del antiguo cargo, y el número de identificación de trabajo y el departamento cuando un empleado cambia de cargo.

El Operador Unión

El operador UNION retorna resultados de la unión de ambos queries después de eliminar los duplicados.

Usando El Operador Unión

El siguiente ejemplo muestra el detalle del cargo actual e histórico de los empleados. Muestra el empleado solo una vez.

SELECT employee_id, job_idFROM employeesUNIONSELECT employee_id, job_idFROM job_history;

107

Page 109: Base de Datos03

El operador unión all

EL operador UNION ALL retorna el resultado de ambos queries incluyendo todos los duplicados.

Usando El Operador Union All

El siguiente ejemplo muestra los departamentos actuales e históricos de todos los empleados.

SELECT employee_id, job_id, department_idFROM employeesUNION ALLSELECT employee_id, job_id, department_idFROM job_historyORDER BY employee_id;

108

Page 110: Base de Datos03

El Operador Intersect

Usando El Operador Intersect

Muestre el EMPLOYEE_ID del empleados y el JOB_ID del cargo de los empleados que actualmente e históricamente tienen un cargo

El Operador Minus

SELECT employee_id, job_idFROM employeesINTERSECTSELECT employee_id, job_idFROM job_history;

109

Page 111: Base de Datos03

Muestre el IDs de aquellos empleados que no han cambiado sus cargos ni una sola vez

Guías Para Los Operadores Conjuntos

Las expresiones en las listas SELECT debe hacer juego con el tipo de datos y el número

Paréntesis puede ser usado para cambiar la secuencia de ejecución. La cláusula ORDER BY:

o Puede aparecer sólo al final de la instruccióno Aceptará el nombre de columna, los alias de la primera instrucción

SELECT, o la notación posicional Los registros duplicados son automáticamente eliminados, excepto cuando se usa UNION ALL. Los nombres de Columna del primer queries aparecen en el

resultado. La salida es ordenada por default en forma ascendente, excepto en UNION, ALL

Correspondencia en la instrucción select

Usando al operador de UNIÓN, muestre el departamento ID, la localidad, la fecha para todos los empleados.

SELECT employee_id,job_idFROM employeesMINUSSELECT employee_id,job_idFROM job_history;

SELECT department_id, TO_NUMBER(null) location, hire_dateFROM employeesUNIONSELECT department_id, location_id, TO_DATE(null)FROM departments;

110

Page 112: Base de Datos03

Usando al operador de UNIÓN, muestre al empleado ID, el cargo ID, y el sueldo de todos los empleados.

Controlando El Orden De Las Filas

Produzca una frase en inglés que usa a dos operadores de UNIÓN.

SELECT employee_id, job_id,salaryFROM employeesUNIONSELECT employee_id, job_id,0FROM job_history;

111

Page 113: Base de Datos03

Resumen

En esta lección, usted debería haber aprendido: Use UNIÓN para devolver todas las filas distintas Use UNIÓN ALL para devolver todas las filas, incluyendo duplicados. Use INTERSECT para devolver todas las filas comunes en dos tablas. Use MINUS para devolver todas las filas distintas seleccionadas por el primer

query, pero no por el segundo. Use ORDER BY sólo al final de la declaración.

Ejercicio de Aplicación

Creación de tabla

COLUMN a_dummy NOPRINTSELECT 'sing' AS "My dream", 3 a_dummyFROM dualUNIONSELECT 'I''d like to teach', 1FROM dualUNION SELECT 'the world to', 2FROM dualORDER BY 2;

112

Page 114: Base de Datos03

create table emi_tempo9(codigo number,mombre varchar2(20),edad number,direccion varchar2(30),telefono1 varchar2(10),telefono2 varchar2(10))

select* from emi_tempo9--para crear una tabla nueva se copian todos los campos que tenga la anterior

create table emi_nuevaas select* from emi_tempo9

select * from emi_nueva

create table emi_cliente1

(nombre varchar2(20),fecha date default sysdate,edad number)

select* from emi_cliente1

El usuario scott va a crear una tabla esto es para referenciar a otro usuario Para acceder a la tabla system porque nosotros trabajamos con scout

select* from system.prb10grant select on prb10 to publictablas del diccionario de datos que las administra el dba

select *from user_tablesEn el comand window es un editor ejecutar multiples sentencias.El comand Windows es un interpretador de sentencias sql es decir yo pongo un omando y lo voy a poder interpretar.

SQL> create table emi_tempo14 2 (codigo number, 3 texto varchar2(5));

Table created

SQL>Aquí ya no se va a poder modificar esta interpretando tal y como es al final debe llevar l punto y coma y si me falta una coma no voy a poder regresar.Esa es la diferencia entre el comand y el sql window porque puedo modificar

Sentencia ALTER TABLE

Con la sentencia alter table Add para añadir una columna a la tabla, Ejm

113

Page 115: Base de Datos03

Alter table dept80Modif. (last name varchar(30)Alter table modif. Para modificar una columna

Alter table Set unused(columna); para eliminar la marca no utilizada Drop table para eliminar toda la tabla con sus datos

Para cambiar el nombre de un objetoRename Dep. to detaill_dept; ;

Para liberar espacio de almacenamiento en la tablaTruncate table empeloyees

Create table tempo1(nombre varchar2 (10),edad number,direccion varchar2( 20))

select * from eve_tempo1

alter table eve_tempo1add(telefono number)

para modificar una tablaalter table eve_tempo1modify (telefono varchar2(10))

vamos a eliminar el campo edad y verifico con el mismo select

alter table eve_tempo1drop column edad

select * from eve_tempo1

para cambiar el nombre a una tabla luego ponemos el select pero ya con el select eve_nueva8

rename eve_tempo1 to eve_nueve8select* from eve_nueve8

para añadir comentario

comment on table eve_nueva8is'esta es una tabla temporal'

elimina la tabla fisicamente

drop table eve_nueve8liberar espacio de almacenamiento

114

Page 116: Base de Datos03

truncate table eve_nueve8

Constraint

validaciones o restricciones en una tabla puedo tener el constraint

*not null.- la columna va a ser obligatoria y no acepta valores nulos solo se define a nivel de columna no de tablas*unique.- valores unicos no repetidos sobre una tabla

*primary key.- la va a especificar como clave primaria no va atener valores repetidos ni nulos*foreing key.- son valores que vienen de la clave primaria de otra tabla. DEFINO EN

LA TABLA HIJA *check.- validaciones SOBRE LA COLUMNA DE UNA TABLA

NotaEl contrains va a empezar con la palabra sys_conformat un constrains se puede definir a nivel de columna o a nivel de tablasLos creo con la sentencia alter table puedo modificar un constrains not null.Puedo deshabilítalos usando la sentencia alter table nombre de la table y enable contrains puedo habilitarlo. Ejm

create table departamento1(departamento_id number(3) primary key,nombre varchar(10),localidad varchar(10))

select* from departamento1

Voy a tablas en el lado derecho aparece departamento1 clic derecho view y key

ARCHIVO O SCRIPT SQLCREA TABLA

115

Page 117: Base de Datos03

create table CL_PERSONAS( ID_PERSONA NUMBER not null, APELLIDO1 VARCHAR2(20), APELLIDO2 VARCHAR2(20),

116

CL_CLASES_PERSONAS (7)

CL_PERSONAS (10)

CL_TIPO_IDENTIFICACIÓN (5)

CL_FORMA_PAGO (4)

CL_CONTRATO (12)

CL_SERVICIOS_CONTRATADOS (13)

CL_DETALLES_SERVICIOS (14)

CL_TIPOS_DETALLES_SERVICIOS (11)

CL_SUBPRODUCTO (9)

CL_UNIDAD (8)

CL_LINEA_SUBPRODUCTO (6)

CL_OFICINAS (3)

CL_LOCALIDAD (2)

CL_PAIS (1)

Page 118: Base de Datos03

NOMBRES VARCHAR2(20) not null, NOMBRE_COMPLETO VARCHAR2(60) not null, IDENTIFICACION VARCHAR2(20) not null, TIPO_PERSONA VARCHAR2(1), ESTADO VARCHAR2(1), FECHA_INSCRIPCION DATE, ID_TIPO_IDENTIFICACION VARCHAR2(3) not null, ID_CLASE_PERSONA VARCHAR2(3) not null);

create table CL_TIPO_IDENTIFICACION( ID_TIPO_IDENTIFICACION VARCHAR2(3) not null, DESCRIPCION VARCHAR2(20) not null);

create table CL_CLASES_PERSONAS( ID_CLASE_PERSONA VARCHAR2(3) not null, DESCRIPCION VARCHAR2(60) not null);

create table CL_CONTRATOS( ID_CONTRATO NUMBER(10) not null, FECHA_INICIO DATE not null, FECHA_FIN DATE, ESTADO VARCHAR2(1) not null, ID_PERSONA NUMBER not null, ID_FORMA_PAGO VARCHAR2(3) not null, ID_OFICINA VARCHAR2(3));

ARCHIVO O SCRIPT SQLCREA TABLA

create table CL_SERVICIOS_CONTRATADOS(

117

Page 119: Base de Datos03

ID_SERVICIO VARCHAR2(20) not null, FECHA_INICIO DATE not null, FECHA_FIN DATE, ESTADO VARCHAR2(1) not null, OBSERVACION VARCHAR2(2000), FECHA_SOLICITUD DATE, FECHA_INSTALACION DATE, FECHA_APROBACION DATE, ID_SUBPRODUCTO VARCHAR2(20) not null, ID_CONTRATO NUMBER(10) not null, REFERENCIA_1 VARCHAR2(20), REFERENCIA_2 VARCHAR2(20), REFERENCIA_3 VARCHAR2(20));

create table CL_DETALLES_SERVICIOS( ID_SERVICIO VARCHAR2(20) not null, ID_CONTRATO NUMBER(10) not null, FECHA_DESDE DATE not null, FECHA_HASTA DATE, ESTADO VARCHAR2(1) not null, ID_SUBPRODUCTO VARCHAR2(20) not null, CANTIDAD_CONTRATADA NUMBER, CANTIDAD_MAX NUMBER, ID_TIPO_DETALLE_SERV VARCHAR2(10) not null, OBSERVACION VARCHAR2(240), VALOR VARCHAR2(100), COSTO_SERVICIO NUMBER);

create table CL_TIPOS_DETALLES_SERVICIOS( ID_TIPO_DETALLE_SERV VARCHAR2(10) not null, DESCRIPCION VARCHAR2(60) not null, OBLIGATORIO VARCHAR2(1), ESTADO VARCHAR2(1) not null, VALOR_OMISION VARCHAR2(100), VALOR_MAXIMO VARCHAR2(100), VALOR_MINIMO VARCHAR2(100), ID_UNIDAD VARCHAR2(3) not null);

ARCHIVO O SCRIPT SQLCREA TABLA

create table CL_UNIDAD(

118

Page 120: Base de Datos03

ID_UNIDAD VARCHAR2(3) not null, DESCRIPCION VARCHAR2(60) not null);

create table CL_SUBPRODUCTO( ID_SUBPRODUCTO VARCHAR2(20) not null, DESCRIPCION VARCHAR2(60) not null, ID_LINEA_SUBPRODUCTO VARCHAR2(20) not null);

create table CL_LINEA_SUBPRODUCTO( ID_LINEA_SUBPRODUCTO VARCHAR2(20) not null, DESCRIPCION VARCHAR2(60) not null);

create table CL_OFICINAS( ID_OFICINA VARCHAR2(3) not null, DESCRIPCION VARCHAR2(60) not null, ID_LOCALIDAD VARCHAR2(20) not null);

create table CL_FORMA_PAGO( ID_FORMA_PAGO VARCHAR2(3) not null, DESCRIPCION VARCHAR2(60) not null);

create table CL_LOCALIDAD( ID_LOCALIDAD VARCHAR2(20) not null, DESCRIPCION VARCHAR2(60) not null, ID_PAIS VARCHAR2(20) not null, DESC_REGION VARCHAR2(10) not null);

create table CL_PAIS( ID_PAIS VARCHAR2(20) not null, DESCRIPCION VARCHAR2(60) not null);

ARCHIVO O SCRIPT SQLCREA CLAVE PRIMARIA

alter table CL_PERSONAS add constraint PER_PK primary key (ID_PERSONA);

119

Page 121: Base de Datos03

alter table CL_TIPO_IDENTIFICACION add constraint TIPO_IDENT_PK primary key (ID_TIPO_IDENTIFICACION);

alter table CL_CLASES_PERSONAS add constraint CLAS_PK primary key (ID_CLASE_PERSONA);

alter table CL_CONTRATOS add constraint CONTR_PK primary key (ID_CONTRATO);

alter table CL_SERVICIOS_CONTRATADOS add constraint SER_CON_PK primary key (ID_SERVICIO,FECHA_INICIO,ID_CONTRATO,ID_SUBPRODUCTO);

alter table CL_DETALLES_SERVICIOS add constraint DET_SER_PK primary key (ID_SERVICIO,ID_CONTRATO,ID_SUBPRODUCTO,FECHA_DESDE,ID_TIPO_DETALLE_SERV);

alter table CL_TIPOS_DETALLES_SERVICIOS add constraint T_DET_SE_PK primary key (ID_TIPO_DETALLE_SERV);

alter table CL_UNIDAD add constraint UNI_PK primary key (ID_UNIDAD);

alter table CL_SUBPRODUCTO add constraint SUB_PK primary key (ID_SUBPRODUCTO);

alter table CL_LINEA_SUBPRODUCTO add constraint L_SUB_PK primary key (ID_LINEA_SUBPRODUCTO);

alter table CL_OFICINAS add constraint OFI_PK primary key (ID_OFICINA);

alter table CL_FORMA_PAGO add constraint F_PAGO_PK primary key (ID_FORMA_PAGO);

alter table CL_LOCALIDAD add constraint LOCAL_PK primary key (ID_LOCALIDAD);

alter table CL_PAIS add constraint PAIS_PK primary key (ID_PAIS);

ARCHIVO O SCRIPT SQLCREA CLAVE FORANEA

alter table CL_PERSONAS add constraint PER_CLA_PER_1_FK foreign key (ID_CLASE_PERSONA)

120

Page 122: Base de Datos03

references CL_CLASES_PERSONAS (ID_CLASE_PERSONA);alter table CL_PERSONAS add constraint PER_TIPO_IDE_1_FK foreign key (ID_TIPO_IDENTIFICACION) references CL_TIPO_IDENTIFICACION (ID_TIPO_IDENTIFICACION);alter table CL_PERSONAS add constraint AVCON_31744_TIPO__000 check (TIPO_PERSONA IN ('N', 'J'));

alter table CL_CONTRATOS add constraint CONTR_PER_1_FK foreign key (ID_PERSONA) references CL_PERSONAS (ID_PERSONA);alter table CL_CONTRATOS add constraint CONTR_FP_1_FK foreign key (ID_FORMA_PAGO) references CL_FORMA_PAGO (ID_FORMA_PAGO);alter table CL_CONTRATOS add constraint CON_OFI_FK foreign key (ID_OFICINA) references CL_OFICINAS (ID_OFICINA);alter table CL_CONTRATOS add constraint AVCON_31760_ESTAD_000 check (ESTADO IN ('A', 'I', 'P'));

alter table CL_SERVICIOS_CONTRATADOS add constraint SER_CON_1_CONTR_1_FK foreign key (ID_CONTRATO) references CL_CONTRATOS (ID_CONTRATO);alter table CL_SERVICIOS_CONTRATADOS add constraint SER_CON_SBPROD_FK foreign key (ID_SUBPRODUCTO) references CL_SUBPRODUCTO (ID_SUBPRODUCTO);alter table CL_SERVICIOS_CONTRATADOS add constraint AVCON_31756_ESTAD_000 check (ESTADO IN ('I', 'A', 'S', 'C', 'P'));

alter table CL_DETALLES_SERVICIOS add constraint DET_SER_TIP_DET_FK foreign key (ID_TIPO_DETALLE_SERV) references CL_TIPOS_DETALLES_SERVICIOS (ID_TIPO_DETALLE_SERV);

alter table CL_TIPOS_DETALLES_SERVICIOS add constraint T_DET_SE_UNIDAD_FK foreign key (ID_UNIDAD) references CL_UNIDAD (ID_UNIDAD);

alter table CL_TIPOS_DETALLES_SERVICIOS add constraint AVCON_34408_ESTAD_000 check (ESTADO IN ('A', 'I'));alter table CL_TIPOS_DETALLES_SERVICIOS add constraint AVCON_34408_OBLIG_000 check (OBLIGATORIO IN ('S', 'N'));

alter table CL_SUBPRODUCTO add constraint SUB_L_SUB_FK foreign key (ID_LINEA_SUBPRODUCTO) references CL_LINEA_SUBPRODUCTO (ID_LINEA_SUBPRODUCTO);

121

Page 123: Base de Datos03

alter table CL_OFICINAS add constraint OFI_LOC_FK foreign key (ID_LOCALIDAD) references CL_LOCALIDAD (ID_LOCALIDAD);

alter table CL_LOCALIDAD add constraint LOC_PAIS_FK foreign key (ID_PAIS) references CL_PAIS (ID_PAIS); alter table CL_LOCALIDAD add constraint AVCON_34408_DREG_000 check (DESC_REGION IN ('COSTA','SIERRA','ORIENTE','INSULAR'));

ARCHIVO O SCRIPT SQLELIMINA TABLA

drop table CL_PERSONAS;

drop table CL_TIPO_IDENTIFICACION;

drop table CL_CLASES_PERSONAS;

drop table CL_CONTRATOS;

drop table CL_SERVICIOS_CONTRATADOS;

drop table CL_DETALLES_SERVICIOS;

drop table CL_TIPOS_DETALLES_SERVICIOS;

drop table CL_UNIDAD;

drop table CL_SUBPRODUCTO;

drop table CL_LINEA_SUBPRODUCTO;

drop table CL_OFICINAS;

drop table CL_FORMA_PAGO;

drop table CL_LOCALIDAD;

drop table CL_PAIS;

ARCHIVO O SCRIPT SQLELIMINA CLAVE PRIMARIA

alter table CL_PERSONAS drop constraint PER_PK;

122

Page 124: Base de Datos03

alter table CL_TIPO_IDENTIFICACION drop constraint TIPO_IDENT_PK;

alter table CL_CLASES_PERSONAS drop constraint CLAS_PK;

alter table CL_CONTRATOS drop constraint CONTR_PK;

alter table CL_SERVICIOS_CONTRATADOS drop constraint SER_CON_PK;

alter table CL_DETALLES_SERVICIOS drop constraint DET_SER_PK;

alter table CL_TIPOS_DETALLES_SERVICIOS drop constraint T_DET_SE_PK;

alter table CL_UNIDAD drop constraint UNI_PK;

alter table CL_SUBPRODUCTO drop constraint SUB_PK;

alter table CL_LINEA_SUBPRODUCTO drop constraint L_SUB_PK;

alter table CL_OFICINAS drop constraint OFI_PK;

alter table CL_FORMA_PAGO drop constraint F_PAGO_PK;

alter table CL_LOCALIDAD drop constraint LOCAL_PK;

alter table CL_PAIS drop constraint PAIS_PK;

ARCHIVO O SCRIPT SQLELIMINA CLAVE FORANEA

123

Page 125: Base de Datos03

alter table CL_PERSONAS drop constraint PER_CLA_PER_1_FK;alter table CL_PERSONAS drop constraint PER_TIPO_IDE_1_FK;alter table CL_PERSONAS drop constraint AVCON_31744_TIPO__000;

alter table CL_CONTRATOS drop constraint CONTR_PER_1_FK;alter table CL_CONTRATOS drop constraint CONTR_FP_1_FK;alter table CL_CONTRATOS drop constraint CON_OFI_FK;alter table CL_CONTRATOS drop constraint AVCON_31760_ESTAD_000;

alter table CL_SERVICIOS_CONTRATADOS drop constraint SER_CON_1_CONTR_1_FK;alter table CL_SERVICIOS_CONTRATADOS drop constraint SER_CON_SBPROD_FK;alter table CL_SERVICIOS_CONTRATADOS drop constraint AVCON_31756_ESTAD_000;

alter table CL_DETALLES_SERVICIOS drop constraint DET_SER_TIP_DET_FK;

alter table CL_TIPOS_DETALLES_SERVICIOS drop constraint T_DET_SE_UNIDAD_FK;alter table CL_TIPOS_DETALLES_SERVICIOS drop constraint AVCON_34408_ESTAD_000;alter table CL_TIPOS_DETALLES_SERVICIOS drop constraint AVCON_34408_OBLIG_000;

alter table CL_SUBPRODUCTO drop constraint SUB_L_SUB_FK;

alter table CL_OFICINAS drop constraint OFI_LOC_FK;

alter table CL_LOCALIDAD drop constraint LOC_PAIS_FK;alter table CL_LOCALIDAD drop constraint AVCON_34408_DREG_000;

ARCHIVO O SCRIPT SQLLLAMA A LOS ARCHIVOS Q CREA TABLA

124

Page 126: Base de Datos03

start c:\TEMPORAL\examen_tab.sql;start c:\TEMPORAL\examen_pk.sql;start c:\TEMPORAL\examen_fk.sql;

ARCHIVO O SCRIPT SQLLLAMA A LOS ARCHIVOS Q ELIMINA TABLA

start c:\TEMPORAL\elimina_fk;start c:\TEMPORAL\elimina_pk;start c:\TEMPORAL\elimina_tab;

Para insertar datos por medio de Excel

1.- Hacemos un select * from tcr_job

2.- Luego hacemos select * from tcr_job for update

3.- hacemos clic en edit date (candado)

4.- Lo seleccionamos con un columna mas de la izquierda y pegamos lo que deseamos

5.- Hacemos clic en post cahnge (visto bueno)

6.- Cerramos el edit date (candado)

7.- Damos un comimnt (F10)

9.- Por ultimo hacemos de nuevo un select * from tcr_job

Sino inserta todo

1.- Damos clic en rollback (Shift + 10)

2.- Sale un mensaje “ Rollback current transaccion”, damos en si

3.- Hacemos un seleect * fram tcr_jab

4.- Sale un mensaje “ Post changad records to the database” , damos clic en no

Sentencia DML

125

Page 127: Base de Datos03

Sentencias dml de manipulación de datos se pueden insertar eliminar filas y la sentencia each modificar o eliminar filas de la tabla

insert into departaments(department_id,department_name,manager_id,location)Para modificar una clausula

update employeessety department_id=70where employee_id=113;

Sino pongo el where va a ctualzar todos los registros de la tabla

select * from customer

Mostrar los distintos departamentos que tiene los empleados los distintos departamento que tienen los empleados

select department_id from employee

No muestra departamentos repetidos

select distinct department_id from employee

Mostrar las ordenes de venta que hayan generado mas de 350 totales que sean del año 1991

select *from sales_orderselect *from sales_order awhere a.total>350and a.order_date > to_date('01/01/1991','dd/mm/yyyy')and a.order_date <= to_date('31/12/1991','dd/mm/yyyy')

otra formaselect *from sales_order awhere a.total>350and to_char(a.order_date,'yyyy')='1991'

Insertar nuevo empleado SI HABIA 32 AHORA VAN A SER 33

select * from employeeinsert into employeevalues(8000,'PEREZ','JUAN','X',671,7839,SYSDATE,4000,200,43)

Eliminar un cliente

126

Page 128: Base de Datos03

select * from customer

delete customer where customer_id=201

Cuales son los distintos clientes que no tienen orden

select distinct customer_id from sales_order

Mostrar el nombre de los clientes y el nombre de sus vendedores de aquellos clientes cuyo limite de crédito sea superior a 3000 y que los vendedores sean del departamento de ventas de las regiones de chicago y boston

select * from customer a, employee b, department c, location dwhere a.salesperson_id = b.employee_idand b.department_id = c.department_idand c.location_id = d.location_idand a.credit_limit>3000and c.name = 'SALES'and d.regional_group in ('CHICAGO','BOSTON')

Mostrar los nombres de aquellos productos ordenados en el año 1990

select distinct(x.description)from product x, item y, sales_order zwhere x.product_id = y.product_idand y.order_id = z.order_idand to_char(z.order_date,'yyyy')='1990'

Actualizar (incrementar ) el salario de los empleados en un 10% de aquellos empleados que tengan igual comision que el empleado "LANGE "

update employeeset salary = salary * 1.1where commission =(select commission from employee where last_name = ('LANGE'))

select * from employee where commission =300select commission from employee where last_name in ('LANGE')

Mostar lo siguiente::el empleado xxx tiene como jefe a yyy

select 'el empleado : '|| B.last_name|| ' tiene como jefe a: ' ||A.last_namefrom employee A,employee Bwhere A.employee_id = B.manager_id

Mostrar lo siguiente:el salario del empleado xxx esta en nivel y

127

Page 129: Base de Datos03

select 'el salario del empleado : ' || a.last_name||' esta en nivel : ' ||n.grade_idfrom employee a, salary_grade nwhere a.salary between n.lower_bound and n.upper_bound

Ejercicio de single row-function

mostrar concatenado el nombre del cliente y su estado, la posicion de la letra e en la ciudad del cliente, el limite de credito rellanado con el # a al derecha hasta 20 caracteres, solo de aquellos clientes cuya longitud de su direccion sea menor a 12 y la ciudad tenga la s letras "ur" desde la posicion 2 (dos caracteres)

select concat (t.name, t.state), instr (t.city,'e'), t.city,rpad (t.credit_limit,20,'#')from customer twhere length (t.address)<=13and lower(substr (t.city,2,2))='ur'

funciones de redondeo

select round(1367.35829,3)from dual

select round(1367.35829,0)from dual

select round(1367.35829,-1)from dual

128

Page 130: Base de Datos03

select round(1367.35829,-2)from dual

select round(1367.35829,-3)from dual

funciones de truncamiento

select trunc(1367.35829,4)from dual

select trunc(1367.35829,2)from dual

select trunc(1367.35829,1)from dual

129

Page 131: Base de Datos03

select trunc(1367.35829,0)from dual

select trunc(1367.35829,-1)from dual

select trunc(1367.35829,-2)from dual

select trunc(1367.35829,-3)from dual

funcion fecha

select sysdate,

130

Page 132: Base de Datos03

sysdate-to_date('04-03-2006','dd/mm/yyyy')from dual

select sysdate,add_months(sysdate,5)from dual

select sysdate, trunc (sysdate),add_months(sysdate,5)from dual

select sysdate,sysdate-to_date('01-04-2006','dd/mm/yyyy')from dual

select sysdate,sysdate - to_date('01/03/2006','dd/mm/yyyy')from dual

para tuncar la fecha

select sysdate,

131

Page 133: Base de Datos03

trunc (sysdate) - to_date('01/03/2006','dd/mm/yyyy')from dual

displayar la fecha en otro formato

select to_char('01/01/2008', 'dd/mm/yyyy hh24:mi:ss')from dual

no me salio

tabla empleado

select last_name, salary, nvl (to_char (commission),'null')--para que se visualice los valores nulos con cerofrom employee

select last_name,salary,nvl(to_char(commission),'nulo')from employee

select name, state, decode(state, 'ca', 'california','mn', 'manhatan')from customer

132

Page 134: Base de Datos03

funciones de grupo

mostrar el salario promedio de los empleados cuya comision sea mayor a 500

select avg (salary)from employeewhere commission > 500

mostrar el valor max de las ordenes de ventas generadas

select max(total)from sales_order

suma total de las ordenes de ventas

select sum(total)from sales_order

133

Page 135: Base de Datos03

funciones de grupo

mostrar la cantidad de empleados agrupados por cargo

select a.job_id, b.function, count(a.employee_id)--ver el cargo y cuantos empleados tiene el cargofrom employee a, job bwhere a.job_id = b.job_id--mostrar la funcion del cargogroup by a.job_id, b.function--con la función se puede mostrar el nombre y el job para la descripción de los empleados--having es para restringir los resultados de los grupos y va de la mano con el group by

mostrar agrupado por producto la suma total de sus ordenes de venta y ver el producto que mas se a vendido

select x.product_id,sum (x.total)from item xgroup by x.product_id

--hacemos un where que hace las comparaciones entre la 2 --tablas muestra tambien el nombre de los productos select x.product_id, z.description, sum(x.total)from item x, product zwhere x.product_id = z.product_idgroup by x.product_id, z.description

134

Page 136: Base de Datos03

Mostrar la cantidad de empleados que han ingresado a la empresa a partir del año 1985 agrupado por cargo, solo de aquellos departamentos cuya suma de salarios sean mayor a 3000--tabla empleado estan cargos,salarios,departamentosselect * from employee --luego cuantos empleados hay a partir de año 1985select * from employee fwhere to_char(f.hire_date,'yyyy')>'1985'

--agrupo por cargoselect e.job_id, count(e.employee_id)from employee ewhere to_char(e.hire_date, 'yyyy') > '1985'group by e.job_id

de aquellos departamentos cuya suma de salarios sean mayor a 3000

select e.job_id, count(e.department_id), sum(salary)from employee ewhere to_char(e.hire_date, 'yyyy') > '1985'group by e.job_id, e.department_idhaving sum(salary) > 3000

135

Page 137: Base de Datos03

sub-queries

mostrar el nombre de los clientes y su límite de crédito + 100 de aquellos clientes que tengan la misma ciudad del cliente vollyrite

select * from customer

--vemos la ciudad del cliente vollyrite

select cityfrom customer where name = 'vollyrite' –el dato a visualizar debe escribirse igual

--unimos la ciudad con el crédito

select name, credit_limit +100from customerwhere city = (select city from customer where name = 'vollyrite')

mostrar el nombre de los empleados y su salario solo de aquellos empleados cuyo departamento tenga la misma localidad del departamento de contabilidad (accounting)

select * from department--vemos la localidad del departamento accountingselect location_idfrom department xwhere x.name = 'accounting'

--unimos el departamento para saber el nombre del deprtamento

136

Page 138: Base de Datos03

select r.namefrom department rwhere r.location_id = (select location_id from department x where x.name = 'accounting')

--tengan la misma localidadselect a.last_name, a.salaryfrom employee awhere a.department_id in(select r.department_id from department r where r.location_id=(select location_id from department y where y.name = 'accounting'))

mostrar cuantos productos han sido ordenados, agrupados por años solo de aquellos cuyas cantidades sean mayores que las ordenadas por el producto ace tennis net

select * from item

select to_char (f.order_date, 'yyyy'), count(s.quantity) from item s, sales_order fwhere s.order_id = f.order_id/*and s.quantity > all(select l.quantity from item l, product k where l.product_id = k.product_id and k.description = 'ace tennis net')*/group by to_char (f.order_date, 'yyyy')

137

Page 139: Base de Datos03

select to_char (f.order_date, 'yyyy'), count(s.quantity) from item s, sales_order fwhere s.order_id = f.order_idand s.quantity > all(select l.quantity from item l, product k where l.product_id = k.product_id and k.description = 'ace tennis net')group by to_char (f.order_date, 'yyyy')--esto muestra los valores de 19990 con 9 y 1991 con 18

creating view

create view clientes_tmpas select s.name , s.addressfrom customer swhere s.credit_limit > 1000 select * from clientes_tmp

crear una vista que contenga nombre, la comision y el doble del salario de los empleados que comision mayor a 800

create view empleaas select f.last_name, f.commission, f.salary*2 salaryfrom employee fwhere f.commission > 800

select * from emplea

138

Page 140: Base de Datos03

or replace se puede mosificar una lista ya creada

create or replace view empleaas select f.first_name ||''||f.last_name nombres, f.commission comision, f.salary*12 salariofrom employee fwhere f.commission > 800

select * from emplea

actualiza la vista.- son rpresentaciones logicas que dependen de los datos y las tablas

update emplea set comision = 5

139

Page 141: Base de Datos03

select * from emplea

select * from employee where commission = 5

para eliminar un avista

drop view emplea

select * from emplea´

uso de operadores de conjuntos

create table empleado_tmpas select * from employee where commission <1000

select * from empleado_tmp

create table empleado_tmp2as select * from employee where commission <400

select * from empleado_tmp2

140

Page 142: Base de Datos03

Elimina tabla empleado_tmp2

drop table empleado_tmp2select * from empleado_tmp2

union si elimina los duplicados (11 registros)

select last_name, salary from empleado_tmpunionselect last_name, salary from empleado_tmp2

union all no elina duplicados (20 registros)

select last_name, salary from empleado_tmpunion allselect last_name, salary from empleado_tmp2

intersect los repetidos en tre los dos (9 registros)

select last_name, salary from empleado_tmpintersectselect last_name, salary from empleado_tmp2

141

Page 143: Base de Datos03

minus es todo lo que a pero no b(2 registros)

select last_name, salary from empleado_tmpminusselect last_name, salary from empleado_tmp2

Otros objetos de base de datoscreate table personal( numero number, nombre varchar2 (20))

select * from personal

secuencia que empiece en uno y que incremente de uno en uno

create sequence seq_personalincrement by 1start with 1maxvalue 999nocachenocycle

insert into personal values (seq_personal.nextval, 'maria')

select * from personal

142

Page 144: Base de Datos03

--sigo ingresando mas datos

para ver cuantos registros hay

select seq_personal.currval from dual

alter sequence seq_personalincrement by 20maxvalue 999nocachenocycle

creacion de indices

select * from employee twhere t.employee_id = 1898 --esta consulta va ser rapida

143

Page 145: Base de Datos03

select * from employee rwhere r.last_name = 'king' --esta consulta va ser mas lenta

crea el indice para mejorar el preforma de los query

create index empleado_idxon employee(last_name)

select * from employee rwhere r.last_name = 'king'

los sinonimos.- simplifican el acceso del objeto sin ecesidad de anteponer el nombre del usuario el cual tenga los datos necesarios.

ejemplo del sinonimo.

select * from profesor.prueba_sin

select * from prueba_sin--porq ya esta creado el sinimo

para dar permiso y poder acceder a

grant select on prueba_sin to public--una tabla para todosgrant select on prueba_sin to s6j_ava--una tabla una sola psrsona

para evitar poner el nombre sel propietario de la tabla se debe poner

un sinonimo comocreate public synonym prueba_sinfor profesor.prueba_sin

eliminar el sinonimo ya creadodrop synonym prueba_sin

144

Page 146: Base de Datos03

UNIDAD 13

Código Almacenado

Objetivos

Los principales objetivos de este capítulo son:• Realizar una breve revisión sobre las definiciones de paquetes, funciones y

procedimientos.• Definir cuando son más recomendables el uso de uno u otro.• Establecer la diferencia entre el código almacenado en la base y el código local

para una aplicación.• El uso de instrucciones DDL sobre código almacenado.• Especificar las maneras de ejecutar código almacenado desde SQL Plus.• Establecer restricciones al usar funciones.

Procedimientos y Funciones

• También son conocidos con el nombre de subprogramas.• Ambos pueden devolver más de un valor a través de parámetros con modo

OUT.• Ambos pueden tener secciones declarativa, ejecutable y de tratamiento de

excepciones.• Ambos aceptan valores predeterminados.• Se crean mediante la instrucción CREATE.

Creación de un Procedimiento

• Un procedimiento es un bloque PL/SQL con una sección declarativa, una sección ejecutable y una sección de tratamiento de excepciones.

• Únicamente la sección ejecutable es necesaria.• Se crean mediante la instrucción CREATE OR REPLACE PROCEDURE.• Cuando se crea un procedimiento, primero se compila y luego se almacena en la

B/D en formato compilado.• Un procedimiento puede ejecutarse desde cualquier otro bloque PL/SQL.

Sintaxis de un Procedimiento

CREATE [OR REPLACE] PROCEDURE nombre_procedimiento [(parámetro_1 [IN | OUT | IN OUT] tipo_dato, ………

parámetro_n [IN | OUT | IN OUT] tipo_dato) ] IS | ASCuerpo_procedimiento

145

Page 147: Base de Datos03

Ejemplo de un Procedimiento

CREATE OR REPLACE PROCEDURE inserta_cliente(id_cliente NUMBER, nombre VARCHAR2, telefono

VARCHAR2) ASBEGIN

INSERT INTO CLIENTE VALUES (id_cliente, nombre, telefono);COMMIT;

END inserta_cliente;

Creación de una Función

• Una función es muy parecida a un procedimiento.• Ambos aceptan parámetros que pueden ser de cualquiera de los modos

existentes.• Ambos son bloques PL/SQL, con secciones declarativa, ejecutable y de

tratamiento de excepciones.• Una llamada a una función se produce como parte de una expresión.

Sintaxis de una Función

CREATE [OR REPLACE] FUNCTION nombre_función [(parámetro_1 [IN | OUT | IN OUT] tipo_dato, ………

parámetro_n [IN | OUT | IN OUT] tipo_dato) ] RETURN tipo_dato_retorno IS | ASCuerpo_función

Ejemplo de una Función

CREATE OR REPLACE FUNCTION get_telefono(id_cliente NUMBER) RETURN VARCHAR2 IS

telef VARCHAR2(9);

BEGIN

SELECT num_telefonoINTO telefFROM CLIENTEWHERE codigo_cliente = id_cliente;

RETURN (telef);

END get_telefono;

146

Page 148: Base de Datos03

Eliminación de Procedimientos y Funciones

• Los procedimientos y funciones pueden eliminarse mediante la instrucción DROP.

• La sintaxis para eliminar un procedimiento es:DROP PROCEDURE nombre_procedimiento;

• Y la sintaxis para eliminar una función es: DROP FUNCTION nombre_función;

Creación de un Paquete

• Un paquete es una estructura PL/SQL que permite almacenar juntos varios objetos relacionados.

• Un paquete tiene 2 partes separadas: la especificación y el cuerpo.• Ambas partes se almacenan de manera independiente en la Base de Datos.• Cualquier código que pueda incluirse en la parte declarativa de un bloque puede

incluirse en un paquete, incluidos procedimientos, funciones, cursores, tipos y variables.

Sintaxis de un Paquete

CREATE [OR REPLACE] PACKAGE nombre_paquete IS | AS declaración_variables | excepciones | cursores especificación_funciones | procedimientos …………………END [nombre_paquete];

CREATE [OR REPLACE] PACKAGE BODY nombre_paquete IS | AS definición_funciones | procedimientos | bloque_PL/SQLEND [nombre_paquete];

Ejemplo de un Paquete

CREATE OR REPLACE PACKAGE clientes IStelef VARCHAR2(9);

PROCEDURE inserta_cliente (id_cliente NUMBER, nombre VARCHAR2, telefono VARCHAR2) ;FUNCTION get_telefono (id_cliente NUMBER) RETURN VARCHAR2;

END clientes;

CREATE OR REPLACE PACKAGE BODY clientes IS PROCEDURE inserta_cliente (id_cliente NUMBER,nombre VARCHAR2, telefono VARCHAR2) AS

147

Page 149: Base de Datos03

BEGIN.......

END inserta_cliente;

FUNCTION get_telefono (id_cliente NUMBER)RETURNVARCHAR2 AS

BEGIN.......

END get_telefono;END clientes;

Subprogramas almacenados frente a subprogramas locales

Subprogramas almacenados Subprogramas localesEl subprograma almacenado se guarda en

código compilado en la Base de Datos. Cuando se produce una llamada al procedimiento, éste

no tiene que compilarse de nuevo.

El subprograma local se compila como parte del bloque que lo contiene. Si el

bloque se ejecuta varias veces, el subprograma tiene que compilarse

cada vez.Los subprogramas almacenados pueden

llamarse desde cualquier bloque ejecutado por un usuario que tenga privilegios de ejecución

(EXECUTE) sobre el subprograma.

Un subprograma local puede llamarse únicamente desde el bloque que lo

contiene.

Manteniendo el código del subprograma separado del bloque que realiza la llamada, el bloque que realiza la llamada es más corto y

fácil de entender.

El subprograma y el bloque que produce la llamada no están separados,

lo que puede inducir a la confusión.

Los subprogramas almacenados independiente no pueden sobrecargarse, pero los

empaquetados sí, dentro del mismo paquete.

Los subprogramas locales pueden sobrecargarse dentro del mismo

bloque.

DDL sobre código almacenado

• Al contrario de las instrucciones DML, las instrucciones DDL no están permitidas directamente en una aplicación PL/SQL.

• SQL dinámico permite la ejecución de instrucciones DDL desde PL/SQL.• Por ejemplo, se podría utilizar SQL dinámico para ejecutar las instrucciones

CREATE TABLE, ALTER TABLE o DROP TABLE desde una aplicación PL/SQL.

• Con SQL dinámico, la instrucción SQL se crea dinámicamente en tiempo de ejecución, luego se analiza y se ejecuta.

Ejecución de instrucciones DDL mediante SQL Dinámico

Existen 2 métodos distintos para ejecutar SQL dinámico utilizando PL/SQL.

• Mediante el paquete DBMS_SQL.

• Mediante SQL dinámico nativo.Uso del paquete DBMS_SQL para ejecutar instrucciones DDL

148

Page 150: Base de Datos03

La ejecución de instrucciones DDL mediante el uso del paquete DBMS_SQL involucra los siguientes pasos:

1. Abrir el cursor (OPEN_CURSOR).2. Colocar la instrucción SQL o el bloque PL/SQL en una cadena.3. Analizar la cadena utilizando DBMS_SQL.PARSE.4. Ejecutar la instrucción con DBMS_SQL.EXECUTE.5. Cerrar el cursor (CLOSE_CURSOR).

Ejecutando instrucciones DDL mediante el paquete DBMS_SQL

CREATE OR REPLACE PROCEDURE elimina_tabla(tabla VARCHAR2) AS

v_cursor NUMBER;v_dropString VARCHAR2(100);

BEGIN

v_cursor := DBMS_SQL.OPEN_CURSOR; v_dropString := 'DROP TABLE ' || tabla ; DBMS_SQL.PARSE

(v_cursor,v_dropString,DBMS_SQL.NATIVE); DBMS_SQL.CLOSE_CURSOR (v_cursor);

END elimina_tabla;

Uso de SQL dinámico nativo para ejecutar instrucciones DDL

• Como ocurre con DBMS_SQL, la instrucción SQL o el bloque PL/SQL que se ejecute con SQL dinámico nativo, debe colocarse primero en una cadena.

• El SQL dinámico nativo gestiona el cursor automáticamente utilizando la instrucción EXECUTE IMMEDIATE.

• Como los cursores se gestionan automáticamente, no es necesario abrirlos y cerrarlos explícitamente.

Ejecutando instrucciones DDL mediante el SQL dinámico nativo

CREATE OR REPLACE PROCEDURE elimina_tabla(tabla VARCHAR2) AS

v_dropString VARCHAR2(100);

BEGIN v_dropString := 'DROP TABLE ' || tabla ; EXECUTE IMMEDIATE v_dropString;

END elimina_tabla;Ejecución de código almacenado desde SQL Plus

149

Page 151: Base de Datos03

• SQL Plus proporciona una sintaxis abreviada para ejecutar un subprograma almacenado: la orden EXECUTE.

• EXECUTE recibe los argumentos, coloca BEGIN antes de los mismos y colocar END; al final.

• También se puede llamar a un subprograma o paquete desde un bloque PL/SQL, osea con un BEGIN y un END al final.

• Tras esta operación, el bloque resultante se envía a la Base de datos.

Ejecutando código almacenado desde SQL Plus

SQL> EXECUTE inserta_cliente (110, ‘Mario Cruz’, ‘094225864’);Procedimiento PL/SQL terminado correctamente.

O también:

SQL> BEGIN 2 inserta_cliente (110,’Mario Cruz’,’094225864’); 3 END; 4 /Procedimiento PL/SQL terminado correctamente.

Restricciones de accesos a funciones desde una expresión SQL

Para acceder mediante una expresión SQL a una función definida por el usuario debe: • Ser una función almacenada.• El envío de parámetros a la función debe ser por el método posicional.• Aceptar como parámetros solo tipos de datos SQL válidos, no tipos PL/SQL.• Los parámetros deben ser solamente de tipo IN.• Retornar tipos de datos SQL válidos, no tipos PL/SQL.• Si se está ejecutando una instrucción DML sobre una tabla, la función no debe

contener instrucciones DML o realizar consultas sobre la misma tabla.

150

Page 152: Base de Datos03

Ejecicio de aplicacion

pl/sql (procedimiento)

creo una tabla aparte para crear un procedimiento

create table pro_gre(codigo number,nombre varchar2(30),apellido varchar2(30),telefono varchar2(10))

select * from pro_gre

A partir de aqui creo una tabla aparte para crear un procedimiento en otro sql window

create or replace procedure inserta_pro(ar_codigo number, ar_nombre varchar2, ar_apellido varchar2, ar_telefono varchar2) as begin insert into pro_gre values (ar_codigo, ar_nombre, ar_apellido, ar_telefono);

commit;

end;

151

Nota.- En la opción procedimiento se verifica si esta bien el procedimiento, si tiene un visto es por que tiene errores, los procedimientos se lo ejecuta en una ventana sql Windows nueva y se lo ejecuta con F8

Page 153: Base de Datos03

create or replace procedure elimina_pro(ar_nombre varchar2) as

begin

delete from pro_grewhere nombre = ar_nombre;

commit;

end;

--para insertar

sql> execute inserta_pro(1, 'ana', 'lopez', '2343454');

pl/sql procedure successfully completed

sql> select * from pro_gre;

codigo nombre apellido telefono ---------- ------------------------------ ------------------------------ ---------- 1 ana lopez 2343454

sql> execute inserta_pro(2, 'jorge', 'alban', '2547896');

pl/sql procedure successfully completed

sql> select * from pro_gre;

codigo nombre apellido telefono ---------- ------------------------------ ------------------------------ ---------- 1 ana lopez 2343454

152

Nota.- cada procedimiento se lo realiza por separado

Page 154: Base de Datos03

2 jorge alban 2547896 --para eliminar

sql> execute elimina_pro('ana');pl/sql procedure successfully completed

sql> select * from pro_gre;

codigo nombre apellido telefono ---------- ------------------------------ ------------------------------ ---------- 2 jorge alban 2547896

ejercicio con procedimiento

1.- crear una tabla de automoviles (max 5 campos), definir su pk. y crear una secuencia que incremente de 1 en 1.(a ser utilizada por la pk)

create table autos_gre1( codigo number, marcar varchar2(30), modelo varchar2(30), valor number, estado varchar2(1))select * from autos_gre1

--crea secuenciacreate sequence seq_autincrement by 1start with 1maxvalue 9999nocyclenocache

2.- crear un procedimiento que inserte un nuevo automovil los datos del mismo los recibe como parametros.

create or replace procedure inserta_aut( p_marca varchar2, p_modelo varchar2, p_valor number, p_estado varchar2)asbegininsert into autos_gre1values (seq_aut.nextval, p_marca, p_modelo, p_valor, p_estado);commit;end;

153

Page 155: Base de Datos03

3.- crear un procedimiento que elimine un automovil, el codigo a eliminar lo recibe como parametro

create procedure elimina_aut( p_codigo number)as

begin

delete from autos_gre1where codigo = p_codigo;

commit;

end;

154

Page 156: Base de Datos03

sql> execute inserta_aut(1, 'toyota', '13000', 'a');

pl/sql procedure successfully completed

sql> select * from autos_gre1;

codigo marcar modelo valor estado---------- -------------------------- ---------- ------ 3 1 toyota 13000 a

sql> execute inserta_aut(1, 'nissan', '13000', 'a');

pl/sql procedure successfully completed

sql> select * from autos_gre1;

codigo marcar modelo valor estado---------- --------------------------- ---------- ------ 3 1 toyota 13000 a 4 1 nissan 13000 a

4.- crear un procedimiento que reciba como parametros la marca y el modelo de un automovil y devuelva su valor

create or replace procedure devuelve_valor(p_marca in varchar2, p_modelo in varchar2, p_valor out number)as

begin

select valor into p_valorfrom autos_gre1where marcar = p_marcaand modelo = p_modelo;

end;

create procedure devuelve_valor(p_marca in varchar2, p_modelo in varchar2, p_valor out number)as

155

Page 157: Base de Datos03

begin--consulta si existe el automovil o no--2da. formaselect valor into p_valorfrom autos_gre1where marcar = p_marcarand modelo = p_modeloend;--1era. formaselect valorfrom autos_gre1where marcar = 'toyota'and modelo = '1500'

pl/sql (funciones)

crear una función que reciba como parámetro el nombre de un cliente y retorne el total de ordenes de venta en un nuevo comand creo la función y ejecuto solo con f8 esta es la funcióndeclaro variables en la funcion primerocreate or replace function devuelve_total(p_nombre varchar2)return number as v_valor number;

beginutiliza la tabla customer donde estan los nombre de los clientes, a prueba el valor de un clienteselect sum(r.total) into v_valorfrom sales_order r, customer twhere r.customer_id=t.customer_idand t.name= p_nombre;return (v_valor);end;

156

Page 158: Base de Datos03

esto es lo que se hace para ver las ordenes en la función veo las ordenes del cliente 102

select *from sales_order rwhere r.customer_id=102

quiero saber la suma total aqui ya tengo un cliente determinado

select sum(r.total)from sales_order rwhere r.customer_id=102

en la base de datos podemos tener almacenados paquetes y funciones diapositivas 1 codigo almacenado en la carpeta pl/sql creo los paquetes

pasos para verificar si esta bien la funcion.

1.- vamos a la opcion funcion, y damos clic derecho2.- escogemos la opcion test3.- en la pantalla que salio en la opcion nombre ponemos un dato de la base en este caso (vollyrite).4.- luego lo ejecutamos

157

Page 159: Base de Datos03

pl/sql (paquetes)

crear un paquete que tenga: - un procedimiento que reciba como parámetro el nombre de un empleado y devuelva su salario - una función que reciba como parámetro un año y un producto y retorne las cantidades totales vendidas de dicho producto

cabecera del paquete

create or replace package ordenes_gre is

procedure devuelve_salario (p_nombre varchar2,p_salario out number) ;

function devuelve_cantidad (p_ano varchar2, p_producto varchar2)return varchar2;end ordenes_gre;

nota.- primero compilamos el package y lo revisamos en la opción package, si tiene un visto tiene errores, debemos escoger editar o edit space & body

158

Page 160: Base de Datos03

cuerpo del paquete

create or replace package body ordenes_gre is procedure devuelve_salario (p_nombre varchar2,p_salario out number) as begin select salary into p_salario from employee where last_name = p_nombre;

end devuelve_salario;

function devuelve_cantidad(p_ano varchar2, p_producto varchar2)return varchar2 as v_valor number; begin

select count (a.quantity)into v_valor from item a, product b, sales_order c where a.product_id = b.product_id and b.description = p_producto and to_char(c.order_date, 'yyyy')= p_ano; return (v_valor); end devuelve_cantidad; end ordenes_gre ;

nota.- después compilamos el package bodies y lo revisamos en la opción package bodies, si tiene un visto tiene errores, debemos escoger editar o edit space & body

159

Page 161: Base de Datos03

pl/sql (paquetes)

crear un paquete que tenga - un procedimiento que calcule la suma total de ordenes de un determinado cliente - una funcion que devuelva la cantidad de empleados de una determinada localidad

select * from sales_order

--luegoselect *from sales_order a, customer bwhere a.customer_id=b.customer_idand b.name='shape up'

--luego para que realize la suma total de ordenesselect sum (a.total)from sales_order a, customer bwhere a.customer_id=b.customer_idand b.name='shape up'

--realizo el query de la funcion que es unir las tablasselect* from employee x, department y,location zwhere x.department_id=y.department_idand y.location_id=z.location_id

--la funcion pide de una determinada localidadselect count(x.employee_id)

160

Page 162: Base de Datos03

from employee x, department y,location zwhere x.department_id=y.department_idand y.location_id=z.location_idand z.regional_group='dallas'

- luego construimos los paquetes en otra ventama. creacion del paquete las 4 primera lineas es la cabecera solo es pecificacion del paquete

create or replace package ventas isprocedure suma(p_nombre varchar2,p_total out number);function cantidad(p_localidad varchar2)return number;end ventas;

creamos el cuerpo del paquete copio el select anterio pero con modificaciones

create or replace package body ventas isprocedure suma(p_nombre varchar2,p_total out number) asbegin select sum (a.total)into p_total from sales_order a, customer b where a.customer_id=b.customer_id and b.name=p_nombre;end suma;

function cantidad(p_localidad varchar2)return number asv_cant number; --variables que se definen

begin select count(x.employee_id) into v_cant from employee x, department y,location z

161

Page 163: Base de Datos03

where x.department_id=y.department_id and y.location_id=z.location_id and z.regional_group= p_localidad; return(v_cant); --variable que va a retornar la cantiada de emplaeado de dicha localidad end cantidad;

end ventas;

pl/sql (anonimos)

- programas anonimos (estructura) utiliza un paquete ya predefinido - dbms_output.put_line que sirve para displayar en pantalla es decir el nombre de la variable

declare

v_var varchar2(30):=' hola ';v_localidad varchar2(30) :='dallas';v_cantidad number;

begin

dbms_output.put_line (v_var || ' este es un programa anonimo ');v_cantidad:=ventas.cantidad('v_localidad');dbms_output.put_line('la localidad de :'||v_localidad||' tiene: '||v_cantidad||' de empleados ');

end;

162

Page 164: Base de Datos03

nota.- primero lo ejecutamos y luego nos dirigimos a la pestaña output para ver la ejecución, los anónimos no se graban en memoria

pl/sql (anonimos)

crear un programa anonimo que utilice el paquete de ventas la función cantidad.si la cantidad de empleado de esa localidades mayor a 12 se visualizara el mensaje"el dlocalidad: xxx tienen muchos empleados"caso contrario se visualizara: "el localidad: xxx tienen pocos empleados"

declarev_cantidad number;v_localidad varchar2(30) := 'dallas';

begin

v_cantidad:=ventas.cantidad(v_localidad);

if v_cantidad > 12 thendbms_output.put_line('la localidad: ' || v_localidad || 'tine muchos empleados' );elsedbms_output.put_line('la localidad: ' || v_localidad || 'tine pocos empleados' );end if;

end;

163

Page 165: Base de Datos03

pl/sql (anonimos)Crear un programa anónimo,

que invoque a un procedimiento que reciba como parámetro un numero que indicara la cantidad de veces que inserto el registro en la tabla temporal (código, descripción) en el código se insertara el valor de un contador que se incrementara de a 1 y en la descripción lo sgt;procedimiento exitosola inserción será repetida a través de un lazo cuya condición de salida será que el contador sea mayor que el numero, ingresado como parámetro. finalmente el procedimiento tendrá un parámetro de salida que se seteara en 1 cuando haya finalizado el lazo e imprimirá en el programa anónimo:fin del programa

create table temporal5( codigo number, descripcion varchar2(25))create or replace procedure inserta5( p_numero number, p_salida out number)asv_contador number :=0;begin loop

164

Page 166: Base de Datos03

insert into temporal5 values (v_contador, 'procedimiento'); v_contador:=v_contador+1; if(v_contador > p_numero) then p_salida:=1; exit; end if; end loop; commit;end;

declarev_numero number := 5;v_salida number := 0;

begin--asi se llama un procedimiento y a la funcion debo asignarle una variable.inserta5 (v_numero, v_salida);

if v_salida = 1 thendbms_output.put_line('fin del programa');end if;end;

165

Page 167: Base de Datos03

Utilizando otros lazos como deber sea este como el: for, while

usando el while

create or replace procedure inserta7( p_numero number, p_salida out number)asv_contador number :=0;begin

while v_contador <= p_numero loopinsert into temporal5values (v_contador, 'procedimiento');v_contador := v_contador + 1;end loop;p_salida:=1;commit;

end;

aplico el for

create or replace procedure inserta8( p_numero number,

166

Page 168: Base de Datos03

p_salida out number)asv_contador number :=0;begin

for v_contador in 0..50 loopinsert into temporal5values (v_contador, 'procedimiento');

if(v_contador > p_numero) then p_salida:=1; exit; end if;end loop;commit;end;

Cursores

¿Qué es un cursor?

Para poder procesar una orden SQL oracle le asigna una área de memoria que recibe el nombre de área de contexto. Esta área contiene informaciones necesarias para completar el proceso, incluyendo el número de filas procesadas por la orden, el conjunto activo de filas,...

Un cursor es un puntero en el área de contexto que permite controlar lo que sucede en ese área, .... Veamos un ejemplo que lo que va a hacer es una extracción mediante cursor en que una consulta devuelve múltiples filas de datos.

DECLARE/* Output variables to hold the results of the query */v_employeeID employee.employee_id%TYPE;v_FirstName employee.first_name%TYPE;v_LastName employee.last_name%TYPE;

/* Bind variable used in the query */v_Salary employee.salary%TYPE := 3000;

/* Cursor declaration */CURSOR c_employee ISSELECT employee_id, first_name, last_nameFROM employee

167

Page 169: Base de Datos03

WHERE salary = v_Salary;BEGIN /* Identify the rows in the active set, and prepare for furtherprocessing of the data */OPEN c_employee;LOOP/* Retrieve each row of the active set into PL/SQL variables */FETCH c_employee INTO v_employeeID, v_FirstName, v_LastName;

/* If there are no more rows to fetch, exit the loop */EXIT WHEN c_employee%NOTFOUND;END LOOP;

/* Free resources used by the query */CLOSE c_employee;END;

Los cursores pueden ser de dos tipos:

* Implícitos: no los declaramos nosotros, se declaran automáticamente cuando ocurre una transacción.

* Explícitos: como el ejemplo anterior, lo declaramos nosotros y podemos decir que su proceso consta de cuatro pasos:

1. Declaración del cursor:

CURSOR c_employee ISSELECT employee_id, first_name, last_nameFROM employeeWHERE salary = v_Salary;

2. Apertura del cursor para una consulta:

OPEN c_employee;LOOP

3. Extracción de los datos de un cursor:

FETCH c_employee INTO v_employeeID, v_FirstName, v_LastName;

4. Cierre del cursor:

168

Page 170: Base de Datos03

CLOSE c_employee;

Atributos De Los Cursores

Existen cuatro atributos de los cursores que podemos aplicar, se añaden dentro de un bloque PL/SQL al nombre del cursor, y estos atributos son:

%FOUND: es un atributo booleano, de forma que si la última orden FETCH devuelve una fila nos devuelve el valor TRUE, si no nos devuelve FALSE. %NOTFOUND: se comporta de forma opuesta a %FOUND. %ISOPEN: es también un atributo booleano que se utiliza para asociar si el cursor asociado está abierto o no. %ROWCOUNT: este atributo numérico devuelve el número de filas extraídas por el cursor hasta ese momento.

Cursores

Crear un programa anonimo que consulte el nombre de los clientes, el total generado de ordenes de ventas del año en que se genero solo de aquellos cuyo limite de credito sea > a 5000 y tengan ordenes > a 50

create table noventa_gre( nombre varchar2(45), total number)

create table noventayuno_gre( nombre varchar2(45), total number)

--saca los datos de 9 registros

select b.name, a.total, to_char(a.order_date, 'yyyy')from sales_order a, customer bwhere a.customer_id = b.customer_id and b.credit_limit > 5000and a.total > 50

169

Page 171: Base de Datos03

luego evaluar el año de la orden de cada cliente y registrarla insertarla en tablas anuales en una tabla los del año 90 y en otra los del año 91

-programadeclare

v_credi_limit number := 5000; v_total number := 50;--v_totales sales_order.total&type;

v_nombre customer.name%type;v_totales sales_order.total%type;v_ano varchar2(4);

cursor c_totales isselect b.name, a.total, to_char(a.order_date, 'yyyy')from sales_order a, customer bwhere a.customer_id = b.customer_id and b.credit_limit > 5000and a.total > 50;

begin

--4 pasos del cursoropen c_totales;loop--recuperamos el primer registrofetch c_totales into v_nombre, v_totales, v_ano;

if v_ano = '1990'theninsert into noventa_gre values(v_nombre, v_totales)

else if v_ano = ' 1991 ' theninsert into noventayuno_gre values(v_nombre, v_totales)end if;

end loop;commit;close c_totales;

end;

declare

v_employeeID employee.employee_id%TYPE;v_FirstName employee.first_name%TYPE;

170

Page 172: Base de Datos03

v_LastName employee.last_name%TYPE;

v_Salary employee.salary%TYPE := 30;

CURSOR c_employee ISSELECT employee_id, first_name, last_nameFROM employeeWHERE salary = v_Salary;BEGIN

OPEN c_employee;LOOP

FETCH c_employee INTO v_employeeID, v_FirstName, v_LastName;

EXIT WHEN c_employee%NOTFOUND;dbms_output.put_line(v_Firstname ||' '|| v_salary || ' Tiene un buen salario ' || c_employee%rowcount);END LOOP;--si el dbms va antes del exit se repite el registroCLOSE c_employee;END;

171