191
Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

Embed Size (px)

Citation preview

Page 1: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

IntroducciónIntroducción

Page 2: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-2 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

Al completar esta lección, debería ser capaz Al completar esta lección, debería ser capaz de hacer lo siguiente:de hacer lo siguiente:

• Discutir los aspectos teóricos y físicos de las bases de datos relacionales.

• Describir la implementación de Oracle como RDBMS y ORDBMS.

• Describir el papel de SQL en Oracle.

Al completar esta lección, debería ser capaz Al completar esta lección, debería ser capaz de hacer lo siguiente:de hacer lo siguiente:

• Discutir los aspectos teóricos y físicos de las bases de datos relacionales.

• Describir la implementación de Oracle como RDBMS y ORDBMS.

• Describir el papel de SQL en Oracle.

Page 3: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-3 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

• Describir el propósito de PL/SQL.

• Describir el usuario de PL/SQL para el desarrollador, así como para el administrador de la base de datos.

• Explicar los beneficios de PL/SQL.

• Describir el propósito de PL/SQL.

• Describir el usuario de PL/SQL para el desarrollador, así como para el administrador de la base de datos.

• Explicar los beneficios de PL/SQL.

Page 4: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-4 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Almacenamiento de Datos Almacenamiento de Datos

Hoja de Hoja de CálculoCálculo

ArchivoArchivo

Base de Base de DatosDatos

SALGRADESALGRADE GRADE LOSAL HISAL

--------- --------- ---------

1 700 1200

2 1201 1400

3 1401 2000

4 2001 3000

5 3001 9999

SALGRADESALGRADE GRADE LOSAL HISAL

--------- --------- ---------

1 700 1200

2 1201 1400

3 1401 2000

4 2001 3000

5 3001 9999

DEPTDEPT DEPTNO DNAME LOC

--------- -------------- ----------

10 ACCOUNTING NEW

YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

DEPTDEPT DEPTNO DNAME LOC

--------- -------------- ----------

10 ACCOUNTING NEW

YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

Page 5: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-5 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Concepto de B.D. RelacionalConcepto de B.D. Relacional

• El Dr. E. F. Codd propuso el modelo relacional El Dr. E. F. Codd propuso el modelo relacional para sistemas de bases de datos en 1970.para sistemas de bases de datos en 1970.

• Constituye la base para el sistema manejador Constituye la base para el sistema manejador de bases de datos relacionales (RDBMS).de bases de datos relacionales (RDBMS).

• El modelo relacional contiene los siguientes El modelo relacional contiene los siguientes componentes:componentes:

– Colección de objetos o relacionesColección de objetos o relaciones

– Conjunto de operaciones para actuar sobre Conjunto de operaciones para actuar sobre las relacioneslas relaciones

– Integridad de datos por precisión y Integridad de datos por precisión y consistenciaconsistencia

Page 6: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-6 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Definición de B.D. RelacionalDefinición de B.D. Relacional

Una Base de Datos Relacional es un Una Base de Datos Relacional es un conjunto de relaciones o tablas bi-conjunto de relaciones o tablas bi-dimensionales.dimensionales.

Una Base de Datos Relacional es un Una Base de Datos Relacional es un conjunto de relaciones o tablas bi-conjunto de relaciones o tablas bi-dimensionales.dimensionales.

DatabaseDatabase

DEPTNO DNAME LOC

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

DEPTNO DNAME LOC

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

Nombre Tabla : Nombre Tabla : DEPTDEPT

EMPNO ENAME JOB DEPTNO

7839 KING PRESIDENT 10

7698 BLAKE MANAGER 30

7782 CLARK MANAGER 10

7566 JONES MANAGER 20

EMPNO ENAME JOB DEPTNO

7839 KING PRESIDENT 10

7698 BLAKE MANAGER 30

7782 CLARK MANAGER 10

7566 JONES MANAGER 20

Nombre Tabla: Nombre Tabla: EMPEMP

Page 7: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-7 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Modelos de DatosModelos de Datos

Modelo del Modelo del SistemaSistema

que el cliente que el cliente tiene en mentetiene en mente

Modelo de Modelo de EntidadesEntidades

a partir del modelo a partir del modelo del clientedel cliente Paso a las Tablas,Paso a las Tablas,

partiendo del modelo partiendo del modelo de entidadesde entidades

Tablas en DiscoTablas en Disco

ServidorServidor

Page 8: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-8 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Modelo Entidad-RelaciónModelo Entidad-Relación• Crear un diagrama entidad-relación a partir de Crear un diagrama entidad-relación a partir de

especificaciones de la empresa. especificaciones de la empresa.

• EscenarioEscenario

". . . A un vendedor se le asigna uno o ". . . A un vendedor se le asigna uno o más más clientes . . ."clientes . . ."

– ". . . A algunos vendedores aún no se le ". . . A algunos vendedores aún no se le han asignado clientes . . ."han asignado clientes . . ."

CUSTOMER#* id* nameo phone

EMPLOYEE#* id* last nameo first name

asignado a

es representante de ventas para

Page 9: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-9 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Convenciones para el Modelo ERConvenciones para el Modelo ER

es representante de ventas para

CUSTOMER#* id* nameo phone

EMPLOYEE#* id* last nameo first name

asignado a

EntidadCaja con bordes redondeados,con nombre único, singular,en mayúsculasSinónimos entre paréntesis

AtributoNombre singular en minúsculasSi es obligatorio se marca con “*” Si es opcional se marca con "o"

Identificador Unico (UID)Primario marcado con "(*)" Secundario marcado con "(#)"

Page 10: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-10 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

EMPLOYEEEMPLOYEE#* #* numbernumber** namenameoo job titlejob title

EMPLOYEEEMPLOYEE#* #* numbernumber** namenameoo job titlejob title

DEPARTMENTDEPARTMENT#* #* numbernumber** namenameoo locationlocation

DEPARTMENTDEPARTMENT#* #* numbernumber** namenameoo locationlocation

Convenciones para el Modelo ERConvenciones para el Modelo ER

EntidadCaja con bordes redondeados,con nombre único, singular,en mayúsculasSinónimos entre paréntesis

AtributoNombre singular en minúsculasSi es obligatorio se marca con “*” Si es opcional se marca con "o"

Identificador Unico (UID)Primario marcado con "(*)" Secundario marcado con "(#)"

Page 11: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-11 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Terminología de una B.D. RelacionalTerminología de una B.D. Relacional

1

2 3 4

5

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

------------- ------------ --------------------- -------- ---------------- ----------- -------------- -----------

7839 KING PRESIDENT 17-NOV-81 5000 10

7698 BLAKE MANAGER 7839 01-MAY-81 2850 30

7782 CLARK MANAGER 7839 09-JUN-81 2450 10

7566 JONES MANAGER 7839 02-APR-81 2975 20

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30

7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30

7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

7900 JAMES CLERK 7698 03-DEC-81 950 30

7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30

7902 FORD ANALYST 7566 03-DEC-81 3000 20

7369 SMITH CLERK 7902 17-DEC-80 800 20

7788 SCOTT ANALYST 7566 09-DEC-82 3000 20

7876 ADAMS CLERK 7788 12-JAN-83 1100 20

7934 MILLER CLERK 7782 23-JAN-82 1300 10

6

Page 12: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-12 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Relaciones entre TablasRelaciones entre Tablas

Nombre Tabla: Nombre Tabla: EMPEMP Nombre Tabla : Nombre Tabla : DEPTDEPT

Primary KeyPrimary Key Primary keyPrimary keyForeign keyForeign key

EMPNO ENAME JOB DEPTNO

7839 KING PRESIDENT 10

7698 BLAKE MANAGER 30

7782 CLARK MANAGER 10

7566 JONES MANAGER 20

DEPTNO DNAME LOC

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

• Cada fila de datos en una tabla esta identificada Cada fila de datos en una tabla esta identificada unívocamente por una clave primaria (Primary unívocamente por una clave primaria (Primary Key: PK).Key: PK).

• Se puede relacionar información de múltiples Se puede relacionar información de múltiples tablas lógicamente usando claves foráneas tablas lógicamente usando claves foráneas (Foreign Key: FK).(Foreign Key: FK).

Page 13: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-13 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Propiedades de las B.D. Relacionales

Propiedades de las B.D. Relacionales

Una Base de Datos Relacional:Una Base de Datos Relacional:Una Base de Datos Relacional:Una Base de Datos Relacional:

• Acceso y modificación de objetos en la base Acceso y modificación de objetos en la base de datos ejecutando comandos del Lenguaje de datos ejecutando comandos del Lenguaje de Consulta Estructurado (SQL).de Consulta Estructurado (SQL).

• Contiene una colección de tablas sin Contiene una colección de tablas sin punteros lógicos.punteros lógicos.

• Utiliza un conjunto de operaciones.Utiliza un conjunto de operaciones.

Page 14: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-14 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Comunicación con un RDBMS Usando SQL

Comunicación con un RDBMS Usando SQL

B.D.B.D.

SQL> SELECT loc 2 FROM dept;

SQL> SELECT loc 2 FROM dept;

Se introduce la Se introduce la sentencia SQLsentencia SQL La Sentencia se La Sentencia se

envía a la B.D.envía a la B.D.

LOC

-------------

NEW YORK

DALLAS

CHICAGO

BOSTON

LOC

-------------

NEW YORK

DALLAS

CHICAGO

BOSTON

ResultadoResultado

Page 15: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-15 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Oracle8: Object Relational Database Management System

Oracle8: Object Relational Database Management System

Tablas de Tablas de UsuarioUsuario

Diccionario Diccionario de Datosde Datos

ServidorServidor

Page 16: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-16 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Oracle8: Object Relational Database Management System

Oracle8: Object Relational Database Management System

• Tipos de datos y objetos, definidos por el usuario.

• Compatible con Relacional 100%

• Soporte multimedia y de LOB’s

• Prestaciones del servidor de alta calidad.

• Tipos de datos y objetos, definidos por el usuario.

• Compatible con Relacional 100%

• Soporte multimedia y de LOB’s

• Prestaciones del servidor de alta calidad.

Page 17: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-17 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Definición de un ObjectoDefinición de un Objecto

Un objeto:Un objeto:

• Es una persona, lugar o cosa.

• Sabe cosas sobre si mismo y realiza acciones.

• Tiene una identidad.

Un objeto:Un objeto:

• Es una persona, lugar o cosa.

• Sabe cosas sobre si mismo y realiza acciones.

• Tiene una identidad.

““Yo soy un reloj. Sé mi zona Yo soy un reloj. Sé mi zona horaria y puedo decirte la hora”horaria y puedo decirte la hora”

Page 18: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-18 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Usando un Objeto ModeloUsando un Objeto Modelo• Los objetos modelan la resolución de

un problema.

• El modelo está definido en términos de la interacción entre los objetos.

• Se acercan a la realidad.

• Los objetos modelan la resolución de un problema.

• El modelo está definido en términos de la interacción entre los objetos.

• Se acercan a la realidad.

ClientesClientes NegocioNegocio

CompraCompra

VentaVenta

Page 19: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-19 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Características de los Sist. de ObjetosCaracterísticas de los Sist. de Objetos

• Presentan información como objetos.

• Clasifican a los objetos según tipos.

• Heredan código y atributos.

• Ocultan datos, código y atributos.

• Interactúan con otros objetos.

• Reconocen diferentes objetos sin previo análisis.

• Interpretan el mismo comando de diferentes maneras.

• Presentan información como objetos.

• Clasifican a los objetos según tipos.

• Heredan código y atributos.

• Ocultan datos, código y atributos.

• Interactúan con otros objetos.

• Reconocen diferentes objetos sin previo análisis.

• Interpretan el mismo comando de diferentes maneras.

Page 20: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-20 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Solución Completa de ORACLESolución Completa de ORACLE

SQLSQLSQLSQL PL/SQLPL/SQLPL/SQLPL/SQL

Oracle7/8Oracle7/8

Aplicaciones:Aplicaciones: HRHR FinancialsFinancials ManufacturingManufacturing ......

Aplicaciones:Aplicaciones: HRHR FinancialsFinancials ManufacturingManufacturing ...... Oracle DesignerOracle DesignerOracle DesignerOracle Designer

Oracle DeveloperOracle DeveloperOracle DeveloperOracle Developer

Tablas de DatosTablas de Datos

Diccionario Diccionario de Datosde Datos B.D.B.D.

SQL* PlusSQL* PlusSQL* PlusSQL* Plus

O. Discoverer O. Discoverer O. Discoverer O. Discoverer

Page 21: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-21 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Comandos SQLComandos SQLSELECT SELECT INSERTINSERTUPDATEUPDATEDELETEDELETE

CREATECREATEALTERALTERDROPDROPRENAMERENAMETRUNCATETRUNCATE

COMMITCOMMITROLLBACKROLLBACKSAVEPOINTSAVEPOINT

GRANTGRANTREVOKEREVOKE

Recuperación de Datos Recuperación de Datos

Manipulación de Datos (DML)Manipulación de Datos (DML)

Definición de Datos (DDL)Definición de Datos (DDL)

Control de TransaccionesControl de Transacciones

Control de Datos (DCL)Control de Datos (DCL)

Page 22: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-22 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

¿Qué es PL/SQL?¿Qué es PL/SQL?

• PL/SQL es una extensión de SQL con características de los lenguajes de prog.

• Sentencias de manipulación y consulta de datos, se incluyen sin tener que desarrollar programas.

• PL/SQL es una extensión de SQL con características de los lenguajes de prog.

• Sentencias de manipulación y consulta de datos, se incluyen sin tener que desarrollar programas.

Page 23: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-23 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Entorno de PL/SQLEntorno de PL/SQL

BloquePL/SQL

Motor PL/SQL

Servidor Oracle8

Ejecutor de Sentencias

Procedurales

PL/SQL

SQL

Ejecutor de Sentencias SQL

BloquePL/SQL

Page 24: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-24 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Beneficios de PL/SQLBeneficios de PL/SQL

IntegraciónIntegraciónIntegraciónIntegración

AplicaciónAplicación

Servidor Servidor Oracle8Oracle8

Librería Librería CompartidaCompartida

Page 25: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-25 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Beneficios de PL/SQLBeneficios de PL/SQL

AplicaciónAplicación Otros DBMSsOtros DBMSs

AplicaciónAplicaciónOracle con

PL/SQLOracle con

PL/SQL

SQLSQL

SQLSQLSQLSQL

SQLSQL

SQLSQLIF...THENIF...THEN

SQLSQLELSEELSE

SQLSQLEND IF;END IF;SQLSQL

Mejora del RendimientoMejora del RendimientoMejora del RendimientoMejora del Rendimiento

Page 26: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-26 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Beneficios de PL/SQLBeneficios de PL/SQL

ModularizaciónModularizaciónModularizaciónModularización

BloqueBloqueAnónimoAnónimoBloqueBloque

AnónimoAnónimo

Trigger deTrigger deAplicaciónAplicaciónTrigger deTrigger deAplicaciónAplicación

Proc./Func.Proc./Func.AlmacenadaAlmacenadaProc./Func.Proc./Func.AlmacenadaAlmacenada

Trigger de Trigger de B.D.B.D.

Trigger de Trigger de B.D.B.D.

Proc./Func.Proc./Func.de lade la

AplicaciónAplicación

Proc./Func.Proc./Func.de lade la

AplicaciónAplicación

ProcedimientoProcedimientoEmpaquetadoEmpaquetado

ProcedimientoProcedimientoEmpaquetadoEmpaquetado

DECLAREDECLARE

BEGINBEGIN

EXCEPTIONEXCEPTION

END;END;

Page 27: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-27 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Beneficios de PL/SQLBeneficios de PL/SQL

• Es portable.

• Puede declarar identificadores.

• Puede programar con las estructuras de control de un lenguaje procedural.

• Puede manejar errores.

• Es portable.

• Puede declarar identificadores.

• Puede programar con las estructuras de control de un lenguaje procedural.

• Puede manejar errores.

Page 28: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-28 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Beneficios de PL/SQLBeneficios de PL/SQL

• Es portable.

• Puede declarar identificadores.

• Puede programar con las estructuras de control de un lenguaje procedural.

• Puede manejar errores.

• Es portable.

• Puede declarar identificadores.

• Puede programar con las estructuras de control de un lenguaje procedural.

• Puede manejar errores.

Page 29: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-29 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Tablas Utilizadas en el CursoTablas Utilizadas en el Curso

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

--------- ---------- --------- --------- --------- --------- --------- ---------

7839 KING PRESIDENT 17-NOV-81 5000 10

7698 BLAKE MANAGER 7839 01-MAY-81 2850 30

7782 CLARK MANAGER 7839 09-JUN-81 1500 10

7566 JONES MANAGER 7839 02-APR-81 2975 20

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30

7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30

7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

7900 JAMES CLERK 7698 03-DEC-81 950 30

7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30

7902 FORD ANALYST 7566 03-DEC-81 3000 20

7369 SMITH CLERK 7902 17-DEC-80 800 20

7788 SCOTT ANALYST 7566 09-DEC-82 3000 20

7876 ADAMS CLERK 7788 12-JAN-83 1100 20

7934 MILLER CLERK 7782 23-JAN-82 1300 10

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

--------- ---------- --------- --------- --------- --------- --------- ---------

7839 KING PRESIDENT 17-NOV-81 5000 10

7698 BLAKE MANAGER 7839 01-MAY-81 2850 30

7782 CLARK MANAGER 7839 09-JUN-81 1500 10

7566 JONES MANAGER 7839 02-APR-81 2975 20

7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30

7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30

7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30

7900 JAMES CLERK 7698 03-DEC-81 950 30

7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30

7902 FORD ANALYST 7566 03-DEC-81 3000 20

7369 SMITH CLERK 7902 17-DEC-80 800 20

7788 SCOTT ANALYST 7566 09-DEC-82 3000 20

7876 ADAMS CLERK 7788 12-JAN-83 1100 20

7934 MILLER CLERK 7782 23-JAN-82 1300 10

EMPEMP

DEPTDEPT

DEPTNO DNAME LOC

--------- -------------- ----------

10 ACCOUNTING NEW

YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

DEPTNO DNAME LOC

--------- -------------- ----------

10 ACCOUNTING NEW

YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

GRADE LOSAL HISAL

--------- --------- ---------

1 700 1200

2 1201 1400

3 1401 2000

4 2001 3000

5 3001 9999

GRADE LOSAL HISAL

--------- --------- ---------

1 700 1200

2 1201 1400

3 1401 2000

4 2001 3000

5 3001 9999

SALGRADESALGRADE

Page 30: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-30 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ResumenResumen

• Las B.D. Relacionales:

– Compuestas de Relaciones.

– Gestionadas por operadores relacionales.

– Gobernadas por restricciones de integridad de datos.

• Oracle8 está basado en un ORDBMS “Object Relational Database Management System”.

• Oracle8 permite almacenar y gestionar información por medio de SQL y PL/SQL.

• Las B.D. Relacionales:

– Compuestas de Relaciones.

– Gestionadas por operadores relacionales.

– Gobernadas por restricciones de integridad de datos.

• Oracle8 está basado en un ORDBMS “Object Relational Database Management System”.

• Oracle8 permite almacenar y gestionar información por medio de SQL y PL/SQL.

Page 31: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Escritura Básica de Sentencias SQL

Escritura Básica de Sentencias SQL

Page 32: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-32 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Enumerar las posibilidades de una sentencia SELECT de SQL

• Ejecutar una sentencia básica SELECT

• Diferenciar entre sentencias SQL y comandos de SQL*PLUS

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Enumerar las posibilidades de una sentencia SELECT de SQL

• Ejecutar una sentencia básica SELECT

• Diferenciar entre sentencias SQL y comandos de SQL*PLUS

Page 33: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-33 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Sentencia SELECT de SQLLa Sentencia SELECT de SQL

SelecciónSelección ProjecciónProjección

Tabla 1Tabla 1 Tabla 2Tabla 2

Tabla 1Tabla 1 Tabla 1Tabla 1JoinJoin

Page 34: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-34 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Sentencia Básica SQLSentencia Básica SQL

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

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

• SELECT identifica SELECT identifica qué qué columnascolumnas

• FROM identifica FROM identifica quéqué tablastablas

Page 35: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-35 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Escritura de Sentencias SQLEscritura de Sentencias SQL

• Los Comandos pueden constar de una Los Comandos pueden constar de una o varias líneas.o varias líneas.

• Las tabulaciones e indentaciones Las tabulaciones e indentaciones pueden ser usadas por comodidad.pueden ser usadas por comodidad.

• Las abreviaturas y separación de Las abreviaturas y separación de palabras no están permitidas.palabras no están permitidas.

• Los Comandos no son case sensitive.Los Comandos no son case sensitive.

Page 36: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-36 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Selección de Todas las Columnas

Selección de Todas las Columnas

DEPTNO DNAME LOC--------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

SQL> SELECT * 2 FROM dept;

Page 37: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-37 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Selección Específica de ColumnasSelección Específica de Columnas

DEPTNO LOC--------- ------------- 10 NEW YORK 20 DALLAS 30 CHICAGO 40 BOSTON

SQL> SELECT deptno, loc 2 FROM dept;

Page 38: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-38 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Etiquetas de Columnas por DefectoEtiquetas de Columnas por Defecto

• Justificación de la etiqueta por defecto:Justificación de la etiqueta por defecto:

– Izquierda: fechas y caracteresIzquierda: fechas y caracteres

–Derecha: datos numéricosDerecha: datos numéricos

• Las etiquetas por defecto se muestran Las etiquetas por defecto se muestran en mayúsculas.en mayúsculas.

Page 39: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-39 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Expresiones AritméticasExpresiones Aritméticas

Operador

+

-

*

/

Descripción

Suma

Resta

Multiplicación

División

Crear expresiones sobre tipos de datos Crear expresiones sobre tipos de datos NUMERICOS y FECHAS usando operadores.NUMERICOS y FECHAS usando operadores.

Page 40: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-40 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de Operadores AritméticosUso de Operadores Aritméticos

SQL> SELECT ename, sal, sal+300 2 FROM emp;

ENAME SAL SAL+300---------- --------- ---------KING 5000 5300BLAKE 2850 3150CLARK 2450 2750JONES 2975 3275MARTIN 1250 1550ALLEN 1600 1900...14 rows selected.

Page 41: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-41 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Precedencia de OperadoresPrecedencia de Operadores

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

• La multiplicación y la división tienen La multiplicación y la división tienen prioridad sobre la suma y la resta.prioridad sobre la suma y la resta.

• Los operadores de la misma prioridad Los operadores de la misma prioridad se evalúan de izquierda a derecha.se evalúan de izquierda a derecha.

• Los paréntesis pueden ser usados para Los paréntesis pueden ser usados para cambiar la prioridad de evaluación y cambiar la prioridad de evaluación y para clarificar las sentencias.para clarificar las sentencias.

Page 42: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-42 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Precedencia de OperadoresPrecedencia de Operadores

SQL> SELECT ename, sal, 12*sal+100 2 FROM emp;

ENAME SAL 12*SAL+100---------- --------- ----------KING 5000 60100BLAKE 2850 34300CLARK 2450 29500JONES 2975 35800MARTIN 1250 15100ALLEN 1600 19300...14 rows selected.

Page 43: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-43 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de ParéntesisUso de Paréntesis

SQL> SELECT ename, sal, 12*(sal+100) 2 FROM emp;

ENAME SAL 12*(SAL+100)---------- --------- -----------KING 5000 61200BLAKE 2850 35400CLARK 2450 30600JONES 2975 36900MARTIN 1250 16200...14 rows selected.

Page 44: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-44 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Definición del Valor NULLDefinición del Valor NULL• NULL es un valor que es inaccesible, sin

valor desconocido o inaplicable.

• NULL no representa ni un cero (0) ni un NULL no representa ni un cero (0) ni un espacio en blanco.espacio en blanco.

• NULL es un valor que es inaccesible, sin valor desconocido o inaplicable.

• NULL no representa ni un cero (0) ni un NULL no representa ni un cero (0) ni un espacio en blanco.espacio en blanco.

SQL> SELECT ename, job, comm 2 FROM emp;

ENAME JOB COMM---------- --------- ---------KING PRESIDENTBLAKE MANAGER...TURNER SALESMAN 0...14 rows selected.

Page 45: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-45 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Valores NULL en Expresiones Aritméticas

Valores NULL en Expresiones Aritméticas

Las expresiones aritméticas que Las expresiones aritméticas que contengan un Null se evaluan a Null.contengan un Null se evaluan a Null.Las expresiones aritméticas que Las expresiones aritméticas que contengan un Null se evaluan a Null.contengan un Null se evaluan a Null.

SQL> select ename NAME, 12*sal+comm 2 from emp 3 WHERE ename='KING';

NAME 12*SAL+COMM ---------- -----------KING

Page 46: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-46 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Definición de un Alias de ColumnaDefinición de un Alias de Columna

• Un Alias de columna renombra un Un Alias de columna renombra un encabezamiento de columna.encabezamiento de columna.

• Es útil especialmente en cálculos.Es útil especialmente en cálculos.

• Sigue inmediatamente al nombre de la Sigue inmediatamente al nombre de la columna.columna.

– Palabra clave opcional AS entre el nombre Palabra clave opcional AS entre el nombre de la columna y el alias.de la columna y el alias.

• Se requiere encerrar un alias entre comillas Se requiere encerrar un alias entre comillas dobles si contiene espacios en blanco, dobles si contiene espacios en blanco, caracteres especiales o es case sensitive.caracteres especiales o es case sensitive.

Page 47: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-47 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de Alias de ColumnaUso de Alias de Columna

SQL> SELECT ename AS name, sal salary 2 FROM emp;

NAME SALARY

------------- ---------

...

SQL> SELECT ename "Name", 2 sal*12 "Annual Salary" 3 FROM emp;

Name Annual Salary

------------- -------------

...

Page 48: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-48 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Operador de ConcatenaciónOperador de Concatenación

El operador de concatenación:El operador de concatenación:

• Esta representado por dos barras Esta representado por dos barras verticales (||).verticales (||).

• Vincula columnas o cadenas de Vincula columnas o cadenas de caracteres con otras columnas.caracteres con otras columnas.

• Crea una columna resultado que es una Crea una columna resultado que es una expresión de tipo caracter.expresión de tipo caracter.

Page 49: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-49 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador de Concatenación

Uso del Operador de Concatenación

SQL> SELECT ename||job AS "Employees" 2 FROM emp;

Employees-------------------KINGPRESIDENTBLAKEMANAGERCLARKMANAGERJONESMANAGERMARTINSALESMANALLENSALESMAN...14 rows selected.

Page 50: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-50 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Cadenas de CaracteresCadenas de Caracteres

• Un literal es un caracter, expresión o Un literal es un caracter, expresión o número incluido en la lista de la número incluido en la lista de la cláusula SELECT.cláusula SELECT.

• Los valores literales de tipo fecha y Los valores literales de tipo fecha y caracter deben estar encerrados dentro caracter deben estar encerrados dentro de comillas simples.de comillas simples.

• Por cada fila devuelta se genera una Por cada fila devuelta se genera una cadena de caracteres.cadena de caracteres.

Page 51: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-51 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de Cadenas de CaracteresUso de Cadenas de Caracteres

Employee Details-------------------------KING is a PRESIDENTBLAKE is a MANAGERCLARK is a MANAGERJONES is a MANAGERMARTIN is a SALESMAN...14 rows selected.

Employee Details-------------------------KING is a PRESIDENTBLAKE is a MANAGERCLARK is a MANAGERJONES is a MANAGERMARTIN is a SALESMAN...14 rows selected.

SQL> SELECT ename ||' '||'is a'||' '||job 2 AS "Employee Details" 3 FROM emp;

Page 52: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-52 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Filas DuplicadasFilas Duplicadas

Las consultas, por defecto, muestran Las consultas, por defecto, muestran todas las filas incluyendo las duplicadas.todas las filas incluyendo las duplicadas.Las consultas, por defecto, muestran Las consultas, por defecto, muestran todas las filas incluyendo las duplicadas.todas las filas incluyendo las duplicadas.

SQL> SELECT deptno 2 FROM emp;

SQL> SELECT deptno 2 FROM emp;

DEPTNO--------- 10 30 10 20...14 rows selected.

Page 53: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-53 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Eliminación de Filas DuplicadasEliminación de Filas Duplicadas

Las filas duplicadas se eliminan usando Las filas duplicadas se eliminan usando DISTINCT en la cláusula SELECT.DISTINCT en la cláusula SELECT.

SQL> SELECT DISTINCT deptno 2 FROM emp;

DEPTNO--------- 10 20 30

Page 54: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-54 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Interacción SQL y SQL*Plus Interacción SQL y SQL*Plus

SQL*PlusSQL*Plus

BúferBúfer

ScriptsSQL

ServidorSentecias SQLSentecias SQL

Resultado de la ConsultaResultado de la Consulta

Page 55: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-55 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Sentencias SQL Versus Comandos SQL*Plus

Sentencias SQL Versus Comandos SQL*Plus

SentenciasSentenciasSQLSQL

SQL SQL

• Un lenguajeUn lenguaje

• Estándar ANSIEstándar ANSI

• Las palabras clave no Las palabras clave no pueden abreviarsepueden abreviarse

• Las sentencias manip. Las sentencias manip. datos y definiciones de datos y definiciones de tablas en la B.D.tablas en la B.D.

SQL*PlusSQL*Plus

• Un entornoUn entorno

• Propio de ORACLEPropio de ORACLE

• Las palabras clave sí pueden abreviarse

• Los comandos no Los comandos no pueden manipular pueden manipular valores en la B.D.valores en la B.D.

BúferBúferSQLSQL

ComandosComandosSQL*PlusSQL*Plus

SQL*PlusSQL*Plusbufferbuffer

Page 56: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-56 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Generalidades de SQL*PlusGeneralidades de SQL*Plus

• Conectarse al SQL*Plus.Conectarse al SQL*Plus.

• Describir la estructura de las tablas.Describir la estructura de las tablas.

• Ejecutar SQL desde SQL*Plus.Ejecutar SQL desde SQL*Plus.

• Editar la sentencia SQL.Editar la sentencia SQL.

• Guardar las sentencias SQL en Guardar las sentencias SQL en archivos.archivos.

• Ejecutar los archivos guardados.Ejecutar los archivos guardados.

• Cargar los comandos desde el archivo Cargar los comandos desde el archivo al búfer para editarlos.al búfer para editarlos.

Page 57: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-57 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Conexión a SQL*PlusConexión a SQL*Plus

• Desde un entorno Windows:Desde un entorno Windows:

• Desde la línea de comandos:Desde la línea de comandos: sqlplus [sqlplus [usernameusername[/[/password password [@[@databasedatabase]]]]]]

Page 58: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-58 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Visualización de la Estructura de una Tabla

Visualización de la Estructura de una Tabla

Use el comando DESCRIBE de SQL*Plus Use el comando DESCRIBE de SQL*Plus para visualizar la estructura de una tabla.para visualizar la estructura de una tabla.Use el comando DESCRIBE de SQL*Plus Use el comando DESCRIBE de SQL*Plus para visualizar la estructura de una tabla.para visualizar la estructura de una tabla.

DESC[RIBE] tablenameDESC[RIBE] tablename

Page 59: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-59 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Visualización de la Estructura de una Tabla

Visualización de la Estructura de una Tabla

SQL> DESCRIBE deptSQL> DESCRIBE dept

Name Null? Type----------------- -------- ----DEPTNO NOT NULL NUMBER(2)DNAME VARCHAR2(14)LOC VARCHAR2(13)

Name Null? Type----------------- -------- ----DEPTNO NOT NULL NUMBER(2)DNAME VARCHAR2(14)LOC VARCHAR2(13)

Page 60: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-60 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Comandos de Edición SQL*PlusComandos de Edición SQL*Plus

• A[PPEND] text

• C[HANGE] / old / new

• C[HANGE] / text /

• CL[EAR] BUFF[ER]

• DEL

• DEL n

• DEL m n

• A[PPEND] text

• C[HANGE] / old / new

• C[HANGE] / text /

• CL[EAR] BUFF[ER]

• DEL

• DEL n

• DEL m n

Page 61: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-61 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

SQL*Plus Editing CommandsSQL*Plus Editing Commands

• I[NPUT]

• I[NPUT] text

• L[IST]

• L[IST] n

• L[IST] m n

• R[UN]

• n

• n text

• 0 text

• I[NPUT]

• I[NPUT] text

• L[IST]

• L[IST] n

• L[IST] m n

• R[UN]

• n

• n text

• 0 text

Page 62: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-62 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Comandos de Ficheros SQL*Plus

Comandos de Ficheros SQL*Plus

• SAVE filename

• GET filename

• START filename

• @ filename

• EDIT filename

• SPOOL filename

• EXIT

• SAVE filename

• GET filename

• START filename

• @ filename

• EDIT filename

• SPOOL filename

• EXIT

Page 63: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-63 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ResumenResumen

Use Sql*Plus como un entorno, para:Use Sql*Plus como un entorno, para:

• Ejecutar sentencias SQL

• Editar sentencias SQL

Use Sql*Plus como un entorno, para:Use Sql*Plus como un entorno, para:

• Ejecutar sentencias SQL

• Editar sentencias SQL

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

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

Page 64: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Restricción y Clasificación de los Datos

Restricción y Clasificación de los Datos

Page 65: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-65 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Limitar los registros recuperados por una consulta

• Clasificar los registros recuperados por una consulta

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Limitar los registros recuperados por una consulta

• Clasificar los registros recuperados por una consulta

Page 66: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-66 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Limitar Filas por medio de Selecciones

Limitar Filas por medio de Selecciones

“…“…recupera todos recupera todos los empleados del los empleados del departamento 10”departamento 10”

EMPEMP

EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ...

EMPEMP

EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10 7782 CLARK MANAGER 10 7934 MILLER CLERK 10

Page 67: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-67 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Limiting Rows SelectedLimiting Rows Selected

• Restringir las filas recuperadas usando la cláusula WHERE.

• La cláusula WHERE se escribe después de la cláusula FROM.

• Restringir las filas recuperadas usando la cláusula WHERE.

• La cláusula WHERE se escribe después de la cláusula FROM.

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

Page 68: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-68 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Claúsula WHEREUso de la Claúsula WHERE

SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE job='CLERK';

ENAME JOB DEPTNO---------- --------- ---------JAMES CLERK 30SMITH CLERK 20ADAMS CLERK 20MILLER CLERK 10

Page 69: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-69 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Cadenas de Caracteres y Fechas

Cadenas de Caracteres y Fechas

• Las cadenas de caracteres o las fechas se Las cadenas de caracteres o las fechas se encierran entre comillas simples.encierran entre comillas simples.

• Los valores de tipo caracter son sensibles a Los valores de tipo caracter son sensibles a mayúsculas/minúsculas y los valores de tipo mayúsculas/minúsculas y los valores de tipo fecha son sensibles al formato.fecha son sensibles al formato.

• El formato de fecha por defecto es 'DD-MON-YY'.El formato de fecha por defecto es 'DD-MON-YY'.

SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE ename = 'JAMES';

SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE ename = 'JAMES';

Page 70: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-70 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Operadores de ComparaciónOperadores de Comparación

Operador

=

>

>=

<

<=

<>

Significado

Igual a

Mayor que

Mayor que o igual a

Menor que

Menor que o igual a

No igual a

Page 71: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-71 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de Operadores de Comparación

Uso de Operadores de Comparación

SQL> SELECT ename, sal, comm 2 FROM emp 3 WHERE sal<=comm;

ENAME SAL COMM---------- --------- ---------MARTIN 1250 1400

Page 72: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-72 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Otros Operadores de Comparación

Otros Operadores de Comparación

Operador

BETWEEN

...AND...

IN(list)

LIKE

IS NULL

Significado

Entre dos valores (inclusive)

Lista de valores

Se ajusta a un patrón

Es un valor nulo

Page 73: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-73 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador BETWEENUso del Operador BETWEEN

ENAME SAL---------- ---------MARTIN 1250TURNER 1500WARD 1250ADAMS 1100MILLER 1300

SQL> SELECT ename, sal 2 FROM emp 3 WHERE sal BETWEEN 1000 AND 1500;

Lowerlimit

Higherlimit

Use el operador BETWEEN para visualizar Use el operador BETWEEN para visualizar registros basados en un rango de valores. registros basados en un rango de valores. Use el operador BETWEEN para visualizar Use el operador BETWEEN para visualizar registros basados en un rango de valores. registros basados en un rango de valores.

Page 74: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-74 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Using the IN OperatorUsing the IN Operator

Use el operador IN para localizar valores Use el operador IN para localizar valores coincidentes con una determinada lista.coincidentes con una determinada lista.Use el operador IN para localizar valores Use el operador IN para localizar valores coincidentes con una determinada lista.coincidentes con una determinada lista.

SQL> SELECT empno, ename, sal, mgr 2 FROM emp 3 WHERE mgr IN (7902, 7566, 7788);

EMPNO ENAME SAL MGR--------- ---------- --------- --------- 7902 FORD 3000 7566 7369 SMITH 800 7902 7788 SCOTT 3000 7566 7876 ADAMS 1100 7788

Page 75: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-75 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador LIKEUso del Operador LIKE

SQL> SELECT ename 2 FROM emp 3 WHERE ename LIKE 'S%';

• Usar el operador LIKE para ejecutar Usar el operador LIKE para ejecutar búsquedas en cadenas de caracteres búsquedas en cadenas de caracteres que incluyan comodines.que incluyan comodines.

• Las condiciones de búsqueda pueden Las condiciones de búsqueda pueden contener caracteres o números.contener caracteres o números.

– "%" denota cero o varios caracteres."%" denota cero o varios caracteres.

– "_" denota un solo caracter."_" denota un solo caracter.

Page 76: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-76 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador LIKEUso del Operador LIKE

SQL> SELECT ename 2 FROM emp 3 WHERE ename LIKE '_A%';

ENAME---------- JAMES WARD

• Se puede combinar patrones de caracteresSe puede combinar patrones de caracteres

• Se puede usar el identificador ESCAPE Se puede usar el identificador ESCAPE para buscar "%" o "_"para buscar "%" o "_"

Page 77: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-77 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador IS NULLUso del Operador IS NULL

Verificar la presencia de valores nulos Verificar la presencia de valores nulos con el operador IS NULL.con el operador IS NULL.Verificar la presencia de valores nulos Verificar la presencia de valores nulos con el operador IS NULL.con el operador IS NULL.

SQL> SELECT ename, mgr 2 FROM emp 3 WHERE mgr IS NULL;

ENAME MGR---------- ---------KING

Page 78: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-78 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Operadores LógicosOperadores Lógicos

Operador

AND

OR

NOT

Significado

Devuelve TRUE si ambas

condiciones son TRUE

Devuelve TRUE si alguna de las

condiciones es TRUE

Devuelve TRUE si la siguiente condición es FALSE

Page 79: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-79 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador ANDUso del Operador AND

AND requiere que ambas condiciones sean TRUEAND requiere que ambas condiciones sean TRUE

SQL> SELECT empno, ename, job, sal 2 FROM emp 3 WHERE sal>=1100 4 AND job='CLERK';

EMPNO ENAME JOB SAL--------- ---------- --------- --------- 7876 ADAMS CLERK 1100 7934 MILLER CLERK 1300

Page 80: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-80 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador ORUso del Operador OR

OR requiere que alguna condición sea TRUEOR requiere que alguna condición sea TRUEOR requiere que alguna condición sea TRUEOR requiere que alguna condición sea TRUE

SQL> SELECT empno, ename, job, sal 2 FROM emp 3 WHERE sal>=1100 4 OR job='CLERK';

EMPNO ENAME JOB SAL--------- ---------- --------- --------- 7839 KING PRESIDENT 5000 7698 BLAKE MANAGER 2850 7782 CLARK MANAGER 2450 7566 JONES MANAGER 2975 7654 MARTIN SALESMAN 1250...14 rows selected.

Page 81: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-81 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador NOTUso del Operador NOT

SQL> SELECT ename, job 2 FROM emp 3 WHERE job NOT IN ('CLERK','MANAGER','ANALYST');

ENAME JOB---------- ---------KING PRESIDENTMARTIN SALESMANALLEN SALESMANTURNER SALESMANWARD SALESMAN

Page 82: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-82 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Reglas de PrecedenciaReglas de Precedencia

Utilice paréntesis para modificar las Utilice paréntesis para modificar las reglas de precedencia.reglas de precedencia.Utilice paréntesis para modificar las Utilice paréntesis para modificar las reglas de precedencia.reglas de precedencia.

Orden Evaluado Operador

1 Todos los Operadores de Comparación

2 NOT

3 AND

4 OR

Page 83: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-83 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Reglas de PrecedenciaReglas de Precedencia

ENAME JOB SAL---------- --------- ---------KING PRESIDENT 5000MARTIN SALESMAN 1250ALLEN SALESMAN 1600TURNER SALESMAN 1500WARD SALESMAN 1250

ENAME JOB SAL---------- --------- ---------KING PRESIDENT 5000MARTIN SALESMAN 1250ALLEN SALESMAN 1600TURNER SALESMAN 1500WARD SALESMAN 1250

SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE job='SALESMAN' 4 OR job='PRESIDENT' 5 AND sal>1500;

Page 84: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-84 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Reglas de PrecedenciaReglas de Precedencia

ENAME JOB SAL---------- --------- ---------KING PRESIDENT 5000ALLEN SALESMAN 1600

ENAME JOB SAL---------- --------- ---------KING PRESIDENT 5000ALLEN SALESMAN 1600

Uso de paréntesis para forzar prioridad.Uso de paréntesis para forzar prioridad.Uso de paréntesis para forzar prioridad.Uso de paréntesis para forzar prioridad.

SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE (job='SALESMAN' 4 OR job='PRESIDENT') 5 AND sal>1500;

Page 85: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-85 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Claúsula ORDER BYLa Claúsula ORDER BYOrdenar filas con la cláusula ORDER BY.Ordenar filas con la cláusula ORDER BY.

• ASC – orden ascendente, constituye la opción por ASC – orden ascendente, constituye la opción por defecto.defecto.

• DESC – orden descendente.DESC – orden descendente.

• La cláusula ORDER BY La cláusula ORDER BY siempresiempre va al final del SELECT va al final del SELECT

SQL> SELECT ename, job, deptno, hiredate 2 FROM emp 3 ORDER BY hiredate;

ENAME JOB DEPTNO HIREDATE---------- --------- --------- ---------SMITH CLERK 20 17-DEC-80ALLEN SALESMAN 30 20-FEB-81...14 rows selected.

Page 86: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-86 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Clasificación en Orden Descendente

Clasificación en Orden Descendente

SQL> SELECT ename, job, deptno, hiredate 2 FROM emp 3 ORDER BY hiredate DESC;

ENAME JOB DEPTNO HIREDATE---------- --------- --------- ---------ADAMS CLERK 20 12-JAN-83SCOTT ANALYST 20 09-DEC-82MILLER CLERK 10 23-JAN-82JAMES CLERK 30 03-DEC-81FORD ANALYST 20 03-DEC-81KING PRESIDENT 10 17-NOV-81MARTIN SALESMAN 30 28-SEP-81...14 rows selected.

Page 87: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-87 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Clasificación por Alías de Columna

Clasificación por Alías de Columna

SQL> SELECT empno, ename, sal*12 annsal 2 FROM emp 3 ORDER BY annsal;

EMPNO ENAME ANNSAL--------- ---------- --------- 7369 SMITH 9600 7900 JAMES 11400 7876 ADAMS 13200 7654 MARTIN 15000 7521 WARD 15000 7934 MILLER 15600 7844 TURNER 18000...14 rows selected.

Page 88: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-88 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Clasificación por Múltiples Columnas

Clasificación por Múltiples Columnas

• La lista de ORDER BY es el orden de clasificación• La lista de ORDER BY es el orden de clasificación

• Puede ordenar por una columna no seleccionada.• Puede ordenar por una columna no seleccionada.

SQL> SELECT ename, deptno, sal 2 FROM emp 3 ORDER BY deptno, sal DESC;

ENAME DEPTNO SAL---------- --------- ---------KING 10 5000CLARK 10 2450MILLER 10 1300FORD 20 3000...14 rows selected.

Page 89: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-89 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ResumenResumen

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

Page 90: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Funciones a Nivel de FilaFunciones a Nivel de Fila

Page 91: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-91 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Explicar los diversos tipos de Explicar los diversos tipos de funciones disponibles en SQL.funciones disponibles en SQL.

• Incluir una variedad de funciones de Incluir una variedad de funciones de caracteres, numéricas y de datos en caracteres, numéricas y de datos en sentencias SELECT.sentencias SELECT.

• Explicar las funciones de conversión y Explicar las funciones de conversión y la manera en que podrían ser usadas.la manera en que podrían ser usadas.

Page 92: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-92 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Funciones SQLFunciones SQL

FunciónFunciónEntradaEntrada

arg 1arg 1

arg 2arg 2

arg narg n

Las Funciones Las Funciones Realizan Realizan AccionesAcciones

SalidaSalida

Valor Valor ResultadoResultado

Page 93: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-93 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Dos Tipos de Funciones SQLDos Tipos de Funciones SQL

FuncionesFunciones

Funciones aFunciones a Nivel de FilaNivel de Fila

Funciones a Funciones a Nivel de Nivel de

Múltiples FilasMúltiples Filas

Page 94: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-94 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Funciones a Nivel de Fila: Sintaxis

Funciones a Nivel de Fila: Sintaxis

• Manipulan ítems de datos.Manipulan ítems de datos.

• Aceptan argumentos y devuelven un valor.Aceptan argumentos y devuelven un valor.

• Actúan sobre cada fila retornada.Actúan sobre cada fila retornada.

• Devuelven un resultado por fila.Devuelven un resultado por fila.

• Modifican el tipo de datos.Modifican el tipo de datos.

• Pueden estar anidadas.Pueden estar anidadas.

Sintaxis:Sintaxis:

function_name (column|expression, [arg1, arg2,...])function_name (column|expression, [arg1, arg2,...])

Page 95: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-95 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Funciones a Nivel de FilaFunciones a Nivel de Fila

ConversionConversion

CharacterCharacter

NumberNumber

DateDate

GeneralGeneralSingle-row Single-row functionsfunctions

Page 96: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-96 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Funciones de CaracteresFunciones de Caracteres

Funciones deFunciones deCaracteresCaracteres

LOWERLOWER

UPPERUPPER

INITCAPINITCAP

CONCATCONCAT

SUBSTRSUBSTR

LENGTHLENGTH

INSTRINSTR

LPADLPAD

Funciones de ConversiónFunciones de Conversión Funciones de Funciones de Manipulación de CaracteresManipulación de Caracteres

Page 97: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-97 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Función Resultado

Funciones de ConversiónFunciones de Conversión

Conversión de cadenas de caracteresConversión de cadenas de caracteresConversión de cadenas de caracteresConversión de cadenas de caracteres

LOWER('Curso SQL')

UPPER ('Curso SQL')

INITCAP('Curso SQL')

curso sql

CURSO SQL

Curso Sql

Page 98: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-98 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de Funciones de ConversiónUso de Funciones de Conversión

Visualizar el número de empleado, Visualizar el número de empleado, nombre y nº de departamento de “Blake”.nombre y nº de departamento de “Blake”.Visualizar el número de empleado, Visualizar el número de empleado, nombre y nº de departamento de “Blake”.nombre y nº de departamento de “Blake”.

SQL> SELECT empno, ename, deptno 2 FROM emp 3 WHERE ename = 'blake';no rows selectedno rows selected

SQL> SELECT empno, ename, deptno 2 FROM emp 3 WHERE ename = 'blake';no rows selectedno rows selected

EMPNO ENAME DEPTNO--------- ---------- --------- 7698 BLAKE 30

EMPNO ENAME DEPTNO--------- ---------- --------- 7698 BLAKE 30

SQL> SELECT empno, ename, deptno 2 FROM emp 3 WHERE LOWER(ename) = 'blake';

Page 99: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-99 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

CONCAT('Good', 'String')

SUBSTR('String',1,3)

LENGTH('String')

INSTR('String', 'r')

LPAD(sal,10,'*')

GoodString

Str

6

3

******5000

Función Resultado

Funciones de Manipulación de Caracteres

Funciones de Manipulación de Caracteres

Manipulación de cadenas de caracteresManipulación de cadenas de caracteresManipulación de cadenas de caracteresManipulación de cadenas de caracteres

Page 100: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-100 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de Funciones de Manipulación de Caracteres

Uso de Funciones de Manipulación de Caracteres

SQL> SELECT ename, CONCAT (ename, job), LENGTH(ename), 2 INSTR(ename, 'A') 3 FROM emp 4 WHERE SUBSTR(job,1,5) = 'SALES';

ENAME CONCAT(ENAME,JOB) LENGTH(ENAME) INSTR(ENAME,'A')---------- ------------------- ------------- ----------------MARTIN MARTINSALESMAN 6 2ALLEN ALLENSALESMAN 5 1TURNER TURNERSALESMAN 6 0WARD WARDSALESMAN 4 2

Page 101: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-101 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Funciones NuméricasFunciones Numéricas

• ROUND: Redondea un valor al decimal especificado

ROUND(45.926, 2) 45.93

• TRUNC: Trunca un valor en el decimal especificado

TRUNC(45.926, 2) 45.92

• MOD: Devuelve el resto de la división

MOD(1600, 300) 100

• ROUND: Redondea un valor al decimal especificado

ROUND(45.926, 2) 45.93

• TRUNC: Trunca un valor en el decimal especificado

TRUNC(45.926, 2) 45.92

• MOD: Devuelve el resto de la división

MOD(1600, 300) 100

Page 102: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-102 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Función ROUNDUso de la Función ROUND

Visualizar el valor 45.923 redondeado a Visualizar el valor 45.923 redondeado a centenas, centenas, 00, y 10 posiciones decimales., y 10 posiciones decimales.Visualizar el valor 45.923 redondeado a Visualizar el valor 45.923 redondeado a centenas, centenas, 00, y 10 posiciones decimales., y 10 posiciones decimales.

SQL> SELECT ROUND(45.923,2), ROUND(45.923,0), 2 ROUND(45.923,-1) 3 FROM SYS.DUAL;

ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1)--------------- -------------- ----------------- 45.92 46 50

Page 103: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-103 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

SQL> SELECT TRUNC(45.923,2), TRUNC(45.923), 2 TRUNC(45.923,-1) 3 FROM SYS.DUAL;

TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1)--------------- ------------- --------------- 45.92 45 40

Uso de la Función TRUNCUso de la Función TRUNC

Visualizar el valor 45.923 con TRUNC a Visualizar el valor 45.923 con TRUNC a centenas, centenas, 00, y 10 posiciones decimales., y 10 posiciones decimales.Visualizar el valor 45.923 con TRUNC a Visualizar el valor 45.923 con TRUNC a centenas, centenas, 00, y 10 posiciones decimales., y 10 posiciones decimales.

Page 104: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-104 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Función MODUso de la Función MOD

Calcular el resto de dividir el salario entre Calcular el resto de dividir el salario entre la comisión de cada empleado, cuyo la comisión de cada empleado, cuyo trabajo sea “VENDEDOR”.trabajo sea “VENDEDOR”.

Calcular el resto de dividir el salario entre Calcular el resto de dividir el salario entre la comisión de cada empleado, cuyo la comisión de cada empleado, cuyo trabajo sea “VENDEDOR”.trabajo sea “VENDEDOR”.

SQL> SELECT ename, sal, comm, MOD(sal, comm) 2 FROM emp 3 WHERE job = 'SALESMAN';

ENAME SAL COMM MOD(SAL,COMM)---------- --------- --------- -------------MARTIN 1250 1400 1250ALLEN 1600 300 100TURNER 1500 0 1500WARD 1250 500 250

Page 105: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-105 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Trabajando con FechasTrabajando con Fechas

• Oracle almacena fechas en un formato numérico Oracle almacena fechas en un formato numérico interno.interno.

– Siglo, año, mes, día, horas, minutos, Siglo, año, mes, día, horas, minutos, segundos.segundos.

• El formato de fecha por defecto es DD-MON-YY.El formato de fecha por defecto es DD-MON-YY.

• SYSDATE es una función que devuelve fecha y SYSDATE es una función que devuelve fecha y hora.hora.

• DUAL es una tabla virtual de la Base de Datos, DUAL es una tabla virtual de la Base de Datos, que puede ser usada para inspeccionar que puede ser usada para inspeccionar SYSDATE.SYSDATE.

Page 106: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-106 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Operadores Aritméticos de Fechas

Operadores Aritméticos de Fechas

• Sumar o restar un número a ó de una Sumar o restar un número a ó de una fecha da por resultado una fecha da por resultado una fechafecha..

• Restar dos fechas para encontrar la Restar dos fechas para encontrar la cantidadcantidad de días entre esas fechas. de días entre esas fechas.

• Sumar Sumar horashoras a una fecha dividiendo la a una fecha dividiendo la cantidad de horas por 24.cantidad de horas por 24.

Page 107: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-107 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de Operadores Aritméticos en Fechas

Uso de Operadores Aritméticos en Fechas

SQL> SELECT ename, (SYSDATE-hiredate)/7 WEEKS 2 FROM emp 3 WHERE deptno = 10;

ENAME WEEKS---------- ---------KING 830.93709CLARK 853.93709MILLER 821.36566

Page 108: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-108 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Funciones de FechaFunciones de Fecha

Número de meses entre dos fechasMONTHS_BETWEEN

ADD_MONTHS

NEXT_DAY

LAST_DAY

ROUND

TRUNC

Agregar meses según calendario, a una fecha

Próximo día de la fecha especificada

Ultimo día del mes

Redondea una fecha

Trunca una fecha

FUNCION DESCRIPCION

Page 109: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-109 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

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

Uso de Funciones de FechaUso de Funciones de Fecha

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

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

• LAST_DAY('01-SEP-95')LAST_DAY('01-SEP-95')

19.677419419.6774194

'11-JUL-94''11-JUL-94'

'08-SEP-95''08-SEP-95'

'30-SEP-95''30-SEP-95'

Page 110: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-110 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de Funciones de FechaUso de Funciones de Fecha

• ROUND('25-JUL-95','MONTH')ROUND('25-JUL-95','MONTH')

• ROUND('25-JUL-95','YEAR')ROUND('25-JUL-95','YEAR')

• TRUNC('25-JUL-95','MONTH') TRUNC('25-JUL-95','MONTH')

• TRUNC('25-JUL-95','YEAR')TRUNC('25-JUL-95','YEAR')

01-AUG-9501-AUG-95

01-JAN-9601-JAN-96

01-JUL-9501-JUL-95

01-JAN-9501-JAN-95

Page 111: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-111 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Funciones de ConversiónFunciones de Conversión

ConversiónConversiónImplícitaImplícita

ConversiónConversiónExplícitaExplícita

Conversión de Conversión de Tipos de DatosTipos de Datos

Page 112: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-112 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Conversión Implícita del Tipo de Dato

Conversión Implícita del Tipo de Dato

Para asignaciones, Oracle automáticamente Para asignaciones, Oracle automáticamente puede convertir:puede convertir:Para asignaciones, Oracle automáticamente Para asignaciones, Oracle automáticamente puede convertir:puede convertir:

VARCHAR2 o CHAR

De A

VARCHAR2 o CHAR

NUMBER

DATE

NUMBER

DATE

VARCHAR2

VARCHAR2

Page 113: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-113 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Conversión Explícita del Tipo de Dato

Conversión Explícita del Tipo de Dato

Para evaluar una expresión, Oracle Para evaluar una expresión, Oracle automáticamente puede convertir:automáticamente puede convertir:Para evaluar una expresión, Oracle Para evaluar una expresión, Oracle automáticamente puede convertir:automáticamente puede convertir:

VARCHAR2 o CHAR

De A

VARCHAR2 o CHAR

NUMBER

DATE

Page 114: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-114 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Conversión Explícita del Tipo de Dato

Conversión Explícita del Tipo de Dato

NUMBERNUMBER CHARACTERCHARACTER

TO_CHARTO_CHAR

TO_NUMBERTO_NUMBER

DATEDATE

TO_CHARTO_CHAR

TO_DATETO_DATE

Page 115: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-115 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Función TO_CHAR con FechasFunción TO_CHAR con Fechas

El formato:El formato:

• Debe estar encerrado entre comillas simples y Debe estar encerrado entre comillas simples y es sensible a mayúsculas/minúsculas.es sensible a mayúsculas/minúsculas.

• Puede incluir cualquier elemento de formato Puede incluir cualquier elemento de formato de fecha válido.de fecha válido.

• Tiene un elemento Tiene un elemento fm (fill mode)fm (fill mode) para eliminar para eliminar espacios en blanco de relleno o suprimir ceros espacios en blanco de relleno o suprimir ceros a la izquierda.a la izquierda.

• Está separado de la fecha por una coma.Está separado de la fecha por una coma.

TO_CHAR(date, 'fmt')TO_CHAR(date, 'fmt')

Page 116: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-116 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

YYYY

Elementos del Modelo Formato de FechaElementos del Modelo Formato de Fecha

YEAR

MM

MONTH

DY

DAY

Año completo en número

Año en letras

Nº del mes con dos dígitos

Abreviatura de tres letras del día de la semana

Nombre completo del día

Nombre completo del mes

Page 117: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-117 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Elementos del Formato de Fechas

Elementos del Formato de Fechas

• Obtención de la hora:Obtención de la hora:

• Añadir cadenas de caracteres encerrándolas Añadir cadenas de caracteres encerrándolas entre dobles comillas.entre dobles comillas.

• Sufijo que permita obtener el nº del día en letra.Sufijo que permita obtener el nº del día en letra.

• Obtención de la hora:Obtención de la hora:

• Añadir cadenas de caracteres encerrándolas Añadir cadenas de caracteres encerrándolas entre dobles comillas.entre dobles comillas.

• Sufijo que permita obtener el nº del día en letra.Sufijo que permita obtener el nº del día en letra.

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

DD "of" MONTH 12 of OCTOBER

ddspth fourteenth

Page 118: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-118 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Formato de Fecha RRFormato de Fecha RR

Año ActualAño Actual

19951995199519952001200120012001

Fecha EspecíficadaFecha Específicada

27-OCT-9527-OCT-9527-OCT-1727-OCT-1727-OCT-1727-OCT-1727-OCT-9527-OCT-95

Formato RRFormato RR

19951995201720172017201719951995

FormatoYYFormatoYY

19951995191719172017201720952095

Si los 2 dígitos especificados del año estánSi los 2 dígitos especificados del año están

Si los 2 Si los 2 dígitos del dígitos del año año corriente corriente estánestán

0-490-49

0-490-49 50-9950-99

50-9950-99

La fecha devuelta La fecha devuelta corresponde al corresponde al siglo corriente.siglo corriente.

La fecha devuelta La fecha devuelta corresponde al corresponde al siglo posterior al siglo posterior al corriente.corriente.

La fecha devuelta La fecha devuelta corresponde al siglo corresponde al siglo anterior al corriente.anterior al corriente.

La fecha devuelta La fecha devuelta corresponde al siglo corresponde al siglo corriente.corriente.

Page 119: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-119 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Función TO_CHAR con FechasFunción TO_CHAR con Fechas

SQL> SELECT ename, 2 TO CHAR(hiredate, 'fmDD Month YYYY') HIREDATE 3 FROM emp;

ENAME HIREDATE---------- -----------------KING 17 November 1981BLAKE 1 May 1981CLARK 9 June 1981JONES 2 April 1981MARTIN 28 September 1981ALLEN 20 February 1981...14 rows selected.

Page 120: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-120 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Función TO_CHAR con NúmerosFunción TO_CHAR con Números

Use estos formatos con la función Use estos formatos con la función TO_CHAR para mostrar un carácter como TO_CHAR para mostrar un carácter como un número.un número.

Use estos formatos con la función Use estos formatos con la función TO_CHAR para mostrar un carácter como TO_CHAR para mostrar un carácter como un número.un número.

TO_CHAR(number, 'fmt')TO_CHAR(number, 'fmt')

9

0

$

L

.

,

Representa un número

Fuerza a que se muestre el 0 (cero)

Signo del dólar

Usa el símbolo de moneda local

Imprime el punto decimal

Imprime el indicador de millar

Page 121: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-121 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

SQL> SELECT TO_CHAR(sal,'$99,999') SALARY 2 FROM emp 3 WHERE ename = 'SCOTT';

SALARY-------- $3,000

Uso de la Función TO_CHAR con Números

Uso de la Función TO_CHAR con Números

Page 122: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-122 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Funciones TO_NUMBER y TO_DATE

Funciones TO_NUMBER y TO_DATE

• Convierte una cadena de caracteres a un formato numérico usando la función TO_NUMBER

• Convierte una cadena de caracteres a un formato numérico usando la función TO_NUMBER

TO_NUMBER(char)TO_NUMBER(char)

• Convierte una cadena de caracteres a un formato de fecha usando la función TO_DATE

• Convierte una cadena de caracteres a un formato de fecha usando la función TO_DATE

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

Page 123: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-123 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

NVL FunctionNVL Function

Convierte un nulo a un valor.Convierte un nulo a un valor.

• Los tipos de datos pueden ser de fecha, cadenas de caracteres y números.

• Los tipos de datos deben coincidir:

– NVL(comm,0)

– NVL(hiredate,'01-JAN-97')

– NVL(job,'No Job Yet')

Convierte un nulo a un valor.Convierte un nulo a un valor.

• Los tipos de datos pueden ser de fecha, cadenas de caracteres y números.

• Los tipos de datos deben coincidir:

– NVL(comm,0)

– NVL(hiredate,'01-JAN-97')

– NVL(job,'No Job Yet')

Page 124: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-124 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

SQL> SELECT ename, sal, comm, (sal*12)+NVL(comm,0) 2 FROM emp;

Uso de la Función NVLUso de la Función NVL

ENAME SAL COMM (SAL*12)+NVL(COMM,0)---------- --------- --------- --------------------KING 5000 60000BLAKE 2850 34200CLARK 2450 29400JONES 2975 35700MARTIN 1250 1400 16400ALLEN 1600 300 19500...14 rows selected.

Page 125: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-125 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Función DECODELa Función DECODE

Hace las veces de sentecias Hace las veces de sentecias CASECASE o o IF-THEN-ELSEIF-THEN-ELSE, para facilitar consultas , para facilitar consultas condicionales.condicionales.

Hace las veces de sentecias Hace las veces de sentecias CASECASE o o IF-THEN-ELSEIF-THEN-ELSE, para facilitar consultas , para facilitar consultas condicionales.condicionales.

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

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

Page 126: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-126 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Función DECODEUso de la Función DECODE

SQL> SELECT job, sal, 2 DECODE(job, 'ANALYST' SAL*1.1, 3 'CLERK', SAL*1.15, 4 'MANAGER', SAL*1.20, 5 SAL) 6 REVISED_SALARY 7 FROM emp;

JOB SAL REVISED_SALARY--------- --------- --------------PRESIDENT 5000 5000MANAGER 2850 3420MANAGER 2450 2940...14 rows selected.

Page 127: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-127 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Anudamiento de FuncionesAnudamiento de Funciones

• Las funciones a nivel de fila pueden ser Las funciones a nivel de fila pueden ser anidadas hasta cualquier nivel.anidadas hasta cualquier nivel.

• Las funciones anidadas son evaluadas desde Las funciones anidadas son evaluadas desde el nivel más profundo al nivel menos el nivel más profundo al nivel menos profundo.profundo.

F3(F2(F1(col,arg1),arg2),arg3)

Paso 1 = Resultado 1

Paso 2 = Resultado 2

Paso 3 = Resultado 3

Page 128: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-128 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Funciones AnidadasFunciones Anidadas

SQL> SELECT ename, 2 NVL(TO_CHAR(mgr),'No Manager') 3 FROM emp 4 WHERE mgr IS NULL;

ENAME NVL(TO_CHAR(MGR),'NOMANAGER')---------- -----------------------------KING No Manager

Page 129: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-129 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ResumenResumen

Use funciones para:Use funciones para:

• Realizar cáculos sobre los datos

• Modificar datos de forma individual

• Manipular la salida de grupos de registros

• Alterar formatos de fecha en su visualización

• Convertir tipos de datos de columnas

Use funciones para:Use funciones para:

• Realizar cáculos sobre los datos

• Modificar datos de forma individual

• Manipular la salida de grupos de registros

• Alterar formatos de fecha en su visualización

• Convertir tipos de datos de columnas

Page 130: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-130 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Visión General de la PrácticaVisión General de la Práctica

• Crear consultas que requieran el uso de Crear consultas que requieran el uso de funciones numéricas, de caracteres y de funciones numéricas, de caracteres y de fechas.fechas.

• Usar concatenación con funciones.Usar concatenación con funciones.

• Escribir consultas case insensitive para probar Escribir consultas case insensitive para probar la utilidad de las funciones de caracteres.la utilidad de las funciones de caracteres.

• Ejecutar cálculos sobre años y meses de Ejecutar cálculos sobre años y meses de servicio para un empleado.servicio para un empleado.

• Determinar la fecha de revisión para un Determinar la fecha de revisión para un empleado.empleado.

Page 131: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Visualización de Datos a partir de Varias TablasVisualización de Datos a partir de Varias Tablas

Page 132: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-132 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Escribir sentencias SELECT para acceder a Escribir sentencias SELECT para acceder a los datos desde una o más tablas usando los datos desde una o más tablas usando equality y non-equality joins (combinaciones equality y non-equality joins (combinaciones por igualdad y por desigualdad).por igualdad y por desigualdad).

• Visualizar datos que no se cumplirían Visualizar datos que no se cumplirían normalmente con una condición de join normalmente con una condición de join usando outer joins (uniones externas).usando outer joins (uniones externas).

• Combinar (Join) una tabla consigo misma.Combinar (Join) una tabla consigo misma.

Page 133: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-133 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

EMPNO DEPTNO LOC----- ------- -------- 7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO...14 rows selected.

EMPNO DEPTNO LOC----- ------- -------- 7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO...14 rows selected.

Obtención de Datos de Múltiples TablasObtención de Datos de Múltiples TablasEMP EMP DEPT DEPT EMPNO ENAME ... DEPTNO------ ----- ... ------ 7839 KING ... 10 7698 BLAKE ... 30 ... 7934 MILLER ... 10

DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

Page 134: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-134 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

¿Qué es un JOIN?¿Qué es un JOIN?

Use un join para consultar datos de más Use un join para consultar datos de más de una tabla.de una tabla.

• Escriba la condición de join en la claúsula WHERE.

• Preceda el nombre de la columna con el de la tabla, cuando el mismo nombre de columna, aparezca en más de una tabla.

Use un join para consultar datos de más Use un join para consultar datos de más de una tabla.de una tabla.

• Escriba la condición de join en la claúsula WHERE.

• Preceda el nombre de la columna con el de la tabla, cuando el mismo nombre de columna, aparezca en más de una tabla.

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

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

Page 135: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-135 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Producto CartesianoProducto Cartesiano

• Se establece un producto cartesiano cuando:Se establece un producto cartesiano cuando:

– Se omite una condición de join.Se omite una condición de join.

– Se define una condición de join inválida.Se define una condición de join inválida.

– Se combinan todas las filas de la primer Se combinan todas las filas de la primer tabla con todas las filas de la segunda.tabla con todas las filas de la segunda.

• Para evitar un producto cartesiano, se debe Para evitar un producto cartesiano, se debe incluir siempre una condición de join válida en incluir siempre una condición de join válida en la cláusula WHERE.la cláusula WHERE.

Page 136: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-136 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Generación de un Producto Cartesiano

Generación de un Producto Cartesiano

ENAME DNAME------ ----------KING ACCOUNTINGBLAKE ACCOUNTING ...KING RESEARCHBLAKE RESEARCH...56 rows selected.

ENAME DNAME------ ----------KING ACCOUNTINGBLAKE ACCOUNTING ...KING RESEARCHBLAKE RESEARCH...56 rows selected.

EMP (14 registros) EMP (14 registros) DEPT (4 registros) DEPT (4 registros)

EMPNO ENAME ... DEPTNO------ ----- ... ------ 7839 KING ... 10 7698 BLAKE ... 30 ... 7934 MILLER ... 10

EMPNO ENAME ... DEPTNO------ ----- ... ------ 7839 KING ... 10 7698 BLAKE ... 30 ... 7934 MILLER ... 10

DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

““Producto Producto Cartesiano: Cartesiano:

14*4=56 rows”14*4=56 rows”

Page 137: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-137 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Tipos de JoinTipos de Join

EquijoinEquijoin Non-equijoinNon-equijoin Outer joinOuter join Self joinSelf join

Page 138: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-138 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

¿Qué es un Equijoin?¿Qué es un Equijoin?EMP EMP DEPT DEPT EMPNO ENAME DEPTNO------ ------- ------- 7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20...14 rows selected.

DEPTNO DNAME LOC ------- ---------- -------- 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 20 RESEARCH DALLAS 20 RESEARCH DALLAS...14 rows selected.

Primary keyPrimary key Foreign keyForeign key

Page 139: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-139 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Recuperación de Registros con Equijoins

Recuperación de Registros con Equijoins

SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno;

EMPNO ENAME DEPTNO DEPTNO LOC----- ------ ------ ------ --------- 7839 KING 10 10 NEW YORK 7698 BLAKE 30 30 CHICAGO 7782 CLARK 10 10 NEW YORK 7566 JONES 20 20 DALLAS...14 rows selected.

Page 140: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-140 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Calificación de Nombres de Columna Ambiguos

Calificación de Nombres de Columna Ambiguos• Usar como prefijos los nombres de Usar como prefijos los nombres de

tablas para calificar los nombres de tablas para calificar los nombres de columnas que están en varias tablas.columnas que están en varias tablas.

• Mejorar el rendimiento usando como Mejorar el rendimiento usando como prefijos los nombres de tablas.prefijos los nombres de tablas.

• Distinguir columnas que tienen Distinguir columnas que tienen nombres idénticos pero pertenecen a nombres idénticos pero pertenecen a diferentes tablas usando alias de diferentes tablas usando alias de columnas.columnas.

Page 141: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-141 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Condiciones de Búsqueda Adicionales Usando el Operador

AND: Ejemplo

Condiciones de Búsqueda Adicionales Usando el Operador

AND: Ejemplo EMP EMP DEPT DEPT EMPNO ENAME DEPTNO------ ------- ------- 7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20...14 rows selected.

DEPTNO DNAME LOC ------ --------- -------- 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 20 RESEARCH DALLAS 20 RESEARCH DALLAS...14 rows selected.

Page 142: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-142 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de Alias de TablaUso de Alias de Tabla

Ayudan a simplificar las consultasAyudan a simplificar las consultasAyudan a simplificar las consultasAyudan a simplificar las consultas

SQL> SELECT emp.empno, emp.ename, emp.deptno,

2 dept.deptno, dept.loc

3 FROM emp, dept

4 WHERE emp.deptno=dept.deptno;

SQL> SELECT e.empno, e.ename, e.deptno,

2 d.deptno, d.loc

3 FROM emp e, dept d

4 WHERE e.deptno=d.deptno;

Page 143: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-143 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Combinando Más de Dos TablasCombinando Más de Dos Tablas

NAME CUSTID----------- ------JOCKSPORTS 100TKB SPORT SHOP 101VOLLYRITE 102JUST TENNIS 103K+T SPORTS 105SHAPE UP 106WOMENS SPORTS 107... ...9 rows selected.

NAME CUSTID----------- ------JOCKSPORTS 100TKB SPORT SHOP 101VOLLYRITE 102JUST TENNIS 103K+T SPORTS 105SHAPE UP 106WOMENS SPORTS 107... ...9 rows selected.

CUSTOMER CUSTOMER

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

ORD ORD

ORDID ITEMID------ ------- 610 3 611 1 612 1 601 1 602 1...64 rows selected.

ORDID ITEMID------ ------- 610 3 611 1 612 1 601 1 602 1...64 rows selected.

ITEM ITEM

Page 144: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-144 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Non-EquijoinsNon-EquijoinsEMPEMP SALGRADESALGRADE

““el salario en la tabla el salario en la tabla EMP, está entre el salarioEMP, está entre el salario más bajo y el salario más bajo y el salario más alto de la tablamás alto de la tablaSALGRADE”SALGRADE”

EMPNO ENAME SAL------ ------- ------ 7839 KING 5000 7698 BLAKE 2850 7782 CLARK 2450 7566 JONES 2975 7654 MARTIN 1250 7499 ALLEN 1600 7844 TURNER 1500 7900 JAMES 950...14 rows selected.

GRADE LOSAL HISAL----- ----- ------1 700 12002 1201 14003 1401 20004 2001 30005 3001 9999

Page 145: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-145 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Recuperación de Registros con Non-Equijoins

Recuperación de Registros con Non-Equijoins

ENAME SAL GRADE---------- --------- ---------JAMES 950 1SMITH 800 1ADAMS 1100 1...14 rows selected.

SQL> SELECT e.ename, e.sal, s.grade

2 FROM emp e, salgrade s

3 WHERE e.sal

4 BETWEEN s.losal AND s.hisal;

Page 146: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-146 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Outer JoinsOuter Joins

EMP EMP DEPT DEPT

No hay empleados en el No hay empleados en el departamento OPERATIONSdepartamento OPERATIONS

ENAME DEPTNO----- ------KING 10BLAKE 30CLARK 10JONES 20...

DEPTNO DNAME------ ----------10 ACCOUNTING30 SALES10 ACCOUNTING20 RESEARCH...40 OPERATIONS

Page 147: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-147 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Outer JoinsOuter Joins

• Usar Outer Join para ver las filas que no cumplen la condición de join.

• El operador de un Outer Join es el signo más (+).

• Usar Outer Join para ver las filas que no cumplen la condición de join.

• El operador de un Outer Join es el signo más (+).

SELECT table.column, table.column

FROM table1, table2

WHERE table1.column(+) = table2.column;

SELECT table.column, table.column

FROM table1, table2

WHERE table1.column(+) = table2.column;

SELECT table.column, table.column

FROM table1, table2

WHERE table1.column = table2.column(+);

SELECT table.column, table.column

FROM table1, table2

WHERE table1.column = table2.column(+);

Page 148: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-148 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de Outer JoinsUso de Outer Joins

SQL> SELECT e.ename, d.deptno, d.dname

2 FROM emp e, dept d

3 WHERE e.deptno(+) = d.deptno

4 ORDER BY e.deptno;

ENAME DEPTNO DNAME---------- --------- -------------KING 10 ACCOUNTINGCLARK 10 ACCOUNTING... 40 OPERATIONS15 rows selected.

Page 149: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-149 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Self JoinsSelf Joins

EMP (WORKER)EMP (WORKER) EMP (MANAGER)EMP (MANAGER)

““MGR en la tabla WORKER es igual a MGR en la tabla WORKER es igual a

EMPNO en la tabla MANAGER” EMPNO en la tabla MANAGER”

EMPNO ENAME MGR----- ------ ---- 7839 KING 7698 BLAKE 7839 7782 CLARK 7839 7566 JONES 7839 7654 MARTIN 7698 7499 ALLEN 7698

EMPNO ENAME----- --------

7839 KING 7839 KING 7839 KING 7698 BLAKE 7698 BLAKE

Page 150: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-150 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Combinación de una Tabla Consigo Misma

Combinación de una Tabla Consigo Misma

WORKER.ENAME||'WORKSFOR'||MANAG-------------------------------BLAKE works for KINGCLARK works for KINGJONES works for KINGMARTIN works for BLAKE...13 rows selected.

WORKER.ENAME||'WORKSFOR'||MANAG-------------------------------BLAKE works for KINGCLARK works for KINGJONES works for KINGMARTIN works for BLAKE...13 rows selected.

SQL> SELECT worker.ename||' works for '||manager.ename

2 FROM emp worker, emp manager

3 WHERE worker.mgr = manager.empno;

Page 151: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-151 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ResumenResumen

EquijoinEquijoin Non-equijoinNon-equijoin Outer joinOuter join Self joinSelf join

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

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

Page 152: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Datos Agregados por medio de Funciones de Grupo

Datos Agregados por medio de Funciones de Grupo

Page 153: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-153 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Identificar las funciones de grupo Identificar las funciones de grupo disponibles.disponibles.

• Explicar el uso de las funciones de Explicar el uso de las funciones de grupo.grupo.

• Mostrar estadísticas para diferentes Mostrar estadísticas para diferentes grupos usando la cláusula GROUP BY.grupos usando la cláusula GROUP BY.

• Incluir o excluir filas agrupadas usando Incluir o excluir filas agrupadas usando la cláusula HAVING.la cláusula HAVING.

Page 154: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-154 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

¿Qué son las Funciones de Grupo?

¿Qué son las Funciones de Grupo?Las Funciones de Grupo operan sobre conjuntos Las Funciones de Grupo operan sobre conjuntos

de registros para dar un resultado a nivel de grupo.de registros para dar un resultado a nivel de grupo.Las Funciones de Grupo operan sobre conjuntos Las Funciones de Grupo operan sobre conjuntos de registros para dar un resultado a nivel de grupo.de registros para dar un resultado a nivel de grupo.EMPEMP

““máximo salariomáximo salarioen la tabla EMP”en la tabla EMP”

DEPTNO SAL--------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250

MAX(SAL)

---------

5000

Page 155: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-157 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de las Funciones AVG y SUM

Uso de las Funciones AVG y SUM

AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)-------- --------- --------- --------- 1400 1600 1250 5600

Puede usar AVG y SUM para datos numéricos.Puede usar AVG y SUM para datos numéricos.Puede usar AVG y SUM para datos numéricos.Puede usar AVG y SUM para datos numéricos.

SQL> SELECT AVG(sal), MAX(sal), 2 MIN(sal), SUM(sal) 3 FROM emp 4 WHERE job LIKE 'SALES%';

Page 156: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-158 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de las Funciones MIN y MAX

Uso de las Funciones MIN y MAX

Puede usar Puede usar MIN y MAX para cualquier tipo y MAX para cualquier tipo de dato.de dato.Puede usar Puede usar MIN y MAX para cualquier tipo y MAX para cualquier tipo de dato.de dato.

SQL> SELECT MIN(hiredate), MAX(hiredate) 2 FROM emp;

MIN(HIRED MAX(HIRED--------- ---------17-DEC-80 12-JAN-83

Page 157: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-159 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Función COUNTUso de la Función COUNT

COUNT(*)--------- 6

SQL> SELECT COUNT(*) 2 FROM emp 3 WHERE deptno = 30;

COUNT(*) devuelve el nº de registros en COUNT(*) devuelve el nº de registros en una tabla.una tabla.COUNT(*) devuelve el nº de registros en COUNT(*) devuelve el nº de registros en una tabla.una tabla.

Page 158: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-160 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Función COUNTUso de la Función COUNT

COUNT(COUNT(exprexpr) devuelve el nº de registros ) devuelve el nº de registros “no nulos” en una tabla.“no nulos” en una tabla.COUNT(COUNT(exprexpr) devuelve el nº de registros ) devuelve el nº de registros “no nulos” en una tabla.“no nulos” en una tabla.

SQL> SELECT COUNT(comm) 2 FROM emp 3 WHERE deptno = 30;

COUNT(COMM)----------- 4

Page 159: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-161 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Funciones de Grupo y Val. NulosFunciones de Grupo y Val. Nulos

Las Funciones de Grupo ignoran los Las Funciones de Grupo ignoran los valores nulos de las columnas.valores nulos de las columnas.Las Funciones de Grupo ignoran los Las Funciones de Grupo ignoran los valores nulos de las columnas.valores nulos de las columnas.

SQL> SELECT AVG(comm) 2 FROM emp;

AVG(COMM)--------- 550

Page 160: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-162 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Función NVL con Funciones de Grupo

Uso de la Función NVL con Funciones de Grupo

La Función NVL fuerza a las funciones de La Función NVL fuerza a las funciones de grupo a incluir valores nulos (null).grupo a incluir valores nulos (null).La Función NVL fuerza a las funciones de La Función NVL fuerza a las funciones de grupo a incluir valores nulos (null).grupo a incluir valores nulos (null).

SQL> SELECT AVG(NVL(comm,0)) 2 FROM emp;

AVG(NVL(COMM,0))---------------- 157.14286

Page 161: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-163 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creando Grupos de Datos Creando Grupos de Datos

EMPEMP

““media demedia desalarios salarios en EMPen EMP

para cadapara cadadepartamento”departamento”

2916.66672916.6667

21752175

1566.66671566.6667

DEPTNO SAL--------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250

DEPTNO AVG(SAL)

------- ---------

10 2916.6667

20 2175

30 1566.6667

Page 162: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-164 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Creando Grupos de Datos: La Cláusula GROUP BY

Creando Grupos de Datos: La Cláusula GROUP BY

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

Divide los registros de una tabla en grupos Divide los registros de una tabla en grupos más pequeños, por medio de GROUP BY.más pequeños, por medio de GROUP BY.Divide los registros de una tabla en grupos Divide los registros de una tabla en grupos más pequeños, por medio de GROUP BY.más pequeños, por medio de GROUP BY.

Page 163: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-165 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Cláusula GROUP BY Uso de la Cláusula GROUP BY

Todas las columnas mencionadas en la Todas las columnas mencionadas en la SELECT que no son funciones de grupo, SELECT que no son funciones de grupo, tienen que estar en la cláusula GROUP BY.tienen que estar en la cláusula GROUP BY.

Todas las columnas mencionadas en la Todas las columnas mencionadas en la SELECT que no son funciones de grupo, SELECT que no son funciones de grupo, tienen que estar en la cláusula GROUP BY.tienen que estar en la cláusula GROUP BY.

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 GROUP BY deptno;

DEPTNO AVG(SAL)--------- --------- 10 2916.6667 20 2175 30 1566.6667

Page 164: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-166 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Cláusula GROUP BY Uso de la Cláusula GROUP BY

La columna referencia por GROUP BY no La columna referencia por GROUP BY no es necesario seleccionarla.es necesario seleccionarla.La columna referencia por GROUP BY no La columna referencia por GROUP BY no es necesario seleccionarla.es necesario seleccionarla.

SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY deptno;

AVG(SAL)--------- 2916.6667 21751566.6667

Page 165: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-167 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Agrupación por Más de Una Columna

Agrupación por Más de Una Columna

EMPEMP

““suma de salariossuma de salariosde EMP para de EMP para

cada oficio (job), cada oficio (job), agrupado poragrupado por

departamento”departamento”

DEPTNO JOB SAL

--------- --------- ---------

10 MANAGER 2450

10 PRESIDENT 5000

10 CLERK 1300

20 CLERK 800

20 CLERK 1100

20 ANALYST 3000

20 ANALYST 3000

20 MANAGER 2975

30 SALESMAN 1600

30 MANAGER 2850

30 SALESMAN 1250

30 CLERK 950

30 SALESMAN 1500

30 SALESMAN 1250

JOB SUM(SAL)

--------- ---------

CLERK 1300

MANAGER 2450

PRESIDENT 5000

ANALYST 6000

CLERK 1900

MANAGER 2975

CLERK 950

MANAGER 2850

SALESMAN 5600

DEPTNO

--------

10

10

10

20

20

20

30

30

30

Page 166: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-168 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Cláusula GROUP BY sobre Múltiples Columnas

Uso de la Cláusula GROUP BY sobre Múltiples Columnas

SQL> SELECT deptno, job, sum(sal) 2 FROM emp 3 GROUP BY deptno, job;

DEPTNO JOB SUM(SAL)--------- --------- --------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900...9 rows selected.

Page 167: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-169 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Consultas No válidasUsando Funciones de Grupo

Consultas No válidasUsando Funciones de Grupo

Cualquier columna o expresión en la Cualquier columna o expresión en la SELECT que no sea una función agregada, SELECT que no sea una función agregada, tiene que ser especificada en la cláusula tiene que ser especificada en la cláusula GROUP BY.GROUP BY.

Cualquier columna o expresión en la Cualquier columna o expresión en la SELECT que no sea una función agregada, SELECT que no sea una función agregada, tiene que ser especificada en la cláusula tiene que ser especificada en la cláusula GROUP BY.GROUP BY.

SQL> SELECT deptno, COUNT(ename) 2 FROM emp;

SQL> SELECT deptno, COUNT(ename) 2 FROM emp;

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

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

Columna NO especific

ada en la cláusula G

ROUP BY

Columna NO especific

ada en la cláusula G

ROUP BY

Columna NO especific

ada en la cláusula G

ROUP BY

Columna NO especific

ada en la cláusula G

ROUP BY

Page 168: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-170 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Consultas No válidasUsando Funciones de Grupo

Consultas No válidasUsando Funciones de Grupo

• No puede usar una cláusula WHERE para restringir grupos.

• Utilice la cláusula HAVING para restringir grupos.

• No puede usar una cláusula WHERE para restringir grupos.

• Utilice la cláusula HAVING para restringir grupos.

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > 2000 4 GROUP BY deptno;

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > 2000 4 GROUP BY deptno;

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

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

No puede usar la cláusula W

HERE

No puede usar la cláusula W

HERE

para restri

ngir gru

pos

para restri

ngir gru

pos

No puede usar la cláusula W

HERE

No puede usar la cláusula W

HERE

para restri

ngir gru

pos

para restri

ngir gru

pos

Page 169: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-171 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Exclusión de Resultados de un Grupo

Exclusión de Resultados de un Grupo

““máximo salariomáximo salariopor departamentopor departamentomayor de 2900$”mayor de 2900$”

EMPEMP

50005000

30003000

28502850

DEPTNO SAL

--------- ---------

10 2450

10 5000

10 1300

20 800

20 1100

20 3000

20 3000

20 2975

30 1600

30 2850

30 1250

30 950

30 1500

30 1250

DEPTNO MAX(SAL)

--------- ---------

10 5000

20 3000

Page 170: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-172 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Exclusión de Resultados de un Grupo:

Cláusula HAVING

Exclusión de Resultados de un Grupo:

Cláusula HAVINGUse la cláusula HAVING para restringir grupos:Use la cláusula HAVING para restringir grupos:

– Los registros son agrupados.

– Se aplica la función de grupo.

– Los grupos que se corresponden con la cláusula HAVING se visualizan.

Use la cláusula HAVING para restringir grupos:Use la cláusula HAVING para restringir grupos:

– Los registros son agrupados.

– Se aplica la función de grupo.

– Los grupos que se corresponden con la cláusula HAVING se visualizan.

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

Page 171: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-173 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Cláusula HAVINGUso de la Cláusula HAVING

SQL> SELECT deptno, max(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING max(sal)>2900;

DEPTNO MAX(SAL)--------- --------- 10 5000 20 3000

Page 172: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-174 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de la Cláusula HAVINGUso de la Cláusula HAVING

SQL> SELECT job, SUM(sal) PAYROLL 2 FROM emp 3 WHERE job NOT LIKE 'SALES%' 3 GROUP BY job 4 HAVING SUM(sal)>5000 5 ORDER BY SUM(sal);

JOB PAYROLL--------- ---------ANALYST 6000MANAGER 8275

Page 173: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-175 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Anidamiento de Funciones de Grupo

Anidamiento de Funciones de Grupo

SQL> SELECT max(avg(sal)) 2 FROM emp 3 GROUP BY deptno;

MAX(AVG(SAL))------------- 2916.6667

Visualizar la máxima media de salarios por Visualizar la máxima media de salarios por departamento: departamento: Visualizar la máxima media de salarios por Visualizar la máxima media de salarios por departamento: departamento:

Page 174: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-176 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ResumenResumen

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

Page 175: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

SubconsultasSubconsultas

Page 176: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-178 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ObjetivosObjetivos

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Describir los tipos de problemas que las subconsultas pueden resolver.

• Definir subconsultas.

• Enumerar los tipos de subconsultas.

• Escribir subconsultas que afecten a un solo registro, o a más de uno.

Al completar esta lección, debería ser Al completar esta lección, debería ser capaz de hacer lo siguiente:capaz de hacer lo siguiente:

• Describir los tipos de problemas que las subconsultas pueden resolver.

• Definir subconsultas.

• Enumerar los tipos de subconsultas.

• Escribir subconsultas que afecten a un solo registro, o a más de uno.

Page 177: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-179 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de una Subconsulta para Resolver un Problema

Uso de una Subconsulta para Resolver un Problema

““¿Quién tiene un salario superior al de Jones?”¿Quién tiene un salario superior al de Jones?”““¿Quién tiene un salario superior al de Jones?”¿Quién tiene un salario superior al de Jones?”

“¿Qué empleados tienen un salario superior al salrio de Jones?”

Consulta Principal

??

“¿Cuál es el salario de Jones?”??

Subconsulta

Page 178: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-180 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

SubconsultasSubconsultas

• La subconsulta se ejecuta una vez y La subconsulta se ejecuta una vez y antes de la consulta principal.antes de la consulta principal.

• El resultado de la subconsulta es usado El resultado de la subconsulta es usado por la consulta principal externa.por la consulta principal externa.

SELECT select_listFROM tableWHERE expr operator

(SELECT select_list FROM table);

Page 179: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-181 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

2975

SQL> SELECT ename 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566);

Usando una SubconsultaUsando una Subconsulta

ENAME----------KINGFORDSCOTT

ENAME----------KINGFORDSCOTT

Page 180: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-182 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Guía para el Uso de Subconsultas

Guía para el Uso de Subconsultas

• Encierre las subconsultas entre paréntesis.

• Una subconsulta debe aparecer a la derecha del operador.

• No añada una cláusula ORDER BY a una subconsulta.

• Utilice operadores a nivel de fila para subconsultas que devuelvan solo una fila.

• Utilice operadores que actúan sobre varios registros para subconsultas que devuelvan más de una fila.

• Encierre las subconsultas entre paréntesis.

• Una subconsulta debe aparecer a la derecha del operador.

• No añada una cláusula ORDER BY a una subconsulta.

• Utilice operadores a nivel de fila para subconsultas que devuelvan solo una fila.

• Utilice operadores que actúan sobre varios registros para subconsultas que devuelvan más de una fila.

Page 181: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-183 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Tipos de SubconsultasTipos de Subconsultas• Subconsulta mono-registro• Subconsulta mono-registro

Cons. Principal

Subquery devuelvedevuelve

CLERKCLERK

• Subconsulta multi-registro• Subconsulta multi-registro

CLERKCLERKMANAGERMANAGER

Cons. Principal

Subquery devuelvedevuelve

• Subconsulta multi-columna• Subconsulta multi-columna

CLERK 7900CLERK 7900MANAGER 7698MANAGER 7698

Cons. Principal

Subquery devuelvedevuelve

Page 182: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-184 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Subconsultas Mono-registroSubconsultas Mono-registro

• Devuelven un único registro.

• Se utilizan operadores de comparación.

• Devuelven un único registro.

• Se utilizan operadores de comparación.

Operador

=

>

>=

<

<=

<>

Significado

Igual a

Mayor que

Mayor que o igual a

Menor que

Menor que o igual a

No igual a

Page 183: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-185 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Ejecución de Subc. Mono-registroEjecución de Subc. Mono-registro

CLERK

1100

ENAME JOB---------- ---------MILLER CLERK

ENAME JOB---------- ---------MILLER CLERK

SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE empno = 7369) 7 AND sal > 8 (SELECT sal 9 FROM emp 10 WHERE empno = 7876);

Page 184: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-186 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso de Funciones de Grupo en una Subconsulta

Uso de Funciones de Grupo en una Subconsulta

800

ENAME JOB SAL---------- --------- ---------SMITH CLERK 800

ENAME JOB SAL---------- --------- ---------SMITH CLERK 800

SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp);

Page 185: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-187 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

La Cláusula HAVING en Subconsultas

La Cláusula HAVING en Subconsultas

• El Servidor Oracle8 ejecuta primero las subconsultas.

• El Servidor Oracle8 devuelve el resultado a la cláusula HAVING de la consulta principal.

• El Servidor Oracle8 ejecuta primero las subconsultas.

• El Servidor Oracle8 devuelve el resultado a la cláusula HAVING de la consulta principal.

800

SQL> SELECT deptno, MIN(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING MIN(sal) > 5 (SELECT MIN(sal) 6 FROM emp 7 WHERE deptno = 20);

Page 186: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-188 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

¿Qué está mal en esta Sentencia?

¿Qué está mal en esta Sentencia?

ERROR:ORA-01427: single-row subquery returns more thanone row

no rows selected

ERROR:ORA-01427: single-row subquery returns more thanone row

no rows selected

SQL> SELECT empno, ename 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp 6 GROUP BY deptno);

““Oper

ador m

ono-regis

tro e

n subco

nsulta

multi

-regis

tro”

Operad

or mono-re

gistro

en s

ubconsu

lta m

ulti-re

gistro

Page 187: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-189 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

¿Funcionaría esta Sentencia?¿Funcionaría esta Sentencia?

no rows selectedno rows selected

La Subco

nsulta

NO d

evuel

ve re

gistro

s

La Subco

nsulta

NO d

evuel

ve re

gistro

sSQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE ename='SMYTHE');

Page 188: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-190 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Subconsultas Multi-registroSubconsultas Multi-registro

• Devuelven más de un registro.

• Use comparadores multi-registro.

• Devuelven más de un registro.

• Use comparadores multi-registro.

Operador

IN

ANY

ALL

Significado

Igual a los valores de cierta lista

Compara los valores con cada valor

devuelto por la subconsulta

Compara los valores con cada uno de los

valores devueltos por la subconsulta

Page 189: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-191 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador ANY en Uso del Operador ANY en

9508001100

1300

EMPNO ENAME JOB--------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN

EMPNO ENAME JOB--------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN

SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal < ANY 4 (SELECT sal 5 FROM emp 6 WHERE job = 'CLERK') 7 AND job <> 'CLERK';

Subconsultas Multi-registroSubconsultas Multi-registro

Page 190: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-192 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

Uso del Operador ALL en

Uso del Operador ALL en

2916.6667

2175

1566.6667

EMPNO ENAME JOB--------- ---------- --------- 7839 KING PRESIDENT 7566 JONES MANAGER 7902 FORD ANALYST 7788 SCOTT ANALYST

EMPNO ENAME JOB--------- ---------- --------- 7839 KING PRESIDENT 7566 JONES MANAGER 7902 FORD ANALYST 7788 SCOTT ANALYST

SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal > ALL 4 (SELECT avg(sal) 5 FROM emp 6 GROUP BY deptno)

Subconsultas Multi-registroSubconsultas Multi-registro

Page 191: Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002 Introducción

1-193 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002

ResumenResumen

Las Subconsulas resultan muy útiles Las Subconsulas resultan muy útiles cuando una consulta esta basada en cuando una consulta esta basada en valores que no conocemos.valores que no conocemos.

Las Subconsulas resultan muy útiles Las Subconsulas resultan muy útiles cuando una consulta esta basada en cuando una consulta esta basada en valores que no conocemos.valores que no conocemos.

SELECT select_listFROM tableWHERE expr operator

(SELECT select_list FROM table);