SQL
Parte II
Capítulos
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.

Sentencias Básicas de SQL
Restricción y Ordenamiento de Datos
Funciones ...
Capítulo 1
Sentencias Básicas de SQL
Parte II - SQL
Sentencias Básicas
de SQL

Restricción y
Ordenamiento de Datos

Funcio...
Objetivos
• Mostrar las capacidades que tienen las sentencias
SQL
• Ejecutar algunas sentencias básicas
• Diferenciar entr...
SQL
(Structured Query Language)
• Es un Lenguaje Estructurado de Consultas
• Permite la comunicación con el DBMS y tiene l...
Sentencias SQL
Sentecias
SQL

Re cuperación
de Datos
SELECT

Le nguaje de
M anipulación
de Datos
(DML)
INSERT
UPDATE
DELET...
Características de una Sentencia
SELECT
Selección

Tabla 1

Tabla 1

Proyección

Join

Tabla 1

Tabla 2
Estructura de una Sentencia SQL
SELECT [distinct] {*| columnas [alias]| ...}
FROM tabla
[WHERE condicion(es)];

• SELECT i...
Seleccionando Columnas
• Se pueden mostrar todas las columnas de una tabla
usando el asterisco (*)
SQL>
2

SELECT *
FROM e...
Seleccionando Columnas
• Para seleccionar columnas específicas se tiene
que especificar en la parte del SELECT los
nombres...
Definición de una Columna Alias
• Renombra el título de una columna
• Es útil con cálculos
• Es lo que sigue después del n...
Columnas Alias
SQL>

SELECT nombre “Nombre”, salario “Sueldo”,

2

lugar_nac “Lugar de Nacimiento”

3

FROM empleados ;
No...
Definición de una Tabla Alias
• Renombra el título de una tabla
• Es un sobrenombre que se le da a una tabla y que
debe se...
Tablas Alias
SQL>

SELECT emp.nombre, emp.apellido,

2

emp.salario, emp.lugar_nac

3

FROM empleados emp

4

WHERE emp.lu...
Definición del Valor NULL
• NULL es un valor desconocido o inaplicable
• NULL no es lo mismo que cero tampoco un espacio
e...
Tipos de Datos
Las columnas pueden ser de los siguientes tipos de
datos:
Tipo Dato

Descripción

NUMBER(p,s)

Valor del nu...
Tipo Number(p,e)
• Donde p (precisión) es el numero total de dígitos,
máximo 38 dígitos de precisión y e (escala) indica
d...
Expresiones Aritméticas
Se pueden crear expresiones aritméticas sobre
Números y Fechas (solo + y -) usando operadores
arit...
Operadores Aritméticos
SQL>
2

SELECT nombre, salario, salario+20
FROM empleados;

NOMBRE
SALARIO
SALARIO+20
-------------...
Tipo Varchar2(s)
• Permite almacenar cadenas de caracteres de
longitud s
• La longitud es variable a diferencia del tipo C...
Operador Concatenación
• Permite concatenar dos o más cadenas de caracteres
• Es representado por dos líneas verticales (|...
Funcion To_Char
• Convierte un número o fecha a una cadena de
caracteres VARCHAR2 de acuerdo al formato
especificado en la...
Cadena de Caracteres Literales
• Un literal es un valor explícito (numérico, caracter,
cadena o booleano) que no esta repr...
Cadena de Caracteres Literales
SQL>
2
3
4

SELECT nombre||’ ’||’tiene un
salario de’||’ ’||salario
AS “Detalle de Empleado...
Tipo Date
• Almacena una fecha válida según el formato
establecido en una máscara
• Fecha y tiempo comprendida entre el 1 ...
Funcion To_Date
• Convierte una cadena de caracteres representando una
fecha a un valor fecha de acuerdo al formato especi...
Filas Duplicadas
Los resultados obtenidos de las consultas son todas las
filas, incluyendo duplicados
SQL>SELECT lugar_nac...
Eliminación de Filas Duplicadas
Se pueden eliminar las filas duplicadas escribiendo
DISTINCT en la cláusula SELECT
SQL>
2
...
SQL*Plus
• SQL*Plus es una herramienta de Oracle que
reconoce y acepta las sentencias SQL en el Servidor
Oracle para su ej...
Capacidades de SQL*Plus
•
•
•
•
•

Describe la estructura de las tablas
Permite ejecutar sentencias SQL
Guarda y añade sen...
Interacción entre SQL y SQL*Plus
Sentencias SQL

Sentencias SQL

Buffer

Servidor
BD

SQL*Plus

Comandos
SQL*Plus

Resulta...
Sentencias SQL Vs. Comandos
SQL*Plus
SQL
• Un lenguaje
• ANSI standard
• Palabras reservadas no
pueden ser abreviadas
• Se...
Ingreso SQL*Plus
• Desde un Ambiente Windows:

• Desde una línea de comandos:
sqlplus[username[/password[@database]]]
Mostrando la Estructura de las
Tablas
Para describir la estructura de una tabla se usa el
comando de SQL*Plus DESCRIBE

DE...
Mostrando la Estructura de las
Tablas
SQL>

DESCRIBE empleados;

Name
Null?
Type
-----------------------------------------...
Salida de SQL*Plus
• Para salir de SQL*Plus se tiene el comando EXIT
SQL> EXIT;
Capítulo 2
Restricción y Ordenamiento de Datos
Parte II - SQL
Sentencias Básicas
de SQL

Restricción y
Ordenamiento de Dat...
Objetivos
• Limitar las filas recuperadas de la ejecución de una
consulta
• Ordenar las filas recuperadas de la ejecución ...
Uso de la Cláusula WHERE
•

Permite seleccionar determinadas filas de una tabla
que cumplan con una condición
SELECT [dist...
Uso de la Cláusula WHERE
•

La cláusula WHERE debe de estar inmediatamente
después de la cláusula FROM
SQL>
2
3

SELECT no...
Uso de la Cláusula WHERE
•

Puede estar compuesta por varias condiciones
SQL>
2
3
4

SELECT nombre, apellido, salario
FROM...
Condición(es) en el WHERE
•

Una condición en la cláusula WHERE esta
compuesta por:
Condición

Columna

•

•

Operador de
...
Operadores de Comparación
Los operadores de comparación son usados en
condiciones que comparan una expresión con otra
Oper...
Otros Operadores de Comparación
• BETWEEN
...AND...
• IN (lista)

• LIKE

se usa para mostrar las filas
basándose en un ra...
Operador BETWEEN…AND…
•
•

Se usa para recuperar filas basándose en un rango
de valores
En el rango se tiene que especific...
Operador IN (lista)
•
•

Se usa para ir probando o comparando con los
valores de la lista
Este operador puede ser usado co...
Operador LIKE
•

Se usa para realizar búsquedas sensibles
- % Equivale a una cadena de caracteres de longitud
comprendida ...
Operador IS NULL
•
•

Se usa para probar con valores nulos
No se podría usar un = porque un valor nulo no es
mismo que un ...
Operadores Lógicos
Un operador lógico combina el resultado de dos
condiciones para producir un solo resultado
basándose en...
Operador AND
•

Retorna TRUE si ambas condiciones son
verdaderas
SQL>
2
3
4

SELECT nombre, apellido, salario
FROM emplead...
Operador OR
•

Retorna TRUE si por lo menos una condición es
verdadera

SQL>
2
3
4

SELECT nombre, apellido, lugar_nac, su...
Operador NOT
•

Retorna TRUE si la condición es falsa

SQL>
2
3

SELECT nombre, apellido, lugar_nac
FROM empleados
WHERE l...
Uso de la Cláusula ORDER BY
• Ordena el resultado obtenido al ejecutar una consulta
- ASC: en orden ascendente, por defect...
Uso de la Cláusula ORDER BY
• La cláusula ORDER BY siempre debe de estar al final de
una sentencia SELECT
• Se puede orden...
Uso de la Cláusula ORDER BY
SQL>
2
3

SELECT nombre, apellido, salario
FROM empleados
ORDER BY salario;

SQL>
2
3

SELECT ...
Capítulo 3

Funciones de SQL
Parte II - SQL
Sentencias Básicas
de SQL

Restricción y
Ordenamiento de Datos

Funciones de S...
Objetivos
• Mostrar los dos tipos de funciones disponibles en
SQL
• Usar funciones para manipular caracteres, números
y fe...
Funciones de SQL
• Las funciones son una característica potente de SQL, y
pueden ser usadas para:
-

Realizar cálculos sob...
Funciones para una Fila
•
•
•
•
•

Aceptan varios argumentos y retornan solo un valor
Trabajan con cada fila resultante
Re...
Funciones para una Fila
Funciones para una Fila

Caracteres

Conversiones
Números

Fechas
Funciones para Manipular Caracteres
Se dividen en:
• Funciones para Conversión de MayúsculasMinúsculas
- LOWER
- UPPER
- I...
Funciones para Convertir
Mayúsculas-Minúsculas
Función

Descripción

LOWER(columna|expresion)

Convierte una cadena de
car...
Funciones para Convertir
Mayúsculas-Minúsculas
Función
LOWER(‘CADENA caracter’)
UPPER(‘CADENA caracter’)
INITCAP(‘CADENA c...
Funciones para Manipulación de
Cadenas de Caracteres
Función

Descripción

CONCAT(columna1|expresion1,
columna2|expresion2...
Funciones para Manipulación de
Cadenas de Caracteres
Función
CONCAT(‘Cadena’, ‘Grande’)
SUBSTR(‘Cadena’, 1, 3)
LENGTH(‘Cad...
Funciones para Manipular Números
Función
ROUND(columna|
expresión, n)

TRUNC(columna|
expresión, n)

MOD (m , n)

Descripc...
Funciones para Manipular Números
Función
ROUND(24.416, 2)

Resultado
24.42

TRUNC(24.416, 2)

24.41

MOD(150, 20)

10
Funciones para Manipular Fechas
Función
MONTHS_BETWEEN
ADD_MONTHS
NEXT_DAY
LAST_DAY
ROUND

TRUNC

Descripción
Numero de me...
Funciones para Manipular Fechas
• MONTHS_BETWEEN(fecha1, fecha2)
Encuentra el número de meses entre la fecha1 y la fecha2....
Funciones para Manipular Fechas
Función

Resultado

MONTHS_BETWEEN(’01-SEP-95’,’11-JAN-94’) 19.6774194

ADD_MONTHS(’05-JAN...
Funciones para Manipular Fechas
• ROUND(fecha[,’fmt’])
Retorna la fecha redondeada a la unidad especificada por el
formato...
Funciones para Manipular Fechas
Función

Resultado

ROUND(’25-JUL-98’,’MONTH’)

’01-AUG-98’

ROUND(’25-JUL-98’,’YEAR’)

’0...
Funciones para Realizar Conversiones
Función

Descripción

TO_CHAR(numero|fecha[,’fmt’]) Convierte un numero o fecha a una...
Funciones para Realizar Conversiones
Función

Resultado

TO_CHAR(8500, ’99,999’)

‘8,500’

TO_CHAR(’05-NOV-99’, ’DD-MM-YYY...
Funciones Anidadas
• Las funciones pueden estar anidadas en cualquier
nivel
• Las funciones anidadas son evaluadas desde d...
Funciones Anidadas
Función

Resultado

ADD_MONTHS(TO_DATE(’05-JAN-99’,’DD-MON-YY’ ),6)

‘05-JUL-99’

TO_CHAR(NEXT_DAY(’14-...
Capítulo 4
Obteniendo Datos desde Múltiples Tablas
Parte II - SQL
Sentencias Básicas
de SQL

Restricción y
Ordenamiento de...
Objetivos
• Escribir sentencias SQL para acceder a datos de
mas de una tabla usando joins internos y nonequijoins
• Ver lo...
Obteniendo Datos desde
Múltiples Tablas
EMPLEADOS

SUCURSALES

COD
NOMBRE APELLIDO ...
SUC_COD
---------------------------...
Uso de la Sentencia JOIN
Se usa un join para realizar una consulta a más de
una tabla
SELECT tabla1.columna, tabla2.column...
Tipos de Join
Join
Join Interno

Descripción
=

Non-Equijoin
Join Externo
Self Join

BETWEEN
(+)
Con una tabla
Join Interno
EMPLEADOS

SUCURSALES

COD
NOMBRE APELLIDO ...
SUC_COD
------------------------------------5
JUAN
PEREZ
3
7
M...
Join Interno
SQL>
2
3
4
5

SELECT empleados.nombre, empleados.apellido
empleados.suc_cod, sucursales.cod,
sucursales.descr...
Non-Equijoin
EMPLEADOS

BONOS

COD
NOMBRE APELLIDO SALARIO FECHA_NAC
...
----------------------------------------------5
J...
Non-Equijoin
SQL>
2
3
4
5

SELECT e.nombre, e.apellido, e.fecha_nac,
e.salario, b.categoria, b.aumento
FROM empleados e, b...
Join Externo
EMPLEADOS

SUCURSALES

COD
NOMBRE APELLIDO ...
SUC_COD
------------------------------------5
JUAN
PEREZ
3
7
M...
Join Externo
• Se usa el join externo para ver también las filas que
no satisfacen la condición
• Es representado con el s...
Self join
CLIENTE(TITULAR)

CLIENTE(AUTORIZADO)

COD CI
NOMBRE APELLIDO ... CLI_COD
--------------------------------------...
Self join
SQL>
2
3
4

SELECT autorizado.nombre||’ es autorizado por
’||titular.nombre
FROM clientes titular, clientes auto...
Capítulo 5
Obteniendo Datos Usando Funciones de Agrupación
Parte II - SQL
Sentencias Básicas
de SQL

Restricción y
Ordenam...
Objetivos
•
•
•
•

Identificar las funciones de agrupación disponibles
Describir el uso de las funciones de agrupación
Agr...
¿Qué son las Funciones de
Agrupación?
• Las funciones de agrupación operan sobre conjuntos
de filas para dar un resultado ...
Tipos de Funciones de Agrupación
Función

Descripción

AVG([DISTINCT|ALL]n)

Valor promedio de n,
ignora valores nulos

CO...
Tipos de Funciones de Agrupación
Función

Descripción

MIN([DISTINCT|ALL]expr)

Calcula el valor mínimo de
una columna

ST...
Funciones AVG y SUM
Se pueden usar las funciones AVG y SUM para datos
numéricos
SQL>
2
3

SELECT AVG(salario), MAX(salario...
Funciones MIN y MAX
Se pueden usar las funciones MIN y MAX para
cualquier tipo de dato
SQL>
2

SELECT MIN(fecha_nac), MAX(...
Función COUNT
COUNT(*) devuelve el número de filas en una tabla.
Tiene dos formatos:
SQL>
2
3

COUNT(*)
COUNT(expr)

inclu...
Creando Grupos de Datos
EMPLEADOS
COD
...
SALARIO
SUC_COD
------------------------------7
350
2
15
120
2
5
500
3
18
400
3
...
Uso de la Cláusula GROUP BY
SELECT columna, funcion_agrupacion(columna)
FROM tabla
[WHERE condicion]
[GROUP BY expresion_a...
Uso de la Cláusula GROUP BY
Todas las columnas en la lista SELECT que no estén
entre funciones de agrupación deben de esta...
Uso de la Cláusula HAVING
Se usa la cláusula HAVING para restringir los grupos
obtenidos
- Primero las filas son agrupadas...
Uso de la Cláusula HAVING
SQL>
2
3
4

SELECT suc_cod, MAX(salario)
FROM empleados
GROUP BY suc_cod
HAVING MAX(salario)> 37...
Funciones de Agrupación Anidadas
Así como las funciones de SQL, las funciones de
agrupación pueden ser anidadas
SQL>
2
3

...
Capítulo 6
Sub-Consultas
Parte II - SQL
Sentencias Básicas
de SQL

Restricción y
Ordenamiento de Datos

Funciones de SQL

...
Objetivos
• Describir que es una sub-consulta
• Tipos de sub-consultas
• Escribir algunos ejemplos
Sub-Consultas
Es una sentencia SELECT que esta dentro de una
cláusula de otra sentencia SELECT
SELECT lista_select
FROM ta...
Uso de una Sub-Consulta
SQL>
2
3
4
5
6

SELECT nombre
FROM empleados
120
WHERE salario >
( SELECT salario
FROM empleados
W...
Uso de una Sub-Consulta
SQL>
2
3
4
5

SELECT nombre
FROM empleados e,
( SELECT salario
FROM empleados
WHERE cod = ’9’)

6
...
Al usar una Sub-Consulta
• Encerrar las sub-consultas entre paréntesis
• Colocar las sub-consultas del lado derecho del
op...
Clases de Sub-Consultas
• Sincrónicas
Existen columnas de la consulta principal en la sub-consulta
SELECT e.nombre, ...
Ex...
Clases de Sub-Consultas
• Asincrónicas
Ambas consultas son independientes
SELECT ...
FROM empleados
WHERE .... >
(

Son in...
Tipos de Sub-Consultas
• Sub-Consultas que devuelven una fila
Consulta Principal
Retorna
Sub Consulta

JUAN

• Sub-Consult...
Sub-Consultas que devuelven
una fila
• Retornan solo una fila
• Se pueden usar los siguientes operadores:
Operador

Descri...
Ejecutando Sub-Consultas que
devuelven una fila
SQL>
2
3
4
5
6
7
8
9
10

SELECT nombre, lugar_nac
FROM empleados
COCHABAMB...
Sub-Consultas que devuelven
más de una fila
• Retornan más de una fila
• Se puede usar los siguientes operadores:
Operador...
Ejecutando Sub-Consultas que
devuelven más de una fila
SQL>
2
3
4
5
6

SELECT nombre, salario, suc_cod
FROM empleados
WHER...
Ejecutando Sub-Consultas que
devuelven más de una fila
Para los casos en que se usen los operadores ANY y
ALL, el comporta...
Sub-Consultas que devuelven
más de una columna
• Retornan más de una columna
SELECT columna, columna, ...
FROM tabla
WHERE...
Ejecutando Sub-Consultas que
devuelven más de una columna
SQL>
2
3
4
5
6
7

SELECT cod, descr, costo
FROM videos
WHERE (co...
Capítulo 7
Manejo de los Valores de Entrada con SQL*Plus
Parte II - SQL
Sentencias Básicas
de SQL

Restricción y
Ordenamie...
Objetivos
• Escribir consultas que requieren una variable de
entrada
• Usar algunos caracteres especiales para la
sustituc...
Sustitución de Variables
• Se usa la sustitución de variables en SQL*Plus para
almacenar temporalmente valores
• Se puede ...
Uso de & para la Sustitución de
Variables
Se usa el ampersand(&) antecediendo a una
variable para permitir al usuario el i...
Sustitución de Variables con
valores de tipo Fecha y Caracter
Se tiene que usar comillas simples para sustituir
valores de...
Especificando nombres de
columnas, expresiones y textos
en tiempo de ejecución
Se puede usar la sustitución de variables p...
Especificando nombres de
columnas, expresiones y textos
en tiempo de ejecución
SQL>
2
3
4

SELECT nombre, apellido, lugar_...
Uso de && para la Sustitución
de Variables
Se usa el doble ampersand(&&) si se quiere reusar
el valor de una variable sin ...
Definición de Variables de
Usuario
• Se puede predefinir variables usando uno de los
siguientes comandos:
- DEFINE: crea u...
Definición de Variables de
Usuario
Comando

Descripción

DEFINE variable = valor

Crea una variable de usuario de
tipo CHA...
Comando ACCEPT
• Crea una entrada de datos personalizada cuando el
usuario ingrese el valor a una variable
• Oculta el ing...
Comando ACCEPT
ACCEPT columna PROMPT ’Ingrese el Lugar de Nacimiento: ’

SELECT nombre, apellido, lugar_nac
FROM empleados...
Comandos DEFINE y UNDEFINE
• Una variable se mantiene definida hasta que se haga
lo siguiente:
- Se use el comando UNDEFIN...
Usando el Comando DEFINE
• Crear una variable para mantener el lugar de
nacimiento:
SQL> DEFINE lugar = cochabamba

SQL> D...
Usando el Comando UNDEFINE
• Para borrar una variable, se usa el comando
UNDEFINE
SQL> UNDEFINE lugar
SQL> DEFINE
symbol l...
Capítulo 8
Manipulando Datos
Parte II - SQL
Sentencias Básicas
de SQL

Restricción y
Ordenamiento de Datos

Funciones de S...
Objetivos
•
•
•
•
•

Describir cada sentencia DML
Insertar filas en una tabla
Actualizar las filas de una tabla
Eliminar f...
Lenguaje de Manipulación de Datos
(DML)
• Las sentencias DML permiten:
- Insertar nuevas filas en una tabla
- Modificar da...
La Sentencia INSERT
• Para añadir nuevas filas en una tabla se debe de
usar la sentencia INSERT
INSERT INTO tabla [(column...
Uso de la Sentencia INSERT
• Se inserta una nueva fila conteniendo valores para
cada columna
• La lista de valores a inser...
Uso de la Sentencia INSERT
SQL> INSERT INTO clientes(cod, ci, nombre, apellido,
2
telefono, cli_cod)
3
VALUES (12,’4578213...
Insertando filas con Valores Nulos
• Método Implícito: se omite la columna de la lista de
columnas
SQL> INSERT INTO client...
Insertando Valores usando
Sustitución de Variables
SQL> INSERT INTO clientes(cod, ci, nombre, apellido,
2
telefono, cli_co...
La Sentencia UPDATE
• Para modificar las filas de una tabla se usa la
sentencia UPDATE
UPDATE
SET
[WHERE

tabla
columna = ...
Uso de la Sentencia UPDATE
• Una fila específica o varias filas pueden ser
modificadas cuando se especifica la cláusula WH...
La Sentencia DELETE
• Para eliminar las filas existentes en una tabla se usa
la sentencia DELETE
DELETE [FROM] tabla
[WHER...
Uso de la Sentencia DELETE
• Una fila específica o varias filas pueden ser eliminadas
cuando se especifica la cláusula WHE...
Transacciones en la Base de Datos

• Consiste en una de las siguientes sentencias:
- Sentencias DML que realizan cambios e...
Transacciones en la Base de Datos
• Comienza cuando la primera sentencia SQL
ejecutable es ejecutada
• Termina con uno de ...
Ventajas de las Sentencias
COMMIT y ROLLBACK
• Aseguran la consistencia de los datos
• Se pueden ver los cambios en los da...
Control de Transacciones
Sentencia

Descripción

COMMIT

Termina la transacción actual y hace
todos los cambios en los dat...
Control de Transacciones
Transacción
INSERT

COMM IT

UPDATE

Savepoint A

INSERT

DELETE

Savepoint B

ROLLBACK to Savepo...
Capítulo 9
Creación y Manipulación de Tablas
Parte II - SQL
Sentencias Básicas
de SQL

Restricción y
Ordenamiento de Datos...
Objetivos
• Describir los objetos más importantes de la Base de
Datos
• Crear tablas
• Modificar la estructura de las tabl...
Objetos de la Base de Datos
Objeto

Descripción

Tabla

Unidad básica de almacenamiento
compuesta por filas y columnas

Vi...
Sentencia CREATE TABLE
• Para crear una tabla se usa la sentencia CREATE
TABLE
• Para usar esta sentencia se debe tener:
-...
Uso de la Sentencia CREATE TABLE
• Creación de una tabla
CREATE TABLE empleados
(
cod
VARCHAR2 (6) NOT NULL,
nombre
VARCHA...
Tablas en la Base de Datos Oracle
• Tablas de Usuario (User Tables)
- Colección de tablas creadas y mantenidas por el usua...
Sentencia ALTER TABLE
• Se puede usar la sentencia ALTER TABLE para:
- Añadir una nueva columna
- Modificar una columna ex...
Añadiendo una Columna
• Se usa la cláusula ADD para añadir columnas
SQL> ALTER TABLE empleados
2

ADD

(est_civil VARCHAR2...
Modificando una Columna
• Se puede cambiar el tipo de dato de una columna,
longitud y valor por defecto usando la cláusula...
Sentencia DROP TABLE
• Cuando se quiera eliminar una tabla se usa la
sentencia DROP TABLE
DROP TABLE tabla;

• Todos los d...
Cambio de Nombre a un Objeto
• Para cambiar el nombre a una tabla, vista, secuencia o
sinónimo se ejecuta la sentencia REN...
Sentencia TRUNCATE TABLE
• Con esta sentencia se puede:
- Remover todas las filas de una tabla
- Liberar el espacio de alm...
Capítulo 10
Restricciones de Integridad
Parte II - SQL
Sentencias Básicas
de SQL

Restricción y
Ordenamiento de Datos

Fun...
Objetivos
• Describir restricciones de integridad
• Crear y mantener restricciones de integridad
Restricciones de Integridad
• Las restricciones de integridad (constraints) aseguran
la consistencia de los datos a nivel ...
Tipos de Restricciones de
Integridad
Restricción

Descripción

NOT NULL

Especifica que para una columna no contenga
valor...
Creación de una Restricción de
Integridad
CREATE TABLE [esquema.] tabla
(columna tipo_dato [DEFAULT expr]
[constraint_colu...
Creación de una Restricción de
Integridad
• Restricción de Integridad a nivel de columna
columna [CONSTRAINT nombre_constr...
Restricción de Integridad NOT NULL
Asegura que valores nulos no sean ingresados en las
columnas
EMPLEADOS
COD

NOMBRE

APE...
Restricción de Integridad NOT NULL
Definida solo para nivel de columnas
SQL> CREATE TABLE empleados
(
2
cod
VARCHAR2 (6) N...
Restricción de Integridad UNIQUE
Restricción UNIQUE

CATEGORIAS
COD

DESCR

1

DRAMA

2

ACCION

3

COMEDIA

4

TERROR

5
...
Restricción de Integridad UNIQUE
Definida para ambos niveles, tanto a nivel de tablas
como también a nivel de columnas
SQL...
Restricción de Integridad
PRIMARY KEY
CATEGORIAS
PRIMARY KEY
COD

DESCR

1

DRAMA

2

ACCION

3

COMEDIA

4

TERROR

5

SU...
Restricción de Integridad
PRIMARY KEY
Definida para ambos niveles, tanto a nivel de tablas
como también a nivel de columna...
Restricción de Integridad
FOREIGN KEY
SUCURSALES
COD

DESCR

DIRECCION

2

NORTE

C. VENUS 28

3

PRIMARY KEY

...

CENTRA...
Restricción de Integridad
FOREIGN KEY
Definida para ambos niveles, tanto a nivel de tablas
como también a nivel de columna...
Restricción de Integridad
FOREIGN KEY
• FOREIGN KEY
Define la columna en la tabla hija
• REFERENCES
Identifica la tabla y ...
Restricción de Integridad
CHECK
Define una condición que cada fila debe satisfacer
..., cod VARCHAR2(6) NOT NULL,
CONSTRAI...
Adicionar Restricciones de
Integridad
ALTER TABLE tabla

ADD [CONSTRAINT constraint] tipo (columna);

• Se puede adicionar...
Eliminar Restricciones de
Integridad
ALTER TABLE tabla

DROP PRIMARY KEY | UNIQUE (columna) |
CONSTRAINT constraint [CASCA...
Deshabilitar Restricciones de
Integridad
ALTER TABLE tabla

DISABLE CONSTRAINT constraint [CASCADE];

• Se ejecuta la cláu...
Habilitar Restricciones de
Integridad
ALTER TABLE tabla

ENABLE CONSTRAINT constraint;

• Para habilitar una restricción d...
Visualizar Objetos de la Base
de Datos
Se pueden mostrar los objetos creados en la Base de
Datos accediendo a las tablas d...
Visualizar Restricciones de
Integridad
La consulta a la tabla USER_CONSTRAINTS muestra
todas las definiciones y nombres de...
Capítulo 11
Vistas
Parte II - SQL
Sentencias Básicas
de SQL

Restricción y
Ordenamiento de Datos

Funciones de SQL

Obteni...
Objetivos
•
•
•
•
•

Definir una vista
Crear vistas
Recuperar datos a través de una vista
Modificar vistas
Eliminar una vi...
¿Qué es una Vista?
TABLA EMPLEADOS
COD

NOMBRE

APELLIDO

LUGAR_NAC

...

SUC_COD

5

JUAN

PEREZ

COCHABAMBA

3

7

MARIA...
¿Porqué usar Vistas?
•
•
•
•

Restringir el acceso a la Base de Datos
Hacer las consultas complejas mas sencillas
Permitir...
Vistas Simples y Complejas
Característica

Vistas Simples

Vistas Complejas

Numero de Tablas

Una

Una o mas

Contienen F...
Creación de Vistas
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW vista

[(alias[, alias]...)]
AS sub-consulta
[WITH CHECK OPTIO...
Creación de Vistas
SQL> CREATE VIEW empleadosvi

2
3
4

AS SELECT cod, nombre, apellido
FROM empleados
WHERE suc_cod = ’7’...
Modificación de Vistas
• Se puede modificar una vista usando el comando
CREATE OR REPLACE VIEW
• Los alias de columnas en ...
Creación de Vistas
Complejas
Una vista compleja contiene funciones de agrupación
para mostrar los valores de dos tablas
SQ...
Reglas para realizar operaciones
DML en Vistas
• Se pueden realizar operaciones DML sobre vistas
simples
• No se pueden el...
Reglas para realizar operaciones
DML en Vistas
• No se pueden modificar los datos en una vista si ésta
contiene lo siguien...
Reglas para realizar operaciones
DML en Vistas
• No se pueden añadir datos si existen:
-

Funciones de agrupación
Una cláu...
Cláusula WITH CHECK OPTION
Se puede asegurar que operaciones DML con la vista
estén dentro el dominio de ésta usando la cl...
Denegando Operaciones DML
• Se puede asegurar que operaciones DML no ocurran
usando la opción WITH READ ONLY
• Cualquier i...
Eliminación de Vistas
Al eliminar una vista no se pierden los datos porque la
vista esta basada en las tablas de la Base d...
Capítulo 12
Secuencias, Índices y Sinónimos
Parte II - SQL
Sentencias Básicas
de SQL

Restricción y
Ordenamiento de Datos
...
Objetivos
•
•
•
•

Definir secuencias, índices y sinónimos
Crear, mantener y usar secuencias
Crear, mantener y usar índice...
¿Qué es una Secuencia?
• Genera automáticamente números únicos
• Es un objeto compartible
• Es usado generalmente para cre...
Sentencia CREATE SEQUENCE
Define una secuencia para generar automáticamente
números secuenciales
CREATE SEQUENCE secuencia...
Sentencia CREATE SEQUENCE
SQL> CREATE
2
3
4
5
6

SEQUENCE sec_emp
INCREMENT BY 1
START WITH 91
MAXVALUE 100
NOCACHE
NOCYCL...
Pseudocolumnas NEXTVAL y
CURRVAL
• NEXTVAL retorna el siguiente valor de secuencia
disponible
- El valor que retorna es ún...
Reglas para usar NEXTVAL y
CURRVAL
• Se puede usar NEXTVAL y CURRVAL en:
- La lista SELECT de una sentencia SELECT que no ...
Reglas para usar NEXTVAL y
CURRVAL
• No se puede usar NEXTVAL y CURRVAL en:
- La lista SELECT de una vista
- Una sentencia...
Sentencia ALTER SEQUENCE
Permite cambiar el valor de incremento, valor máximo,
valor mínimo, opción cycle u opción cache
A...
Sentencia ALTER SEQUENCE
• Para modificar una secuencia se debe ser el dueño o
tener privilegios ALTER para la secuencia
•...
Sentencia DROP SEQUENCE
• Para eliminar una secuencia del diccionario de datos se
usa la sentencia DROP SEQUENCE
• Una vez...
¿Qué es un Indice?
• Es un objeto esquema
• Es usado por el Servidor Oracle para acelerar la
recuperación de filas usando ...
¿Cómo son creados los Indices?
• Automáticamente
Un índice único es creado automáticamente cuando se
define restricciones ...
Sentencia CREATE INDEX
• Se puede crear un índice para una o más columnas
CREATE INDEX indice
ON tabla (columna [, columna...
Cuando crear un Indice
• La columna es usada frecuentemente en la cláusula
WHERE o en una condición de join
• La columna c...
Cuando no crear un Indice
• La tabla es pequeña
• Las columnas no son a menudo usadas como una
condición de consulta
• La ...
Sentencia DROP INDEX
• Elimina un índice del diccionario de datos
• Para eliminar un índice se debe de ser el dueño del
ín...
Sinónimos
Se puede simplificar el acceso a objetos creando un
sinónimo (otro nombre para un objeto)
• Se puede hacer refer...
Creación y Eliminación de
Sinónimos
• Crear un nombre corto para la vista
EMP_SUCURSALES_VI
SQL> CREATE SYNONYM suc_vi
2
F...
Upcoming SlideShare
Loading in...5
×

Presentacións Sql mejorado

122

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
122
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Presentacións Sql mejorado

  1. 1. SQL Parte II
  2. 2. Capítulos 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Sentencias Básicas de SQL Restricción y Ordenamiento de Datos Funciones de SQL Obteniendo Datos desde Múltiples Tablas Obteniendo Datos usando Funciones de Agrupación Sub-Consultas Manejo de los Valores de Entrada con SQL*Plus Manipulando Datos Creación y Manipulación de Tablas Restricciones de Integridad Vistas Secuencias, Índices y Sinónimos
  3. 3. Capítulo 1 Sentencias Básicas de SQL Parte II - SQL Sentencias Básicas de SQL Restricción y Ordenamiento de Datos Funciones de SQL Obteniendo Datos desde Múltiples Tablas Obteniendo Datos Usando Funciones de Agrupación Sub-Consultas Manejo de los Valores de Entrada con SQL*Plus Manipulando Datos Creación y Manipulación de Tablas Restricciones de Integridad Vistas Secuencias, Indices y Sinónimos
  4. 4. Objetivos • Mostrar las capacidades que tienen las sentencias SQL • Ejecutar algunas sentencias básicas • Diferenciar entre las sentencias SQL y los comandos SQL*Plus
  5. 5. SQL (Structured Query Language) • Es un Lenguaje Estructurado de Consultas • Permite la comunicación con el DBMS y tiene las siguientes ventajas: – Eficiente – Fácil de aprender y usar – Funcionalmente completo (SQL permite definir, recuperar y manipular los datos en las tablas)
  6. 6. Sentencias SQL Sentecias SQL Re cuperación de Datos SELECT Le nguaje de M anipulación de Datos (DML) INSERT UPDATE DELETE Le nguaje de De finición de Datos (DDL) CREATE ALTER DROP RENAM E TRUNCATE Control de Transacciones COMM IT ROLLBACK SAVEPOINT Le nguaje de Control de Cambios (DCL) GRANT REVOKE
  7. 7. Características de una Sentencia SELECT Selección Tabla 1 Tabla 1 Proyección Join Tabla 1 Tabla 2
  8. 8. Estructura de una Sentencia SQL SELECT [distinct] {*| columnas [alias]| ...} FROM tabla [WHERE condicion(es)]; • SELECT identifica que columnas (proyección) • FROM identifica que tabla (join) • WHERE restringe la consulta (selección, join)
  9. 9. Seleccionando Columnas • Se pueden mostrar todas las columnas de una tabla usando el asterisco (*) SQL> 2 SELECT * FROM empleados; SQL> 2 3 4 SELECT cod,nombre,apellido, salario, fecha_nac, lugar_nac, suc_cod FROM empleados; COD NOMBRE APELLIDO SALARIO FECHA_NAC LUGAR_NAC SUC_COD ------------------------------------------------------------5 JUAN PEREZ 500 12-NOV-70 COCHABAMBA 3 7 MARIA SILEZ 350 08-ABR-75 LA PAZ 2 9 RICARDO QUIROGA 120 25-JUN-77 COCHABAMBA 7
  10. 10. Seleccionando Columnas • Para seleccionar columnas específicas se tiene que especificar en la parte del SELECT los nombres de las columnas que interesan SQL> SELECT nombre, apellido 2 FROM empleados; NOMBRE APELLIDO ---------------------------------JUAN PEREZ MARIA SILEZ RICARDO QUIROGA
  11. 11. Definición de una Columna Alias • Renombra el título de una columna • Es útil con cálculos • Es lo que sigue después del nombre de una columna; opcionalmente se puede escribir AS entre el nombre de la columna y el alias • Requiere doble comilla si el alias contiene espacios o caracteres especiales
  12. 12. Columnas Alias SQL> SELECT nombre “Nombre”, salario “Sueldo”, 2 lugar_nac “Lugar de Nacimiento” 3 FROM empleados ; Nombre Sueldo Lugar de Nacimiento -------------------------------------------------JUAN 500 COCHABAMBA MARIA 350 LA PAZ RICARDO 120 COCHABAMBA
  13. 13. Definición de una Tabla Alias • Renombra el título de una tabla • Es un sobrenombre que se le da a una tabla y que debe ser único para toda la consulta • Es lo que sigue después del nombre de la tabla • Es útil cuando se quiera recuperar datos de más de una tabla
  14. 14. Tablas Alias SQL> SELECT emp.nombre, emp.apellido, 2 emp.salario, emp.lugar_nac 3 FROM empleados emp 4 WHERE emp.lugar_nac = ’COCHABAMBA’; NOMBRE APELLIDO SALARIO LUGAR_NAC -------------------------------------------------JUAN RICARDO GUSTAVO ... PEREZ QUIROGA HERRERA 500 120 300 COCHABAMBA COCHABAMBA COCHABAMBA
  15. 15. Definición del Valor NULL • NULL es un valor desconocido o inaplicable • NULL no es lo mismo que cero tampoco un espacio en blanco
  16. 16. Tipos de Datos Las columnas pueden ser de los siguientes tipos de datos: Tipo Dato Descripción NUMBER(p,s) Valor del numero tiene como máximo p dígitos y s dígitos para redondeo VARCHAR2(s) Valor de caracteres variable con longitud máxima de s DATE Fecha y tiempo comprendida entre el 1 de enero del 4712 A.C. y el 31 de diciembre del 9999 D.C. CHAR(s) Valor de caracteres con longitud máxima de s
  17. 17. Tipo Number(p,e) • Donde p (precisión) es el numero total de dígitos, máximo 38 dígitos de precisión y e (escala) indica donde se produce el redondeo • Contiene dígitos en el rango de 1.0x10-129 a 9.99x10124 • Acepta números positivos o negativos • Contiene punto decimal • Se los puede escribir con notación regular o científica
  18. 18. Expresiones Aritméticas Se pueden crear expresiones aritméticas sobre Números y Fechas (solo + y -) usando operadores aritméticos Operador Descripción + Adición - Sustracción * Multiplicación / División
  19. 19. Operadores Aritméticos SQL> 2 SELECT nombre, salario, salario+20 FROM empleados; NOMBRE SALARIO SALARIO+20 -----------------------------------JUAN 500 520 MARIA 350 370 RICARDO 120 140
  20. 20. Tipo Varchar2(s) • Permite almacenar cadenas de caracteres de longitud s • La longitud es variable a diferencia del tipo Char que es fija • Funciones – – – – Concatenación (||) To_Char Length ...
  21. 21. Operador Concatenación • Permite concatenar dos o más cadenas de caracteres • Es representado por dos líneas verticales (||) SQL> SELECT nombre||apellido AS “Nombres” 2 FROM empleados; Nombres -------------------------------- JUANPEREZ MARIASILEZ RICARDOQUIROGA
  22. 22. Funcion To_Char • Convierte un número o fecha a una cadena de caracteres VARCHAR2 de acuerdo al formato especificado en la máscara SQL> SELECT nombre, TO_CHAR(fecha_nac,’DD-MM-YY’) 2 FROM empleados; NOMBRE TO_CHAR(FECHA_NAC,’DD-MM-YY’) -------------------------------------------JUAN 12-11-70 MARIA 08-04-75 RICARDO 25-06-77
  23. 23. Cadena de Caracteres Literales • Un literal es un valor explícito (numérico, caracter, cadena o booleano) que no esta representado por un identificador • En el caso de un literal de cadena es una secuencia de caracteres encerrados entre comillas simples
  24. 24. Cadena de Caracteres Literales SQL> 2 3 4 SELECT nombre||’ ’||’tiene un salario de’||’ ’||salario AS “Detalle de Empleados” FROM empleados; Detalle de Empleados -------------------------------JUAN tiene un salario de 500 MARIA tiene un salario de 350 RICARDO tiene un salario de 120
  25. 25. Tipo Date • Almacena una fecha válida según el formato establecido en una máscara • Fecha y tiempo comprendida entre el 1 de enero del 4712 A.C. y el 31 de diciembre del 9999 D.C. • Todo literal que sea fecha debe de estar encerrado entre comillas simples • Funciones – To_Date
  26. 26. Funcion To_Date • Convierte una cadena de caracteres representando una fecha a un valor fecha de acuerdo al formato especificado en la máscara (si el formato es omitido, el formato será DD-MON-YY) SQL> 2 3 SELECT nombre||’ estará de vacación el ’|| TO_DATE(’20-DIC-2002’,’DD-MM-YY’) AS vacaciones FROM empleados; VACACIONES -------------------------------------------JUAN estará de vacación el 20-12-02 MARIA estará de vacación el 20-12-02 RICARDO estará de vacación el 20-12-02
  27. 27. Filas Duplicadas Los resultados obtenidos de las consultas son todas las filas, incluyendo duplicados SQL>SELECT lugar_nac SQL> SELECT ALL lugar_nac 2 2 FROM empleados; LUGAR_NAC --------------------------COCHABAMBA LA PAZ COCHABAMBA FROM empleados;
  28. 28. Eliminación de Filas Duplicadas Se pueden eliminar las filas duplicadas escribiendo DISTINCT en la cláusula SELECT SQL> 2 SELECT DISTINCT lugar_nac FROM empleados; LUGAR_NAC --------------------------COCHABAMBA LA PAZ
  29. 29. SQL*Plus • SQL*Plus es una herramienta de Oracle que reconoce y acepta las sentencias SQL en el Servidor Oracle para su ejecución • Contiene además su propio lenguaje de comandos
  30. 30. Capacidades de SQL*Plus • • • • • Describe la estructura de las tablas Permite ejecutar sentencias SQL Guarda y añade sentencias SQL en archivos Ejecuta archivos guardados Carga comandos desde un archivo al buffer para editar
  31. 31. Interacción entre SQL y SQL*Plus Sentencias SQL Sentencias SQL Buffer Servidor BD SQL*Plus Comandos SQL*Plus Resultado Consulta Reporte con Formato
  32. 32. Sentencias SQL Vs. Comandos SQL*Plus SQL • Un lenguaje • ANSI standard • Palabras reservadas no pueden ser abreviadas • Sentencias manipulan datos y definiciones de tablas en la base de datos SQL*Plus • Un ambiente • Propio de Oracle • Palabras reservadas pueden ser abreviadas • Comandos no permiten la manipulación de valores en la base de datos
  33. 33. Ingreso SQL*Plus • Desde un Ambiente Windows: • Desde una línea de comandos: sqlplus[username[/password[@database]]]
  34. 34. Mostrando la Estructura de las Tablas Para describir la estructura de una tabla se usa el comando de SQL*Plus DESCRIBE DESC[RIBE] tabla
  35. 35. Mostrando la Estructura de las Tablas SQL> DESCRIBE empleados; Name Null? Type --------------------------------------------COD NOT NULL VARCHAR2(6) NOMBRE NOT NULL VARCHAR2(20) APELLIDO NOT NULL VARCHAR2(20) SALARIO NUMBER(5) FECHA_NAC DATE LUGAR_NAC VARCHAR2(20) SUC_COD NOT NULL VARCHAR2(6)
  36. 36. Salida de SQL*Plus • Para salir de SQL*Plus se tiene el comando EXIT SQL> EXIT;
  37. 37. Capítulo 2 Restricción y Ordenamiento de Datos Parte II - SQL Sentencias Básicas de SQL Restricción y Ordenamiento de Datos Funciones de SQL Obteniendo Datos desde Múltiples Tablas Obteniendo Datos Usando Funciones de Agrupación Sub-Consultas Manejo de los Valores de Entrada con SQL*Plus Manipulando Datos Creación y Manipulación de Tablas Restricciones de Integridad Vistas Secuencias, Indices y Sinónimos
  38. 38. Objetivos • Limitar las filas recuperadas de la ejecución de una consulta • Ordenar las filas recuperadas de la ejecución de una consulta
  39. 39. Uso de la Cláusula WHERE • Permite seleccionar determinadas filas de una tabla que cumplan con una condición SELECT [distinct] { * | columnas [alias], ...} FROM tabla [WHERE condicion(es)];
  40. 40. Uso de la Cláusula WHERE • La cláusula WHERE debe de estar inmediatamente después de la cláusula FROM SQL> 2 3 SELECT nombre, apellido FROM empleados WHERE nombre = ‘MARIA’; NOMBRE APELLIDO -------------------------------MARIA SILEZ
  41. 41. Uso de la Cláusula WHERE • Puede estar compuesta por varias condiciones SQL> 2 3 4 SELECT nombre, apellido, salario FROM empleados WHERE nombre = ’RICARDO’ AND suc_cod = ’7’; NOMBRE APELLIDO SALARIO ------------------------------------RICARDO QUIROGA 120
  42. 42. Condición(es) en el WHERE • Una condición en la cláusula WHERE esta compuesta por: Condición Columna • • Operador de Comparación Columna, Constante, Lista de Valores Donde la condición podrá ser verdadero o falso, y de acuerdo a eso se seleccionarán sólo las filas que cumplen la condición En una condición los valores de caracter son sensibles a las mayúsculas y minúsculas, y los valores de fechas son sensibles al formato
  43. 43. Operadores de Comparación Los operadores de comparación son usados en condiciones que comparan una expresión con otra Operador = > >= < <= <> Descripción Igual a Mayor que Mayor que o igual a Menor que Menor que o igual a Diferente
  44. 44. Otros Operadores de Comparación • BETWEEN ...AND... • IN (lista) • LIKE se usa para mostrar las filas basándose en un rango de valores se usa para ir probando o comparando con los valores de la lista se usa para realizar búsquedas sensibles - % denota cero o mas caracteres - _ denota un caracter • IS NULL se usa para probar con valores nulos
  45. 45. Operador BETWEEN…AND… • • Se usa para recuperar filas basándose en un rango de valores En el rango se tiene que especificar el valor mínimo y el valor máximo SQL> 2 3 SELECT nombre, salario FROM empleados WHERE salario BETWEEN 350 AND 1000; NOMBRE SALARIO ------------------------JUAN 500 MARIA 350 JOSE 800 ... Valor mínimo Valor máximo
  46. 46. Operador IN (lista) • • Se usa para ir probando o comparando con los valores de la lista Este operador puede ser usado con cualquier tipo SQL> 2 3 SELECT nombre, apellido, lugar_nac FROM empleados WHERE suc_cod IN (’2’,’3’,’7’); NOMBRE APELLIDO LUGAR_NAC -------------------------------------JUAN PEREZ COCHABAMBA MARIA SILEZ LA PAZ RICARDO QUIROGA COCHABAMBA ...
  47. 47. Operador LIKE • Se usa para realizar búsquedas sensibles - % Equivale a una cadena de caracteres de longitud comprendida entre 0 y n - _ Equivale a un único caracter SQL>SELECT nombre 2 FROM empleados 3 WHERE nombre LIKE (’J%’); SQL> SELECT nombre 2 FROM empleados 3 WHERE nombre LIKE (’_A%’); NOMBRE ------------------JUAN JOSE ... NOMBRE ------------------MARIA JANNETH ...
  48. 48. Operador IS NULL • • Se usa para probar con valores nulos No se podría usar un = porque un valor nulo no es mismo que un número o un caracter o cualquier tipo de dato SQL> 2 3 SELECT nombre, lugar_nac FROM empleados WHERE lugar_nac IS NULL; NOMBRE LUGAR_NAC -----------------------------JOSE FERNANDO ...
  49. 49. Operadores Lógicos Un operador lógico combina el resultado de dos condiciones para producir un solo resultado basándose en ambas, o para invertir el resultado de una sola condición Operador AND OR NOT Descripción Retorna TRUE si ambas condiciones son verdaderas Retorna TRUE si por lo menos una condición es verdadera Retorna TRUE si la condición es falsa
  50. 50. Operador AND • Retorna TRUE si ambas condiciones son verdaderas SQL> 2 3 4 SELECT nombre, apellido, salario FROM empleados WHERE lugar_nac = ’COCHABAMBA’ AND suc_cod = ’3’; NOMBRE APELLIDO SALARIO ------------------------------------JUAN PEREZ 500 GUSTAVO HERRERA 300 JIMENA TORRICO 350 ...
  51. 51. Operador OR • Retorna TRUE si por lo menos una condición es verdadera SQL> 2 3 4 SELECT nombre, apellido, lugar_nac, suc_cod FROM empleados WHERE lugar_nac = ’LA PAZ’ OR suc_cod = ’3’; NOMBRE APELLIDO LUGAR_NAC SUC_COD --------------------------------------------JUAN PEREZ COCHABAMBA 3 MARIA SILEZ LA PAZ 2 JIMENA TORRICO SUCRE 3 ...
  52. 52. Operador NOT • Retorna TRUE si la condición es falsa SQL> 2 3 SELECT nombre, apellido, lugar_nac FROM empleados WHERE lugar_nac NOT IN(’COCHABAMBA’,’LA PAZ’); NOMBRE APELLIDO LUGAR_NAC ------------------------------------JIMENA TORRICO SUCRE ALVARO VARGAS ORURO ...
  53. 53. Uso de la Cláusula ORDER BY • Ordena el resultado obtenido al ejecutar una consulta - ASC: en orden ascendente, por defecto - DESC: en orden descendente SELECT expr FROM tabla [WHERE condicion(es)] [ORDER BY {columna, expr}[ASC|DESC]];
  54. 54. Uso de la Cláusula ORDER BY • La cláusula ORDER BY siempre debe de estar al final de una sentencia SELECT • Se puede ordenar por una columna que no esté en la lista SELECT • Se puede ordenar no solo por una columna sino también por varias, vale decir: ORDER BY columna1, columna2, ... • Se puede especificar una expresión o un alias para ordenar ORDER BY alias1, alias2,... ORDER BY columna1||columna2 ORDER BY columna1*columna2
  55. 55. Uso de la Cláusula ORDER BY SQL> 2 3 SELECT nombre, apellido, salario FROM empleados ORDER BY salario; SQL> 2 3 SELECT nombre, apellido, lugar_nac, salario FROM empleados ORDER BY nombre, salario; SQL> 2 3 SELECT nombre, apellido, salario*12 sueldo FROM empleados ORDER BY sueldo; SQL> 2 3 SELECT nombre, apellido, lugar_nac, salario FROM empleados ORDER BY nombre||TO_CHAR(salario);
  56. 56. Capítulo 3 Funciones de SQL Parte II - SQL Sentencias Básicas de SQL Restricción y Ordenamiento de Datos Funciones de SQL Obteniendo Datos desde Múltiples Tablas Obteniendo Datos Usando Funciones de Agrupación Sub-Consultas Manejo de los Valores de Entrada con SQL*Plus Manipulando Datos Creación y Manipulación de Tablas Restricciones de Integridad Vistas Secuencias, Indices y Sinónimos
  57. 57. Objetivos • Mostrar los dos tipos de funciones disponibles en SQL • Usar funciones para manipular caracteres, números y fechas en las sentencias SQL • Mostrar el uso de las funciones de conversión
  58. 58. Funciones de SQL • Las funciones son una característica potente de SQL, y pueden ser usadas para: - Realizar cálculos sobre datos Modificar datos individualmente Dar formato a las fechas y números para ser mostrados Convertir tipos de datos entre columnas • Existen dos distintos tipos de funciones Funciones Funciones para una Fila Funciones para más de una Fila
  59. 59. Funciones para una Fila • • • • • Aceptan varios argumentos y retornan solo un valor Trabajan con cada fila resultante Retornan un resultado por fila Pueden modificar los tipos de datos Pueden estar anidadas nombreFuncion(columna|expresion,[arg1, arg2,...]) • Un argumento puede ser: - Una constante Un valor variable Un nombre de columna Una expresión
  60. 60. Funciones para una Fila Funciones para una Fila Caracteres Conversiones Números Fechas
  61. 61. Funciones para Manipular Caracteres Se dividen en: • Funciones para Conversión de MayúsculasMinúsculas - LOWER - UPPER - INITCAP • Funciones para Manipulación de Cadenas de Caracteres - CONCAT - SUBSTR - LENGTH - INSTR - LPAD
  62. 62. Funciones para Convertir Mayúsculas-Minúsculas Función Descripción LOWER(columna|expresion) Convierte una cadena de caracteres a minúsculas UPPER(columna|expresion) Convierte una cadena de caracteres a mayúsculas Convierte el primer caracter de cada palabra a mayúscula y los demás a minúsculas INITCAP(columna|expresion)
  63. 63. Funciones para Convertir Mayúsculas-Minúsculas Función LOWER(‘CADENA caracter’) UPPER(‘CADENA caracter’) INITCAP(‘CADENA caracter’) Resultado cadena caracter CADENA CARACTER Cadena Caracter
  64. 64. Funciones para Manipulación de Cadenas de Caracteres Función Descripción CONCAT(columna1|expresion1, columna2|expresion2) Permite concatenar dos cadenas de caracteres SUBSTR(columna|expresion,m[,n]) Retorna caracteres específicos empezando desde la posición m, n caracteres adelante LENGTH(columna|expresion) Retorna la longitud de la cadena de caracteres INSTR(columna|expresion,c) Retorna la posición del caracter c en la cadena LPAD(columna|expresion,n,’cadena’) Si es que el primer argumento tiene una longitud menor que n se completará desde derecha a izquierda con ‘cadena’
  65. 65. Funciones para Manipulación de Cadenas de Caracteres Función CONCAT(‘Cadena’, ‘Grande’) SUBSTR(‘Cadena’, 1, 3) LENGTH(‘Cadena’) INSTR(‘Cadena’, ‘e’) LPAD(salario,10,’*’) Resultado CadenaGrande Cad 6 4 *******500
  66. 66. Funciones para Manipular Números Función ROUND(columna| expresión, n) TRUNC(columna| expresión, n) MOD (m , n) Descripción Redondea la columna, expresión o valor a n lugares decimales o si n es omitido, sin lugares decimales Trunca la columna, expresión o valor a n lugares decimales o si n es omitido, sin lugares decimales Retorna el residuo de la división de m entre n
  67. 67. Funciones para Manipular Números Función ROUND(24.416, 2) Resultado 24.42 TRUNC(24.416, 2) 24.41 MOD(150, 20) 10
  68. 68. Funciones para Manipular Fechas Función MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY ROUND TRUNC Descripción Numero de meses entre dos fechas Añade un mes calendario a una fecha Siguiente día en una fecha especifica Ultimo día del mes Redondea una fecha Trunca un fecha
  69. 69. Funciones para Manipular Fechas • MONTHS_BETWEEN(fecha1, fecha2) Encuentra el número de meses entre la fecha1 y la fecha2. El resultado puede ser positivo como negativo. Si la fecha1 es mayor que la fecha2, es resultado es positivo, si es menor el resultado será negativo • ADD_MONTHS(fecha, n) Añade n números de meses calendario a la fecha. El valor de n debe ser entero y puede ser negativo • NEXT_DAY(fecha, ‘caracter’) Encuentra la fecha del siguiente día de la semana especificado en ‘caracter’ a partir de fecha • LAST_DAY(fecha) Encuentra la fecha del último día del mes que contiene fecha
  70. 70. Funciones para Manipular Fechas Función Resultado MONTHS_BETWEEN(’01-SEP-95’,’11-JAN-94’) 19.6774194 ADD_MONTHS(’05-JAN-99’, 6) ‘05-JUL-99’ NEXT_DAY(’14-SEP-98’,’FRIDAY’) ’18-SEP-98’ LAST_DAY(’09-NOV-98’) ’30-NOV-98’
  71. 71. Funciones para Manipular Fechas • ROUND(fecha[,’fmt’]) Retorna la fecha redondeada a la unidad especificada por el formato ‘fmt’ (que puede ser años, meses). Si el formato ‘fmt’ es omitido, la fecha será redondeada al día más cercano • TRUNC(fecha[,’fmt’]) Retorna la fecha con el tiempo truncado a la unidad especificada por el formato ‘fmt’ (que puede ser años, meses). Si el formato ‘fmt’ es omitido, la fecha será truncada al día más cercano
  72. 72. Funciones para Manipular Fechas Función Resultado ROUND(’25-JUL-98’,’MONTH’) ’01-AUG-98’ ROUND(’25-JUL-98’,’YEAR’) ’01-JAN-99’ TRUNC(’25-JUL-98’,’MONTH’) ’01-JUL-98’ TRUNC(’25-JUL-98’,’YEAR’) ’01-JAN-98’
  73. 73. Funciones para Realizar Conversiones Función Descripción TO_CHAR(numero|fecha[,’fmt’]) Convierte un numero o fecha a una cadena de caracteres VARCHAR2 con el formato fmt TO_NUMBER(cadena[,’fmt’]) Convierte una cadena de caracteres conteniendo dígitos a un numero con el formato opcional fmt TO_DATE(cadena[,’fmt’]) Convierte una cadena de caracteres representando una fecha a un valor fecha de acuerdo al formato fmt especificado(si el formato fmt es omitido, el formato será DD-MON-YY)
  74. 74. Funciones para Realizar Conversiones Función Resultado TO_CHAR(8500, ’99,999’) ‘8,500’ TO_CHAR(’05-NOV-99’, ’DD-MM-YYYY’) ’05-11-1999’ TO_NUMBER(‘1435’) 1435 TO_DATE(’06-02-97’,’DD/MON/YYYY’) 06/FEB/1997
  75. 75. Funciones Anidadas • Las funciones pueden estar anidadas en cualquier nivel • Las funciones anidadas son evaluadas desde del nivel mas interno al mas externo F3(F2(F1(columna,arg1),arg2),arg3) Resultado1 Resultado2 Resultado3
  76. 76. Funciones Anidadas Función Resultado ADD_MONTHS(TO_DATE(’05-JAN-99’,’DD-MON-YY’ ),6) ‘05-JUL-99’ TO_CHAR(NEXT_DAY(’14-SEP-98’,’FRIDAY’),’DD/MM/YYYY’) ’18/09/1998’ TO_CHAR(ROUND(’25-JUL-98’,’MONTH’),’DD-MM-YYYY’) ’01-08-1998’
  77. 77. Capítulo 4 Obteniendo Datos desde Múltiples Tablas Parte II - SQL Sentencias Básicas de SQL Restricción y Ordenamiento de Datos Funciones de SQL Obteniendo Datos desde Múltiples Tablas Obteniendo Datos Usando Funciones de Agrupación Sub-Consultas Manejo de los Valores de Entrada con SQL*Plus Manipulando Datos Creación y Manipulación de Tablas Restricciones de Integridad Vistas Secuencias, Indices y Sinónimos
  78. 78. Objetivos • Escribir sentencias SQL para acceder a datos de mas de una tabla usando joins internos y nonequijoins • Ver los datos que generalmente no satisfacen una condición join usando el join externo • Hacer join de una tabla a si misma
  79. 79. Obteniendo Datos desde Múltiples Tablas EMPLEADOS SUCURSALES COD NOMBRE APELLIDO ... SUC_COD ------------------------------------5 JUAN PEREZ 3 7 MARIA SILEZ 2 9 RICARDO QUIROGA 7 14 JIMENA TORRICO 3 18 JOSE VARGAS 3 ... COD DESCR TELEFONO ... ------------------------------------1 SUD 225874 2 NORTE 501458 3 CENTRAL 255656 7 SACABA 298756 9 QUILLACOLLO 268751 ... COD NOMBRE SUC_COD DESCR ------------------------------------5 JUAN 3 CENTRAL 7 MARIA 2 NORTE 9 RICARDO 7 SACABA 14 JIMENA 3 CENTRAL 18 JOSE 3 CENTRAL ...
  80. 80. Uso de la Sentencia JOIN Se usa un join para realizar una consulta a más de una tabla SELECT tabla1.columna, tabla2.columna FROM tabla1, tabla2 WHERE tabla1.columna1 = tabla2.columna2; • Se escribe la condición join en la parte de la cláusula WHERE • En necesario el nombre de la columna con el nombre de la tabla cuando el mismo nombre de columna aparece en mas de una tabla
  81. 81. Tipos de Join Join Join Interno Descripción = Non-Equijoin Join Externo Self Join BETWEEN (+) Con una tabla
  82. 82. Join Interno EMPLEADOS SUCURSALES COD NOMBRE APELLIDO ... SUC_COD ------------------------------------5 JUAN PEREZ 3 7 MARIA SILEZ 2 9 RICARDO QUIROGA 7 14 JIMENA TORRICO 3 18 JOSE VARGAS 3 ... Llav e Foranea COD DESCR TELEFONO ... ------------------------------------1 SUD 225874 2 NORTE 501458 3 CENTRAL 255656 7 SACABA 298756 9 QUILLACOLLO 268751 ... Llav e Primaria Es la relación que existe entre dos tablas a través de sus llaves primarias y foráneas
  83. 83. Join Interno SQL> 2 3 4 5 SELECT empleados.nombre, empleados.apellido empleados.suc_cod, sucursales.cod, sucursales.descr FROM empleados, sucursales WHERE empleados.suc_cod = sucursales.cod; NOMBRE APELLIDO SUC_COD COD DESCR ------------------------------------------------JUAN PEREZ 3 3 CENTRAL MARIA SILEZ 2 2 NORTE RICARDO QUIROGA 7 7 SACABA ...
  84. 84. Non-Equijoin EMPLEADOS BONOS COD NOMBRE APELLIDO SALARIO FECHA_NAC ... ----------------------------------------------5 JUAN PEREZ 500 12-NOV-70 7 MARIA SILEZ 350 08-ABR-75 9 RICARDO QUIROGA 120 25-JUN-77 14 JIMENA TORRICO 380 01-DIC-76 18 JOSE VARGAS 800 19-JUN-78 ... CATEGORIA FECHA_MIN FECHA-MAX AUMENTO ------------------------------------------1 01-JAN-70 31-DIC-75 15 2 01-JAN-76 31-DIC-81 10 3 01-JAN-82 31-DIC-87 5 4 01-JAN-88 31-DIC-93 1 ... La fecha de nacimiento de la tabla EMPLEADOS esta entre la fecha m ínima y la fecha máxima en la tabla BONOS
  85. 85. Non-Equijoin SQL> 2 3 4 5 SELECT e.nombre, e.apellido, e.fecha_nac, e.salario, b.categoria, b.aumento FROM empleados e, bonos b WHERE e.fecha_nac BETWEEN b.fecha_min AND b.fecha_max; NOMBRE APELLIDO FECHA_NAC SALARIO CATEGORIA AUMENTO -----------------------------------------------------------JUAN PEREZ 12-NOV-70 500 1 15 MARIA SILEZ 08-ABR-75 350 1 15 ...
  86. 86. Join Externo EMPLEADOS SUCURSALES COD NOMBRE APELLIDO ... SUC_COD ------------------------------------5 JUAN PEREZ 3 7 MARIA SILEZ 2 9 RICARDO QUIROGA 7 14 JIMENA TORRICO 3 18 JOSE VARGAS 3 ... COD DESCR TELEFONO ... ------------------------------------1 SUD 225874 2 NORTE 501458 3 CENTRAL 255656 7 SACABA 298756 ... 9 No existen emplea dos en la sucursal 9 QUILLACOLLO QUILLACOLLO 268751
  87. 87. Join Externo • Se usa el join externo para ver también las filas que no satisfacen la condición • Es representado con el signo (+) SQL> 2 3 4 SELECT e.nombre, s.cod, s.descr FROM empleados e, sucursales s WHERE e.suc_cod (+) = s.cod ORDER BY e.suc_cod; NOMBRE COD DESCR --------------------------------------------MARIA 2 NORTE JUAN 3 CENTRAL RICARDO 7 SACABA ... 9 QUILLACOLLO
  88. 88. Self join CLIENTE(TITULAR) CLIENTE(AUTORIZADO) COD CI NOMBRE APELLIDO ... CLI_COD ---------------------------------------14 4587962 GUSTAVO ALVAREZ 19 4788965 MARCELA SANCHEZ 22 4155877 CARLOS ZENTENO 35 3587442 HERMAN CACERES ... COD CI NOMBRE APELLIDO ... CLI_COD ---------------------------------------31 4854896 KAREN ACHA 10 41 4755166 MARCO ALCOCER 14 66 4877514 PAOLA CACERES 35 87 4621547 LUIS CACERES 35 ... Cod en la tabla CLIENTE(TITULAR) es el mismo que cli_cod en la tabla CLIE NTE(AUTORIZADO)
  89. 89. Self join SQL> 2 3 4 SELECT autorizado.nombre||’ es autorizado por ’||titular.nombre FROM clientes titular, clientes autorizado WHERE autorizado.cli_cod = titular.cod; AUTORIZADO.NOMBRE||’ ES AUTORIZADO POR ’||TITULAR.NOMBRE --------------------------------------------------------KAREN es autorizado por MARISOL MARCO es autorizado por GUSTAVO PAOLA es autorizado por HERNAN LUIS es autorizado por HERMAN ANA es autorizado por CARLOS ...
  90. 90. Capítulo 5 Obteniendo Datos Usando Funciones de Agrupación Parte II - SQL Sentencias Básicas de SQL Restricción y Ordenamiento de Datos Funciones de SQL Obteniendo Datos desde Múltiples Tablas Obteniendo Datos Usando Funciones de Agrupación Sub-Consultas Manejo de los Valores de Entrada con SQL*Plus Manipulando Datos Creación y Manipulación de Tablas Restricciones de Integridad Vistas Secuencias, Indices y Sinónimos
  91. 91. Objetivos • • • • Identificar las funciones de agrupación disponibles Describir el uso de las funciones de agrupación Agrupar datos usando la cláusula GROUP BY Incluir o excluir filas agrupadas usando la cláusula HAVING
  92. 92. ¿Qué son las Funciones de Agrupación? • Las funciones de agrupación operan sobre conjuntos de filas para dar un resultado por grupo EMPLEADOS COD NOMBRE APELLIDO SALARIO ... ------------------------------------------5 JUAN PEREZ 500 7 MARIA SILEZ 350 9 RICARDO QUIROGA 120 18 JOSE VARGAS 400 14 JIMENA TORRICO 350 ... Salario Mínimo de la tabla EMPLEADOS MIN(SALARIO) -----------120
  93. 93. Tipos de Funciones de Agrupación Función Descripción AVG([DISTINCT|ALL]n) Valor promedio de n, ignora valores nulos COUNT({*|[DISTINCT|ALL]expr}) Cuenta el Nº de filas de una columna MAX([DISTINCT|ALL]expr) Calcula el valor máximo de una columna
  94. 94. Tipos de Funciones de Agrupación Función Descripción MIN([DISTINCT|ALL]expr) Calcula el valor mínimo de una columna STDDEV([DISTINCT|ALL]n) Desviación estándar de n, ignora valores nulos SUM ([DISTINCT|ALL]n) Suma los valores de n, ignora valores nulos VARIANCE ([DISTINCT|ALL]n) Varianza de n, ignora valores nulos
  95. 95. Funciones AVG y SUM Se pueden usar las funciones AVG y SUM para datos numéricos SQL> 2 3 SELECT AVG(salario), MAX(salario), MIN(salario), SUM(salario) FROM empleados; AVG(SALARIO) MAX(SALARIO) ------------ ------------344 500 MIN(SALARIO) SUM(SALARIO) ------------ ------------120 1720 EMPLEADOS COD NOMBRE APELLIDO SALARIO ... ------------------------------------------5 JUAN PEREZ 500 7 MARIA SILEZ 350 9 RICARDO QUIROGA 120 18 JOSE VARGAS 400 14 JIMENA TORRICO 350
  96. 96. Funciones MIN y MAX Se pueden usar las funciones MIN y MAX para cualquier tipo de dato SQL> 2 SELECT MIN(fecha_nac), MAX(fecha_nac) FROM empleados; MIN(FECHA_NAC) -------------12-NOV-70 MAX(FECHA_NAC) -------------19-JUN-78 EMPLEADOS COD NOMBRE APELLIDO ... FECHA_NAC ... ---------------------------------------------5 JUAN PEREZ 12-NOV-70 7 MARIA SILEZ 08-ABR-75 9 RICARDO QUIROGA 25-JUN-77 18 JOSE VARGAS 19-JUN-78 14 JIMENA TORRICO 01-DIC-76
  97. 97. Función COUNT COUNT(*) devuelve el número de filas en una tabla. Tiene dos formatos: SQL> 2 3 COUNT(*) COUNT(expr) incluye nulos No toma en cuenta nulos SELECT COUNT(*) FROM empleados WHERE suc_cod = ’3’; EMPLEADOS COUNT(*) --------3 COD NOMBRE APELLIDO ... SUC_COD --------------------------------------5 JUAN PEREZ 3 7 MARIA SILEZ 2 9 RICARDO QUIROGA 7 14 JIMENA TORRICO 3 18 JOSE VARGAS 3
  98. 98. Creando Grupos de Datos EMPLEADOS COD ... SALARIO SUC_COD ------------------------------7 350 2 15 120 2 5 500 3 18 400 3 14 350 3 21 350 3 2 350 5 17 300 5 22 350 5 9 120 7 11 400 7 235 400 333.33 260 Salario Promedio de la tabla EMPLEADOS por sucursal SUC_COD AVG(SALARIO) ---------------------2 235 3 400 5 333.33 7 260
  99. 99. Uso de la Cláusula GROUP BY SELECT columna, funcion_agrupacion(columna) FROM tabla [WHERE condicion] [GROUP BY expresion_agrupacion] [ORDER BY columna]; La cláusula GROUP BY sirve para dividir una tabla en grupos de filas que comparten características comunes
  100. 100. Uso de la Cláusula GROUP BY Todas las columnas en la lista SELECT que no estén entre funciones de agrupación deben de estar en la cláusula GROUP BY SQL> 2 3 SELECT suc_cod, AVG(salario) FROM empleados GROUP BY suc_cod; SUC_COD AVG(SALARIO) ---------------------------2 350 3 400 5 333.33 7 260
  101. 101. Uso de la Cláusula HAVING Se usa la cláusula HAVING para restringir los grupos obtenidos - Primero las filas son agrupadas - La función de agrupación es aplicada - Los grupos que cumplen la cláusula HAVING serán mostrados SELECT columna, funcion_agrupacion FROM tabla [WHERE condicion] [GROUP BY expresion_group_by] [HAVING condicion_agrupacion] [ORDER BY columna];
  102. 102. Uso de la Cláusula HAVING SQL> 2 3 4 SELECT suc_cod, MAX(salario) FROM empleados GROUP BY suc_cod HAVING MAX(salario)> 370; SUC_COD MAX(SALARIO) --------------------3 500 7 400 EMPLEADOS COD ... SALARIO SUC_COD -----------------------------7 350 2 15 120 2 5 500 3 18 400 3 14 350 3 21 350 3 2 350 5 17 300 5 22 350 5 9 120 7 11 400 7
  103. 103. Funciones de Agrupación Anidadas Así como las funciones de SQL, las funciones de agrupación pueden ser anidadas SQL> 2 3 SELECT MAX(AVG(salario)) FROM empleados GROUP BY suc_cod; MAX(AVG(SALARIO)) ------------------400 AVG(SALARIO) ---------------235 400 333.33 260
  104. 104. Capítulo 6 Sub-Consultas Parte II - SQL Sentencias Básicas de SQL Restricción y Ordenamiento de Datos Funciones de SQL Obteniendo Datos desde Múltiples Tablas Obteniendo Datos Usando Funciones de Agrupación Sub-Consultas Manejo de los Valores de Entrada con SQL*Plus Manipulando Datos Creación y Manipulación de Tablas Restricciones de Integridad Vistas Secuencias, Indices y Sinónimos
  105. 105. Objetivos • Describir que es una sub-consulta • Tipos de sub-consultas • Escribir algunos ejemplos
  106. 106. Sub-Consultas Es una sentencia SELECT que esta dentro de una cláusula de otra sentencia SELECT SELECT lista_select FROM tabla WHERE expr operador (SELECT lista_select FROM tabla); • • • Puede existir tanto en la cláusula FROM como en la cláusula WHERE La sub-consulta (consulta interna) se ejecuta antes de la consulta principal El resultado de la sub-consulta es usado por la consulta principal (consulta externa)
  107. 107. Uso de una Sub-Consulta SQL> 2 3 4 5 6 SELECT nombre FROM empleados 120 WHERE salario > ( SELECT salario FROM empleados WHERE cod = ’9’); NOMBRE --------------------JUAN MARIA ...
  108. 108. Uso de una Sub-Consulta SQL> 2 3 4 5 SELECT nombre FROM empleados e, ( SELECT salario FROM empleados WHERE cod = ’9’) 6 120 WHERE e.salario > sueldo9.salario; NOMBRE --------------------JUAN MARIA ... Siempre tiene que tener un alias sueldo9
  109. 109. Al usar una Sub-Consulta • Encerrar las sub-consultas entre paréntesis • Colocar las sub-consultas del lado derecho del operador de comparación • No escribir la cláusula ORDER BY en una subconsulta • Usar operadores que devuelven una fila con subconsultas que devuelven una fila • Usar operadores que devuelven mas de una fila con sub-consultas que devuelven mas de una fila
  110. 110. Clases de Sub-Consultas • Sincrónicas Existen columnas de la consulta principal en la sub-consulta SELECT e.nombre, ... Existen columnas de la FROM empleados e consulta principal WHERE .... > ( SELECT ... FROM sucursales WHERE cod = e.suc_cod);
  111. 111. Clases de Sub-Consultas • Asincrónicas Ambas consultas son independientes SELECT ... FROM empleados WHERE .... > ( Son independientes SELECT ... FROM sucursales WHERE cod = ’7’ );
  112. 112. Tipos de Sub-Consultas • Sub-Consultas que devuelven una fila Consulta Principal Retorna Sub Consulta JUAN • Sub-Consultas que devuelven más de una fila Consulta Principal Retorna JUAN MARIA Sub Consulta • Sub-Consultas que devuelven más de una columna Consulta Principal Retorna Sub Consulta JUAN MARIA 500 350
  113. 113. Sub-Consultas que devuelven una fila • Retornan solo una fila • Se pueden usar los siguientes operadores: Operador Descripción = Igual a > Mayor que >= Mayor o igual que < Menor que <= Menor o igual que <> Diferente
  114. 114. Ejecutando Sub-Consultas que devuelven una fila SQL> 2 3 4 5 6 7 8 9 10 SELECT nombre, lugar_nac FROM empleados COCHABAMBA WHERE lugar_nac = ( SELECT lugar_nac FROM empleados WHERE cod = ’9’) AND salario > 500 ( SELECT salario FROM empleados WHERE cod = ’5’); NOMBRE LUGAR_NAC ---------------------JUAN COCHABAMBA
  115. 115. Sub-Consultas que devuelven más de una fila • Retornan más de una fila • Se puede usar los siguientes operadores: Operador IN Descripción Igual a cualquier elemento de una lista ANY Compara un valor con cada valor resultante de la subconsulta ALL Compara un valor con todos los valores resultantes de la sub-consulta
  116. 116. Ejecutando Sub-Consultas que devuelven más de una fila SQL> 2 3 4 5 6 SELECT nombre, salario, suc_cod FROM empleados WHERE salario IN ( SELECT MIN(salario) FROM empleados GROUP BY suc_cod); NOMBRE SALARIO SUC_COD ---------------------------------FERNANDO 180 1 MARCOS 150 2 VANIA 120 3 GUSTAVO 180 7 RICARDO 120 9
  117. 117. Ejecutando Sub-Consultas que devuelven más de una fila Para los casos en que se usen los operadores ANY y ALL, el comportamiento será el siguiente: WHERE a > ALL (SELECT a FROM ....) será mas o menos equivalente a un AND Compara a con 5 cada uno de estos 8 Valores 9 WHERE a > ANY (SELECT a FROM ....) Compara a con 5 cualquiera de estos 8 Valores 9 será mas o menos equivalente a un OR
  118. 118. Sub-Consultas que devuelven más de una columna • Retornan más de una columna SELECT columna, columna, ... FROM tabla WHERE (columna, columna, ...) IN SELECT columna, columna, ... FROM tabla WHERE condicion);
  119. 119. Ejecutando Sub-Consultas que devuelven más de una columna SQL> 2 3 4 5 6 7 SELECT cod, descr, costo FROM videos WHERE (cod, descr) IN ( SELECT cod, descr FROM videos WHERE cat_cod = ’3’) AND cat_cod <> ’3’; COD DESCR COSTO --------------------------------------005 DURO DE MATAR 3 008 MAXIMA VELOCIDAD 3.5 016 TOP GUN 3
  120. 120. Capítulo 7 Manejo de los Valores de Entrada con SQL*Plus Parte II - SQL Sentencias Básicas de SQL Restricción y Ordenamiento de Datos Funciones de SQL Obteniendo Datos desde Múltiples Tablas Obteniendo Datos Usando Funciones de Agrupación Sub-Consultas Manejo de los Valores de Entrada con SQL*Plus Manipulando Datos Creación y Manipulación de Tablas Restricciones de Integridad Vistas Secuencias, Indices y Sinónimos
  121. 121. Objetivos • Escribir consultas que requieren una variable de entrada • Usar algunos caracteres especiales para la sustitución de variables • Definir variables de usuario
  122. 122. Sustitución de Variables • Se usa la sustitución de variables en SQL*Plus para almacenar temporalmente valores • Se puede sustituir variables de la siguiente manera: - Ampersand (&) - Doble Ampersand (&&) - Comandos DEFINE y ACCEPT
  123. 123. Uso de & para la Sustitución de Variables Se usa el ampersand(&) antecediendo a una variable para permitir al usuario el ingreso de una valor para esa variable SQL> 2 3 SELECT nombre, apellido, salario FROM empleados WHERE cod = &codigo_emp; Enter value for codigo_emp: 7 NOMBRE APELLIDO SALARIO ----------------------------------MARIA SILEZ 350
  124. 124. Sustitución de Variables con valores de tipo Fecha y Caracter Se tiene que usar comillas simples para sustituir valores de tipo fecha y caracter SQL> 2 3 SELECT nombre, apellido, salario FROM empleados WHERE lugar_nac = ’&lugar’; Enter value for lugar: COCHABAMBA NOMBRE APELLIDO SALARIO ----------------------------------JUAN PEREZ 500 RICARDO QUIROGA 120
  125. 125. Especificando nombres de columnas, expresiones y textos en tiempo de ejecución Se puede usar la sustitución de variables para especificar: - Condición WHERE - Cláusula ORDER BY - Expresiones de Columnas - Nombres de Tablas - Sentencia SELECT entera
  126. 126. Especificando nombres de columnas, expresiones y textos en tiempo de ejecución SQL> 2 3 4 SELECT nombre, apellido, lugar_nac, &columna FROM empleados WHERE &condicion ORDER BY &orden_columna; Enter value for columna: salario Enter value for condicion: salario >= 500 Enter value for orden_columna: nombre NOMBRE APELLIDO LUGAR_NAC SALARIO --------------------------------------------JUAN PEREZ COCHABAMBA 500 OSCAR VARGAS LA PAZ 800 ...
  127. 127. Uso de && para la Sustitución de Variables Se usa el doble ampersand(&&) si se quiere reusar el valor de una variable sin necesidad de volver a escribirlo nuevamente SQL> SELECT nombre, apellido, &&columna 2 FROM empleados 3 ORDER BY &columna; Enter value for columna: salario NOMBRE APELLIDO SALARIO ----------------------------------RICARDO QUIROGA 120 MARIA SILEZ 350 JUAN PEREZ 500 ...
  128. 128. Definición de Variables de Usuario • Se puede predefinir variables usando uno de los siguientes comandos: - DEFINE: crea una variable de usuario de tipo CHAR - ACCEPT: lee una línea de entrada de datos del usuario y lo almacena en una variable • Si se necesita predefinir una variable que incluye espacios, se debe de encerrar el valor entre comillas simples cuando se use el comando DEFINE
  129. 129. Definición de Variables de Usuario Comando Descripción DEFINE variable = valor Crea una variable de usuario de tipo CHAR y le asigna el valor DEFINE variable Muestra la variable, su valor y su tipo de dato DEFINE Muestra todas las variables de usuario con su valor y su tipo de dato ACCEPT Lee una línea de entrada de datos del usuario y lo almacena en una variable
  130. 130. Comando ACCEPT • Crea una entrada de datos personalizada cuando el usuario ingrese el valor a una variable • Oculta el ingreso del valor a una variable por razones de seguridad ACCEPT variable [tipo_dato] [FORMAT formato] [PROMPT texto] [HIDE]
  131. 131. Comando ACCEPT ACCEPT columna PROMPT ’Ingrese el Lugar de Nacimiento: ’ SELECT nombre, apellido, lugar_nac FROM empleados WHERE lugar_nac = UPPER(‘&columna’); / Ingrese el Lugar de Nacimiento: cochabamba NOMBRE APELLIDO LUGAR_NAC -------------------------------------JUAN PEREZ COCHABAMBA RICARDO QUIROGA COCHABAMBA ...
  132. 132. Comandos DEFINE y UNDEFINE • Una variable se mantiene definida hasta que se haga lo siguiente: - Se use el comando UNDEFINE para limpiarla - Se salga de SQL*Plus • Se puede verificar los cambios con el comando DEFINE • Para definir variables en cada sesión, hay que modificar el archivo login.sql para que las variables sean creadas desde el inicio
  133. 133. Usando el Comando DEFINE • Crear una variable para mantener el lugar de nacimiento: SQL> DEFINE lugar = cochabamba SQL> DEFINE DEFINE LUGAR = “cochabamba” • Usar esa variable como cualquier otra variable SQL> SELECT * 2 3 FROM empleados WHERE lugar_nac = UPPER(‘&lugar’);
  134. 134. Usando el Comando UNDEFINE • Para borrar una variable, se usa el comando UNDEFINE SQL> UNDEFINE lugar SQL> DEFINE symbol lugar is UNDEFINED
  135. 135. Capítulo 8 Manipulando Datos Parte II - SQL Sentencias Básicas de SQL Restricción y Ordenamiento de Datos Funciones de SQL Obteniendo Datos desde Múltiples Tablas Obteniendo Datos Usando Funciones de Agrupación Sub-Consultas Manejo de los Valores de Entrada con SQL*Plus Manipulando Datos Creación y Manipulación de Tablas Restricciones de Integridad Vistas Secuencias, Indices y Sinónimos
  136. 136. Objetivos • • • • • Describir cada sentencia DML Insertar filas en una tabla Actualizar las filas de una tabla Eliminar filas en una tabla Control de transacciones
  137. 137. Lenguaje de Manipulación de Datos (DML) • Las sentencias DML permiten: - Insertar nuevas filas en una tabla - Modificar datos existentes en una tabla - Eliminar datos existentes en una tabla • Una transacción consiste en una colección de sentencias DML que forman una unidad lógica de trabajo
  138. 138. La Sentencia INSERT • Para añadir nuevas filas en una tabla se debe de usar la sentencia INSERT INSERT INTO tabla [(columna [, columna...])] VALUES (valor [, valor...]); • Solo una fila es insertada cuando se ejecuta esta sentencia con esta sintaxis
  139. 139. Uso de la Sentencia INSERT • Se inserta una nueva fila conteniendo valores para cada columna • La lista de valores a insertar por defecto esta en el orden de las columnas de la tabla • Es opcional la lista de las columnas de la tabla en la sentencia INSERT • Se tiene que encerrar entre comillas simples los valores de tipo caracter o fecha
  140. 140. Uso de la Sentencia INSERT SQL> INSERT INTO clientes(cod, ci, nombre, apellido, 2 telefono, cli_cod) 3 VALUES (12,’4578213’,’GUSTAVO’,’SOTO’,’257841’,’08’); SQL> INSERT INTO clientes 2 VALUES (12,’4578213’,’GUSTAVO’,’SOTO’,’257841’,’08’); SQL> INSERT INTO clientes(cod, apellido, nombre, ci, 2 cli_cod, telefono) 3 VALUES (12,’SOTO’,’GUSTAVO’,’4578213’,’08’,’257841’);
  141. 141. Insertando filas con Valores Nulos • Método Implícito: se omite la columna de la lista de columnas SQL> INSERT INTO clientes(cod,ci,nombre,apellido) 2 VALUES (12,’4578213’,’GUSTAVO’,’SOTO’); • Método Explícito: se especifica la palabra NULL SQL> INSERT INTO clientes(cod,ci,nombre,apellido, 2 telefono, cli_cod) 3 VALUES(12,’4578213’,’GUSTAVO’,’SOTO’,NULL,NULL);
  142. 142. Insertando Valores usando Sustitución de Variables SQL> INSERT INTO clientes(cod, ci, nombre, apellido, 2 telefono, cli_cod) 3 VALUES (&codigo,’&ci’,’&nombre’,’&apellido’, 4 ’&fono’,’&cliente_autorizador’); Enter Enter Enter Enter Enter Enter value value value value value value for for for for for for 1 row created. codigo: 19 ci: 4875321 nombre: MARCELO apellido: SANCHEZ fono: 268874 cliente_autorizador: 12
  143. 143. La Sentencia UPDATE • Para modificar las filas de una tabla se usa la sentencia UPDATE UPDATE SET [WHERE tabla columna = valor [, columna = valor] condicion]; • Se actualiza mas de una fila a la vez, si es que fuese necesario
  144. 144. Uso de la Sentencia UPDATE • Una fila específica o varias filas pueden ser modificadas cuando se especifica la cláusula WHERE SQL> UDPATE empleados 2 SET suc_cod = ’7’ 3 WHERE cod = ’5’; • Todas las filas de la tabla son modificadas si se omite la cláusula WHERE SQL> UDPATE empleados 2 SET suc_cod = ’7’;
  145. 145. La Sentencia DELETE • Para eliminar las filas existentes en una tabla se usa la sentencia DELETE DELETE [FROM] tabla [WHERE condicion];
  146. 146. Uso de la Sentencia DELETE • Una fila específica o varias filas pueden ser eliminadas cuando se especifica la cláusula WHERE SQL> DELETE FROM empleados 2 WHERE cod = ’5’; • Todas las filas de la tabla son eliminadas si se omite la cláusula WHERE SQL> DELETE FROM empleados;
  147. 147. Transacciones en la Base de Datos • Consiste en una de las siguientes sentencias: - Sentencias DML que realizan cambios en los datos - Una sentencia DDL - Una sentencia DCL
  148. 148. Transacciones en la Base de Datos • Comienza cuando la primera sentencia SQL ejecutable es ejecutada • Termina con uno de los siguientes eventos: - Se ejecuta un COMMIT o ROLLBACK Sentencias DDL o DCL son ejecutadas (commit automático) El usuario sale El sistema falle
  149. 149. Ventajas de las Sentencias COMMIT y ROLLBACK • Aseguran la consistencia de los datos • Se pueden ver los cambios en los datos antes de volverlos permanentes
  150. 150. Control de Transacciones Sentencia Descripción COMMIT Termina la transacción actual y hace todos los cambios en los datos permanentes SAVEPOINT name Marca un savepoint dentro la transacción actual ROLLBACK [TO SAVEPOINT name] ROLLBACK termina la transacción actual y deshace todos los cambios realizados en los datos; ROLLBACK TO SAVEPOINT name deshace todos los cambios realizados en los datos pero solo hasta el savepoint name
  151. 151. Control de Transacciones Transacción INSERT COMM IT UPDATE Savepoint A INSERT DELETE Savepoint B ROLLBACK to Savepoint B ROLLBACK to Savepoint A ROLLBACK
  152. 152. Capítulo 9 Creación y Manipulación de Tablas Parte II - SQL Sentencias Básicas de SQL Restricción y Ordenamiento de Datos Funciones de SQL Obteniendo Datos desde Múltiples Tablas Obteniendo Datos Usando Funciones de Agrupación Sub-Consultas Manejo de los Valores de Entrada con SQL*Plus Manipulando Datos Creación y Manipulación de Tablas Restricciones de Integridad Vistas Secuencias, Indices y Sinónimos
  153. 153. Objetivos • Describir los objetos más importantes de la Base de Datos • Crear tablas • Modificar la estructura de las tablas • Eliminar, renombrar y truncar tablas
  154. 154. Objetos de la Base de Datos Objeto Descripción Tabla Unidad básica de almacenamiento compuesta por filas y columnas Vista Unidad lógica que representa un subconjunto de datos de una o más tablas Secuencia Objeto que genera números en secuencia que pueden ser usados por columnas de las tablas Indice Objeto que permite mejorar el rendimiento de algunas consultas Sinónimos Permite dar nombres alternativos a objetos
  155. 155. Sentencia CREATE TABLE • Para crear una tabla se usa la sentencia CREATE TABLE • Para usar esta sentencia se debe tener: - Privilegios para crear tablas - Un área de almacenamiento CREATE TABLE [esquema.] tabla (columna tipo_dato [DEFAULT expr] [,...]); • Se debe de especificar: - Nombre de la tabla - Nombre de columna, tipo de dato de la columna y longitud de la columna
  156. 156. Uso de la Sentencia CREATE TABLE • Creación de una tabla CREATE TABLE empleados ( cod VARCHAR2 (6) NOT NULL, nombre VARCHAR2 (30) NOT NULL, apellido VARCHAR2 (30) NOT NULL, salario NUMBER (8,2) NOT NULL, fecha_nac DATE, lugar_nac VARCHAR2 (20), suc_cod VARCHAR2 (6) NOT NULL ); • Confirmación de la creación de la tabla SQL> DESCRIBE empleados;
  157. 157. Tablas en la Base de Datos Oracle • Tablas de Usuario (User Tables) - Colección de tablas creadas y mantenidas por el usuario - Contiene información del usuario • Diccionario de Datos (Data Dictionary) - Colección de tablas creadas y mantenidas por el servidor Oracle - Contiene información de la base de datos
  158. 158. Sentencia ALTER TABLE • Se puede usar la sentencia ALTER TABLE para: - Añadir una nueva columna - Modificar una columna existente ALTER TABLE tabla ADD (columna tipo_dato [DEFAULT expr] [, columna tipo_dato]...); ALTER TABLE tabla MODIFY (columna tipo_dato [DEFAULT expr] [, columna tipo_dato]...);
  159. 159. Añadiendo una Columna • Se usa la cláusula ADD para añadir columnas SQL> ALTER TABLE empleados 2 ADD (est_civil VARCHAR2(3)); • La nueva columna llegará a ser la ultima columna de la tabla • Se puede añadir o modificar columnas, pero no se puede eliminarlas de la tabla
  160. 160. Modificando una Columna • Se puede cambiar el tipo de dato de una columna, longitud y valor por defecto usando la cláusula MODIFY SQL> ALTER TABLE empleados 2 MODIFY (nombre VARCHAR2(25), 3 apellido VARCHAR2(25)); • Un cambio en los valores por defecto afectará solo a las inserciones posteriores que se hagan en la tabla
  161. 161. Sentencia DROP TABLE • Cuando se quiera eliminar una tabla se usa la sentencia DROP TABLE DROP TABLE tabla; • Todos los datos y la estructura de la tabla es borrada • Cualquier transacción pendiente es terminada (commit) • Todos los índices son borrados • No se puede hacer un ROLLBACK a esta sentencia
  162. 162. Cambio de Nombre a un Objeto • Para cambiar el nombre a una tabla, vista, secuencia o sinónimo se ejecuta la sentencia RENAME RENAME antiguo_nombre TO nuevo_nombre; • Se debe ser el propietario de ese objeto
  163. 163. Sentencia TRUNCATE TABLE • Con esta sentencia se puede: - Remover todas las filas de una tabla - Liberar el espacio de almacenamiento usado por una tabla TRUNCATE TABLE tabla; • No se puede hacer un ROLLBACK de las filas removidas cuando se use TRUNCATE • Para remover todas las filas de una tabla se puede usar también la sentencia DELETE
  164. 164. Capítulo 10 Restricciones de Integridad Parte II - SQL Sentencias Básicas de SQL Restricción y Ordenamiento de Datos Funciones de SQL Obteniendo Datos desde Múltiples Tablas Obteniendo Datos Usando Funciones de Agrupación Sub-Consultas Manejo de los Valores de Entrada con SQL*Plus Manipulando Datos Creación y Manipulación de Tablas Restricciones de Integridad Vistas Secuencias, Indices y Sinónimos
  165. 165. Objetivos • Describir restricciones de integridad • Crear y mantener restricciones de integridad
  166. 166. Restricciones de Integridad • Las restricciones de integridad (constraints) aseguran la consistencia de los datos a nivel de las tablas • Previenen la eliminación de una tabla si existen dependencias • Las siguientes restricciones de integridad son validas en Oracle: - NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK
  167. 167. Tipos de Restricciones de Integridad Restricción Descripción NOT NULL Especifica que para una columna no contenga valores nulos UNIQUE Especifica que para columna o combinación de columnas sus valores sean únicos para todas las filas de la tabla PRIMARY KEY Identifica únicamente a cada fila de la tabla FOREIGN KEY Establece y asegura una relación de llave foránea entre una columna y la llave primaria de una tabla referenciada CHECK Especifica una condición que debe de ser verdadera
  168. 168. Creación de una Restricción de Integridad CREATE TABLE [esquema.] tabla (columna tipo_dato [DEFAULT expr] [constraint_columna], ... [constraint_tabla] [,...]); CREATE TABLE empleados ( cod VARCHAR2 (6) nombre VARCHAR2 (30) ... suc_cod VARCHAR2 (6) CONSTRAINT emp_pk NOT NULL, NOT NULL, NOT NULL, PRIMARY KEY (cod));
  169. 169. Creación de una Restricción de Integridad • Restricción de Integridad a nivel de columna columna [CONSTRAINT nombre_constraint] tipo_constraint, • Restricción de Integridad a nivel de tabla columna, ... [CONSTRAINT nombre_constraint] tipo_constraint (columna, ...),
  170. 170. Restricción de Integridad NOT NULL Asegura que valores nulos no sean ingresados en las columnas EMPLEADOS COD NOMBRE APELLIDO LUGAR_NAC ... SUC_COD 5 JUAN PEREZ COCHABAMBA 3 7 MARIA SILEZ LA PAZ 2 9 RICARDO QUIROGA COCHABAMBA 7 90 OSCAR VARGAS 7 ... Restricción NOT NULL (las filas Ausencia de la restricción NOT NULL no pueden contener un valor (cualquier fila puede contener un nulo para esta columna) valor nulo para esta columna) Restricción NOT NULL
  171. 171. Restricción de Integridad NOT NULL Definida solo para nivel de columnas SQL> CREATE TABLE empleados ( 2 cod VARCHAR2 (6) NOT NULL, 3 nombre VARCHAR2 (30) NOT NULL, 4 apellido VARCHAR2 (30) NOT NULL, 5 salario NUMBER (8,2) NOT NULL, 6 fecha_nac DATE, 7 lugar_nac VARCHAR2 (20), 8 suc_cod VARCHAR2 (6) NOT NULL );
  172. 172. Restricción de Integridad UNIQUE Restricción UNIQUE CATEGORIAS COD DESCR 1 DRAMA 2 ACCION 3 COMEDIA 4 TERROR 5 SUSPENSO INSER INTO 6 ACCION 7 INFANTIL No permitido (ACCION ya existe) Permitido
  173. 173. Restricción de Integridad UNIQUE Definida para ambos niveles, tanto a nivel de tablas como también a nivel de columnas SQL> CREATE TABLE categorias ( 2 cod VARCHAR2 (6) NOT NULL, 3 descr VARCHAR2 (100) NOT NULL, 4 CONSTRAINT cat_descr_uk UNIQUE(descr));
  174. 174. Restricción de Integridad PRIMARY KEY CATEGORIAS PRIMARY KEY COD DESCR 1 DRAMA 2 ACCION 3 COMEDIA 4 TERROR 5 SUSPENSO INSER INTO 2 CIENCIA FICCION INFANTIL No permitido (el código 20 ya existe) No permitido (el código es nulo)
  175. 175. Restricción de Integridad PRIMARY KEY Definida para ambos niveles, tanto a nivel de tablas como también a nivel de columnas SQL> CREATE TABLE categorias ( 2 cod VARCHAR2 (6) NOT NULL, 3 descr VARCHAR2 (100) NOT NULL, 4 CONSTRAINT cat_descr_uk UNIQUE(descr) 5 CONSTRAINT cat_cod_pk PRIMARY KEY(cod));
  176. 176. Restricción de Integridad FOREIGN KEY SUCURSALES COD DESCR DIRECCION 2 NORTE C. VENUS 28 3 PRIMARY KEY ... CENTRAL C. BAPTISTA 145 EMPLEADOS COD NOMBRE APELLIDO LUGAR_NAC ... SUC_COD 5 JUAN PEREZ COCHABAMBA 3 7 MARIA SILEZ LA PAZ 2 FOREIGN KEY ... 14 JOSE LOPEZ LA PAZ ... 5 No permitido (la sucursal 5 no existe en sucursales) 15 JAIME CACERES COCHABAMBA ... 2 Permitido INSER INTO
  177. 177. Restricción de Integridad FOREIGN KEY Definida para ambos niveles, tanto a nivel de tablas como también a nivel de columnas SQL> CREATE TABLE empleados ( 2 cod VARCHAR2 (6) NOT NULL, 3 nombre VARCHAR2 (30) NOT NULL, 4 apellido VARCHAR2 (30) NOT NULL, 5 salario NUMBER (8,2) NOT NULL, 6 fecha_nac DATE, 7 lugar_nac VARCHAR2 (20), 8 suc_cod VARCHAR2 (6) NOT NULL, 9 CONSTRAINT emp_suc_fk FOREIGN KEY (suc_cod) 10 REFERENCES sucursales (cod));
  178. 178. Restricción de Integridad FOREIGN KEY • FOREIGN KEY Define la columna en la tabla hija • REFERENCES Identifica la tabla y columna en la tabla maestro • ON DELETE CASCADE Permite la eliminación en la tabla maestro y eliminación de las filas dependientes en la tabla hija
  179. 179. Restricción de Integridad CHECK Define una condición que cada fila debe satisfacer ..., cod VARCHAR2(6) NOT NULL, CONSTRAINT emp_cod_ck CHECK (cod BEWTEEN 1 AND 100),...
  180. 180. Adicionar Restricciones de Integridad ALTER TABLE tabla ADD [CONSTRAINT constraint] tipo (columna); • Se puede adicionar o eliminar, pero no modificar una restricción de integridad • Se puede habilitar o deshabilitar restricciones de integridad • Se puede adicionar la restricción NOT NULL pero usando la cláusula MODIFY
  181. 181. Eliminar Restricciones de Integridad ALTER TABLE tabla DROP PRIMARY KEY | UNIQUE (columna) | CONSTRAINT constraint [CASCADE]); SQL> ALTER TABLE sucursales 2 DROP PRIMARY KEY CASCADE; SQL> ALTER TABLE empleados 2 DROP CONSTRAINT emp_suc_fk;
  182. 182. Deshabilitar Restricciones de Integridad ALTER TABLE tabla DISABLE CONSTRAINT constraint [CASCADE]; • Se ejecuta la cláusula DISABLE de la sentencia ALTER TABLE para desactivar una restricción de integridad • Se usa la opción CASCADE para deshabilitar restricciones de integridad dependientes
  183. 183. Habilitar Restricciones de Integridad ALTER TABLE tabla ENABLE CONSTRAINT constraint; • Para habilitar una restricción de integridad deshabilitada en la definición de una tabla se usa la cláusula ENABLE • Un índice UNIQUE o PRIMARY KEY es automáticamente creado si se habilita una restricción de integridad UNIQUE o PRIMARY KEY
  184. 184. Visualizar Objetos de la Base de Datos Se pueden mostrar los objetos creados en la Base de Datos accediendo a las tablas del diccionario de datos: - USER_TABLES Muestra las tablas de un usuario - USER_OBJECTS Muestra los distintos tipos de objetos de un usuario - USER_CATALOG Muestra las tablas, vistas, sinónimos y secuencias de un usuario - USER_CONSTRAINTS Muestra las restricciones de integridad de un usuario
  185. 185. Visualizar Restricciones de Integridad La consulta a la tabla USER_CONSTRAINTS muestra todas las definiciones y nombres de restricciones de integridad SQL> SELECT constraint_name, constraint_type, 2 search_condition 3 FROM user_constraints 4 WHERE table_name = ’EMPLEADOS’; CONSTRAINT_NAME CONSTRAINT_TYPE SEARCH_CONDITION ----------------------------------------------------SYS_C00674 C COD IS NOT NULL SYS_C00675 C NOMBRE IS NOT NULL EMP_SUC_FK R
  186. 186. Capítulo 11 Vistas Parte II - SQL Sentencias Básicas de SQL Restricción y Ordenamiento de Datos Funciones de SQL Obteniendo Datos desde Múltiples Tablas Obteniendo Datos Usando Funciones de Agrupación Sub-Consultas Manejo de los Valores de Entrada con SQL*Plus Manipulando Datos Creación y Manipulación de Tablas Restricciones de Integridad Vistas Secuencias, Indices y Sinónimos
  187. 187. Objetivos • • • • • Definir una vista Crear vistas Recuperar datos a través de una vista Modificar vistas Eliminar una vista
  188. 188. ¿Qué es una Vista? TABLA EMPLEADOS COD NOMBRE APELLIDO LUGAR_NAC ... SUC_COD 5 JUAN PEREZ COCHABAMBA 3 7 MARIA SILEZ LA PAZ 2 9 RICARDO QUIROGA COCHABAMBA 7 90 OSCAR VARGAS 7 ... VISTA EMPLEADOSVI COD NOMBRE APELLIDO 9 RICARDO QUIROGA 90 OSCAR VARGAS Es una tabla lógica basada en una tabla u otra vista
  189. 189. ¿Porqué usar Vistas? • • • • Restringir el acceso a la Base de Datos Hacer las consultas complejas mas sencillas Permitir la independencia de datos Presentar diferentes vistas para los mismos datos
  190. 190. Vistas Simples y Complejas Característica Vistas Simples Vistas Complejas Numero de Tablas Una Una o mas Contienen Funciones No Si Contienen Grupos de Datos No Si DML a través de una vista Si Nunca
  191. 191. Creación de Vistas CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW vista [(alias[, alias]...)] AS sub-consulta [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY] • Se puede crear una vista usando la sentencia CREATE VIEW • La sub-consulta puede contener sentencias SELECT complejas • La sub-consulta no puede contener cláusulas ORDER BY
  192. 192. Creación de Vistas SQL> CREATE VIEW empleadosvi 2 3 4 AS SELECT cod, nombre, apellido FROM empleados WHERE suc_cod = ’7’; SQL> CREATE VIEW empleadosvi2 2 3 4 5 AS SELECT cod CODIGO, nombre NOMBRE_EMP, apellido APELLIDO_EMP FROM empleados WHERE suc_cod = ’3’;
  193. 193. Modificación de Vistas • Se puede modificar una vista usando el comando CREATE OR REPLACE VIEW • Los alias de columnas en la cláusula CREATE VIEW estarán listados en el mismo orden de las columnas de la sub-consulta SQL> CREATE OR REPLACE VIEW empleadosvi2 2 (codigo, empleado_nombre, empleado_apellido) 3 4 5 AS SELECT cod, nombre, apellido FROM empleados WHERE suc_cod = ’7’;
  194. 194. Creación de Vistas Complejas Una vista compleja contiene funciones de agrupación para mostrar los valores de dos tablas SQL> CREATE VIEW emp_sucursales_vi 2 (codigo, sucursal, salario_min, salario_max) 3 4 5 6 7 AS SELECT e.suc_cod, s.descr, MIN(e.salario), MAX(e.salario) FROM empleados e, sucursales s WHERE e.suc_cod = s.cod GROUP BY e.suc_cod, s.descr;
  195. 195. Reglas para realizar operaciones DML en Vistas • Se pueden realizar operaciones DML sobre vistas simples • No se pueden eliminar filas si la vista contiene lo siguiente: - Funciones de agrupación - Una cláusula GROUP - La palabra DISTINCT
  196. 196. Reglas para realizar operaciones DML en Vistas • No se pueden modificar los datos en una vista si ésta contiene lo siguiente: - Funciones de agrupación Una cláusula GROUP La palabra DISTINCT Columnas definidas por expresiones
  197. 197. Reglas para realizar operaciones DML en Vistas • No se pueden añadir datos si existen: - Funciones de agrupación Una cláusula GROUP La palabra DISTINCT Columnas definidas por expresiones Columnas NOT NULL en las tablas base que no hayan sido seleccionadas por la vista
  198. 198. Cláusula WITH CHECK OPTION Se puede asegurar que operaciones DML con la vista estén dentro el dominio de ésta usando la cláusula WITH CHECK OPTION SQL> CREATE OR REPLACE VIEW empvi7 2 AS SELECT * 3 FROM empleados 4 WHERE suc_cod = ’7’ 5 WITH CHECK OPTION CONSTRAINT empvi7_ck; SQL> UPDATE empvi7 2 SET suc_cod = ’3’ 3 WHERE cod = ’9’; ERROR at line 1: ORA-01402: VIEW CHECK OPTION where-clause violation
  199. 199. Denegando Operaciones DML • Se puede asegurar que operaciones DML no ocurran usando la opción WITH READ ONLY • Cualquier intento de realizar una operación DML llevará a un mensaje del Servidor Oracle SQL> CREATE OR REPLACE VIEW empvi7 2 AS SELECT cod, nombre, apellido, salario 3 FROM empleados 4 WHERE suc_cod = ’7’ 5 WITH READ ONLY;
  200. 200. Eliminación de Vistas Al eliminar una vista no se pierden los datos porque la vista esta basada en las tablas de la Base de Datos DROP VIEW vista
  201. 201. Capítulo 12 Secuencias, Índices y Sinónimos Parte II - SQL Sentencias Básicas de SQL Restricción y Ordenamiento de Datos Funciones de SQL Obteniendo Datos desde Múltiples Tablas Obteniendo Datos Usando Funciones de Agrupación Sub-Consultas Manejo de los Valores de Entrada con SQL*Plus Manipulando Datos Creación y Manipulación de Tablas Restricciones de Integridad Vistas Secuencias, Indices y Sinónimos
  202. 202. Objetivos • • • • Definir secuencias, índices y sinónimos Crear, mantener y usar secuencias Crear, mantener y usar índices Crear, mantener y usar sinónimos
  203. 203. ¿Qué es una Secuencia? • Genera automáticamente números únicos • Es un objeto compartible • Es usado generalmente para crear valores de llaves primarias • Reduce código de la aplicación • Acelera la eficiencia de acceso a los valores de la secuencia cuando es cargada en la memoria cache
  204. 204. Sentencia CREATE SEQUENCE Define una secuencia para generar automáticamente números secuenciales CREATE SEQUENCE secuencia [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];
  205. 205. Sentencia CREATE SEQUENCE SQL> CREATE 2 3 4 5 6 SEQUENCE sec_emp INCREMENT BY 1 START WITH 91 MAXVALUE 100 NOCACHE NOCYCLE; Se puede verificar los valores de secuencia en la tabla del diccionario de datos USER_SEQUENCES SQL> SELECT sequence_name, min_value, max_value, 2 increment_by, last_number 3 FROM user_sequences; La columna LAST_NUMBER muestra el siguiente número de secuencia disponible
  206. 206. Pseudocolumnas NEXTVAL y CURRVAL • NEXTVAL retorna el siguiente valor de secuencia disponible - El valor que retorna es único cada vez que éste es referenciado por diferentes usuarios • CURRVAL obtiene el valor de secuencia actual - NEXTVAL debe de ser declarado para la secuencia antes de que CURRVAL contenga un valor
  207. 207. Reglas para usar NEXTVAL y CURRVAL • Se puede usar NEXTVAL y CURRVAL en: - La lista SELECT de una sentencia SELECT que no es parte de una sub-consulta - La lista SELECT de una sub-consulta en una sentencia INSERT - La cláusula VALUES de una sentencia INSERT - La cláusula SET de una sentencia UPDATE
  208. 208. Reglas para usar NEXTVAL y CURRVAL • No se puede usar NEXTVAL y CURRVAL en: - La lista SELECT de una vista - Una sentencia SELECT con la palabra DISTINCT - Una sentencia SELECT con las cláusulas GROUP BY, HAVING o ORDER BY - Una sub-consulta en sentencias SELECT, DELETE o UPDATE - Una expresión DEFAULT en las sentencias CREATE TABLE o ALTER TABLE
  209. 209. Sentencia ALTER SEQUENCE Permite cambiar el valor de incremento, valor máximo, valor mínimo, opción cycle u opción cache ALTER SEQUENCE secuencia [INCREMENT BY n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];
  210. 210. Sentencia ALTER SEQUENCE • Para modificar una secuencia se debe ser el dueño o tener privilegios ALTER para la secuencia • Solo los futuros números secuenciales serán afectados • La secuencia debe ser eliminada o re-creada para empezar la secuencia en un numero diferente • Algunas validaciones son realizadas SQL>ALTER SEQUENCE sec_emp 2 INCREMENT BY 1 3 MAXVALUE 99999 4 NOCACHE 5 NOCYCLE;
  211. 211. Sentencia DROP SEQUENCE • Para eliminar una secuencia del diccionario de datos se usa la sentencia DROP SEQUENCE • Una vez eliminada, la secuencia no podrá ser referenciada DROP SEQUENCE secuencia SQL> DROP SEQUENCE sec_emp;
  212. 212. ¿Qué es un Indice? • Es un objeto esquema • Es usado por el Servidor Oracle para acelerar la recuperación de filas usando un puntero • Es independiente de la tabla en la que esta indexado • Es usado y mantenido automáticamente por el Servidor Oracle
  213. 213. ¿Cómo son creados los Indices? • Automáticamente Un índice único es creado automáticamente cuando se define restricciones de PRIMARY KEY o UNIQUE en la definición de una tabla • Manualmente Los usuarios pueden crear índices no únicos en las columnas para acelerar el tiempo de acceso a las filas
  214. 214. Sentencia CREATE INDEX • Se puede crear un índice para una o más columnas CREATE INDEX indice ON tabla (columna [, columna]...); SQL> CREATE INDEX emp_suc_idx 2 ON empleados(suc_cod); • La vista del diccionario de datos USER_INDEXES contiene el nombre del índice y si éste es único • La vista USER_IND_COLUMNS contiene el nombre del índice, el nombre de la tabla y el nombre de la columna
  215. 215. Cuando crear un Indice • La columna es usada frecuentemente en la cláusula WHERE o en una condición de join • La columna contiene un amplio rango de valores • La columna contiene un número grande de valores null • Dos o más columnas son usadas frecuentemente juntas en la cláusula WHERE o en una condición join • La tabla es grande y se espera que la mayoría de las consultas recuperen menos que un 2-4% de las filas
  216. 216. Cuando no crear un Indice • La tabla es pequeña • Las columnas no son a menudo usadas como una condición de consulta • La mayoría de las consultas esperadas recuperen mas que un 2-4% de las filas • La tabla es actualizada frecuentemente
  217. 217. Sentencia DROP INDEX • Elimina un índice del diccionario de datos • Para eliminar un índice se debe de ser el dueño del índice o tener privilegios DROP ANY INDEX DROP INDEX indice; SQL> DROP INDEX emp_suc_idx;
  218. 218. Sinónimos Se puede simplificar el acceso a objetos creando un sinónimo (otro nombre para un objeto) • Se puede hacer referencia a una tabla que es de otro usuario • Reduce los nombres de objetos largos CREATE [PUBLIC] SYNONYM sinonimo FOR objeto;
  219. 219. Creación y Eliminación de Sinónimos • Crear un nombre corto para la vista EMP_SUCURSALES_VI SQL> CREATE SYNONYM suc_vi 2 FOR emp_sucursales_vi; • Eliminar el sinónimo SQL> DROP SYNONYM suc_vi;
  1. Gostou de algum slide específico?

    Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

×