SlideShare ist ein Scribd-Unternehmen logo
1 von 219
Downloaden Sie, um offline zu lesen
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 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
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
Objetivos
• Mostrar las capacidades que tienen las sentencias
SQL
• Ejecutar algunas sentencias básicas
• Diferenciar entre las sentencias SQL y los comandos
SQL*Plus
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)
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
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 identifica que columnas (proyección)
• FROM identifica que tabla (join)
• WHERE restringe la consulta (selección, join)
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
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
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
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
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
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
Definición del Valor NULL
• NULL es un valor desconocido o inaplicable
• NULL no es lo mismo que cero tampoco un espacio
en blanco
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
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
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
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
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
...
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
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
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
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
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
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
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;
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
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
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
Interacción entre SQL y SQL*Plus
Sentencias SQL

Sentencias SQL

Buffer

Servidor
BD

SQL*Plus

Comandos
SQL*Plus

Resultado
Consulta
Reporte con
Formato
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
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

DESC[RIBE]

tabla
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)
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 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
Objetivos
• Limitar las filas recuperadas de la ejecución de una
consulta
• Ordenar las filas recuperadas de la ejecución de una
consulta
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)];
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
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
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
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
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
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
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
...
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
...
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
...
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
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
...
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
...
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
...
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]];
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
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);
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
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
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
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
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
- INITCAP

• Funciones para Manipulación de Cadenas de
Caracteres
- CONCAT
- SUBSTR
- LENGTH
- INSTR
- LPAD
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)
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
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’
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
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
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 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
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
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’
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
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’
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)
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
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
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’
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
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
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
...
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
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
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
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
...
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
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
...
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
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
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)
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
...
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
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
¿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
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
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
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
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
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
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
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
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
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];
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
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
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
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 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)
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
...
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
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
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);
Clases de Sub-Consultas
• Asincrónicas
Ambas consultas son independientes
SELECT ...
FROM empleados
WHERE .... >
(

Son independientes

SELECT ...
FROM sucursales
WHERE cod = ’7’

);
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
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
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
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
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
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
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);
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
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
Objetivos
• Escribir consultas que requieren una variable de
entrada
• Usar algunos caracteres especiales para la
sustitución de variables
• Definir variables de usuario
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
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
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
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
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
...
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
...
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
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
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]
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
...
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
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’);
Usando el Comando UNDEFINE
• Para borrar una variable, se usa el comando
UNDEFINE
SQL> UNDEFINE lugar
SQL> DEFINE
symbol lugar is UNDEFINED
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
Objetivos
•
•
•
•
•

Describir cada sentencia DML
Insertar filas en una tabla
Actualizar las filas de una tabla
Eliminar filas en una tabla
Control de transacciones
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
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
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
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’);
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);
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
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
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’;
La Sentencia DELETE
• Para eliminar las filas existentes en una tabla se usa
la sentencia DELETE
DELETE [FROM] tabla
[WHERE
condicion];
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;
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
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
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
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
Control de Transacciones
Transacción
INSERT

COMM IT

UPDATE

Savepoint A

INSERT

DELETE

Savepoint B

ROLLBACK to Savepoint B

ROLLBACK to Savepoint A

ROLLBACK
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
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
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
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
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;
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
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]...);
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
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
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
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
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
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
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 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
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
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));
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, ...),
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
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 );
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
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));
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)
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));
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
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));
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
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),...
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
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;
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
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
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
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
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
Objetivos
•
•
•
•
•

Definir una vista
Crear vistas
Recuperar datos a través de una vista
Modificar vistas
Eliminar una vista
¿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
¿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
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
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
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’;
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’;
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;
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
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
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
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
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;
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
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
Objetivos
•
•
•
•

Definir secuencias, índices y sinónimos
Crear, mantener y usar secuencias
Crear, mantener y usar índices
Crear, mantener y usar sinónimos
¿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
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}];
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
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
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
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
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}];
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;
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;
¿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
¿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
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
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
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
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;
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;
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;

Weitere ähnliche Inhalte

Andere mochten auch

Sql Consultas MáS Complejas
Sql Consultas MáS ComplejasSql Consultas MáS Complejas
Sql Consultas MáS Complejasalexmerono
 
Fundamentos de SQL
Fundamentos de SQLFundamentos de SQL
Fundamentos de SQLcamposer
 
Funciones y procedimientos en SQL
Funciones y procedimientos en SQLFunciones y procedimientos en SQL
Funciones y procedimientos en SQLRonald Rivas
 
Taller de recuperacion sql 120 consultas
Taller de recuperacion sql 120 consultasTaller de recuperacion sql 120 consultas
Taller de recuperacion sql 120 consultasoip2007
 

Andere mochten auch (20)

Sql Consultas MáS Complejas
Sql Consultas MáS ComplejasSql Consultas MáS Complejas
Sql Consultas MáS Complejas
 
Fundamentos de SQL
Fundamentos de SQLFundamentos de SQL
Fundamentos de SQL
 
Curso HTML 5 & jQuery - Leccion 9
Curso HTML 5 & jQuery - Leccion 9Curso HTML 5 & jQuery - Leccion 9
Curso HTML 5 & jQuery - Leccion 9
 
Curso HTML 5 & jQuery - Leccion 1
Curso HTML 5 & jQuery - Leccion 1 Curso HTML 5 & jQuery - Leccion 1
Curso HTML 5 & jQuery - Leccion 1
 
Curso HTML 5 & jQuery - Leccion 4
Curso HTML 5 & jQuery - Leccion 4Curso HTML 5 & jQuery - Leccion 4
Curso HTML 5 & jQuery - Leccion 4
 
Funciones y procedimientos en SQL
Funciones y procedimientos en SQLFunciones y procedimientos en SQL
Funciones y procedimientos en SQL
 
Curso HTML 5 & jQuery - Leccion 2
Curso HTML 5 & jQuery - Leccion 2Curso HTML 5 & jQuery - Leccion 2
Curso HTML 5 & jQuery - Leccion 2
 
Curso HTML 5 & jQuery - Leccion 3
Curso HTML 5 & jQuery - Leccion 3Curso HTML 5 & jQuery - Leccion 3
Curso HTML 5 & jQuery - Leccion 3
 
Curso HTML 5 & jQuery - Leccion 5
Curso HTML 5 & jQuery - Leccion 5Curso HTML 5 & jQuery - Leccion 5
Curso HTML 5 & jQuery - Leccion 5
 
Curso HTML 5 & jQuery - Leccion 7
Curso HTML 5 & jQuery - Leccion 7Curso HTML 5 & jQuery - Leccion 7
Curso HTML 5 & jQuery - Leccion 7
 
Taller de recuperacion sql 120 consultas
Taller de recuperacion sql 120 consultasTaller de recuperacion sql 120 consultas
Taller de recuperacion sql 120 consultas
 
Curso SQL - Leccion 9
Curso SQL - Leccion 9Curso SQL - Leccion 9
Curso SQL - Leccion 9
 
Curso HTML 5 & jQuery - Leccion 6
Curso HTML 5 & jQuery - Leccion 6Curso HTML 5 & jQuery - Leccion 6
Curso HTML 5 & jQuery - Leccion 6
 
Curso HTML 5 & jQuery - Leccion 11
 Curso HTML 5 & jQuery - Leccion 11 Curso HTML 5 & jQuery - Leccion 11
Curso HTML 5 & jQuery - Leccion 11
 
Curso HTML 5 & jQuery - Leccion 10
Curso HTML 5 & jQuery - Leccion 10Curso HTML 5 & jQuery - Leccion 10
Curso HTML 5 & jQuery - Leccion 10
 
Curso SQL - Leccion 11
Curso SQL - Leccion 11Curso SQL - Leccion 11
Curso SQL - Leccion 11
 
Curso SQL - Leccion 8
Curso SQL - Leccion 8Curso SQL - Leccion 8
Curso SQL - Leccion 8
 
Group by, having, order by, SQL
Group by, having, order by, SQLGroup by, having, order by, SQL
Group by, having, order by, SQL
 
Curso SQL - Leccion 6
Curso SQL - Leccion 6Curso SQL - Leccion 6
Curso SQL - Leccion 6
 
Sentencia select
Sentencia selectSentencia select
Sentencia select
 

Ähnlich wie Presentacións Sql mejorado

Sesion05 - Manipulacion de datos (Oracle)
Sesion05 - Manipulacion de datos (Oracle)Sesion05 - Manipulacion de datos (Oracle)
Sesion05 - Manipulacion de datos (Oracle)José Toro
 
Actividad2 capitulo I contenido
Actividad2 capitulo I  contenidoActividad2 capitulo I  contenido
Actividad2 capitulo I contenidolorena duque
 
APLICACIONES EMPRESARIALES
APLICACIONES EMPRESARIALESAPLICACIONES EMPRESARIALES
APLICACIONES EMPRESARIALESDarwin Durand
 
Data Amp 2017 - Whats New in SQL Server 2017
Data Amp 2017 - Whats New in SQL Server 2017Data Amp 2017 - Whats New in SQL Server 2017
Data Amp 2017 - Whats New in SQL Server 2017dbLearner
 
Comandos en consola de mysql desde el portal
Comandos en consola de mysql desde el portalComandos en consola de mysql desde el portal
Comandos en consola de mysql desde el portaleavila5
 
Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)José Toro
 
Introduccion ddl
Introduccion ddlIntroduccion ddl
Introduccion ddlyehisam
 
Introduccion ddl
Introduccion ddlIntroduccion ddl
Introduccion ddlyehisam
 
Consultas sql
Consultas sqlConsultas sql
Consultas sqljuan198
 
Introduccion ddl
Introduccion ddlIntroduccion ddl
Introduccion ddlusamn
 
Fundamentos microsoft sql server (T-Sql) (Parte I) – conceptos básicos sql e...
Fundamentos microsoft sql server (T-Sql)  (Parte I) – conceptos básicos sql e...Fundamentos microsoft sql server (T-Sql)  (Parte I) – conceptos básicos sql e...
Fundamentos microsoft sql server (T-Sql) (Parte I) – conceptos básicos sql e...JOSE AHIAS LOPEZ PORTILLO
 
T8 – Bases de Datos en MySQL (1).pptx
T8 – Bases de Datos en MySQL (1).pptxT8 – Bases de Datos en MySQL (1).pptx
T8 – Bases de Datos en MySQL (1).pptxDanaSoto7
 
MySQL. Tutorial Básico
MySQL. Tutorial BásicoMySQL. Tutorial Básico
MySQL. Tutorial BásicoJosu Orbe
 

Ähnlich wie Presentacións Sql mejorado (20)

Sesion05 - Manipulacion de datos (Oracle)
Sesion05 - Manipulacion de datos (Oracle)Sesion05 - Manipulacion de datos (Oracle)
Sesion05 - Manipulacion de datos (Oracle)
 
Actividad2 capitulo I contenido
Actividad2 capitulo I  contenidoActividad2 capitulo I  contenido
Actividad2 capitulo I contenido
 
Cursores
CursoresCursores
Cursores
 
Sentencias
SentenciasSentencias
Sentencias
 
APLICACIONES EMPRESARIALES
APLICACIONES EMPRESARIALESAPLICACIONES EMPRESARIALES
APLICACIONES EMPRESARIALES
 
Comandos mysql
Comandos mysqlComandos mysql
Comandos mysql
 
Data Amp 2017 - Whats New in SQL Server 2017
Data Amp 2017 - Whats New in SQL Server 2017Data Amp 2017 - Whats New in SQL Server 2017
Data Amp 2017 - Whats New in SQL Server 2017
 
Lecc01
Lecc01Lecc01
Lecc01
 
comandos-mysql.pdf
comandos-mysql.pdfcomandos-mysql.pdf
comandos-mysql.pdf
 
Comandos en consola de mysql desde el portal
Comandos en consola de mysql desde el portalComandos en consola de mysql desde el portal
Comandos en consola de mysql desde el portal
 
Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)
 
Introduccion ddl
Introduccion ddlIntroduccion ddl
Introduccion ddl
 
Introduccion ddl
Introduccion ddlIntroduccion ddl
Introduccion ddl
 
Consultas sql
Consultas sqlConsultas sql
Consultas sql
 
Introduccion ddl
Introduccion ddlIntroduccion ddl
Introduccion ddl
 
Fundamentos microsoft sql server (T-Sql) (Parte I) – conceptos básicos sql e...
Fundamentos microsoft sql server (T-Sql)  (Parte I) – conceptos básicos sql e...Fundamentos microsoft sql server (T-Sql)  (Parte I) – conceptos básicos sql e...
Fundamentos microsoft sql server (T-Sql) (Parte I) – conceptos básicos sql e...
 
Fundamentos de SELECT SQL
Fundamentos de SELECT SQLFundamentos de SELECT SQL
Fundamentos de SELECT SQL
 
T8 – Bases de Datos en MySQL (1).pptx
T8 – Bases de Datos en MySQL (1).pptxT8 – Bases de Datos en MySQL (1).pptx
T8 – Bases de Datos en MySQL (1).pptx
 
MySQL. Tutorial Básico
MySQL. Tutorial BásicoMySQL. Tutorial Básico
MySQL. Tutorial Básico
 
Bdii 04 sql
Bdii 04 sqlBdii 04 sql
Bdii 04 sql
 

Kürzlich hochgeladen

1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf
1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf
1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdfdiana593621
 
EL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLA
EL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLAEL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLA
EL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCEROCIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCEROCEIP TIERRA DE PINARES
 
U2_EA1_descargable TIC 2 SEM VIR PRE.pdf
U2_EA1_descargable TIC 2 SEM VIR PRE.pdfU2_EA1_descargable TIC 2 SEM VIR PRE.pdf
U2_EA1_descargable TIC 2 SEM VIR PRE.pdfJavier Correa
 
Tema 4 Rocas sedimentarias, características y clasificación
Tema 4 Rocas sedimentarias, características y clasificaciónTema 4 Rocas sedimentarias, características y clasificación
Tema 4 Rocas sedimentarias, características y clasificaciónIES Vicent Andres Estelles
 
plan espacios inspiradores para nivel primaria
plan espacios inspiradores para nivel primariaplan espacios inspiradores para nivel primaria
plan espacios inspiradores para nivel primariaElizabeth252489
 
1ro Programación Anual D.P.C.C ACTUALIZADO
1ro Programación Anual D.P.C.C ACTUALIZADO1ro Programación Anual D.P.C.C ACTUALIZADO
1ro Programación Anual D.P.C.C ACTUALIZADODJElvitt
 
Xardín de San Carlos (A Coruña) IES Monelos
Xardín de San Carlos (A Coruña) IES MonelosXardín de San Carlos (A Coruña) IES Monelos
Xardín de San Carlos (A Coruña) IES MonelosAgrela Elvixeo
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTOCIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTOCEIP TIERRA DE PINARES
 
explicacionsobrelasemanasanta-190411100653.ppt
explicacionsobrelasemanasanta-190411100653.pptexplicacionsobrelasemanasanta-190411100653.ppt
explicacionsobrelasemanasanta-190411100653.pptjosemanuelcremades
 
Presentación: Actividad de Diálogos adolescentes.pptx
Presentación: Actividad de  Diálogos adolescentes.pptxPresentación: Actividad de  Diálogos adolescentes.pptx
Presentación: Actividad de Diálogos adolescentes.pptxNabel Paulino Guerra Huaranca
 
Presentación del tema: tecnología educativa
Presentación del tema: tecnología educativaPresentación del tema: tecnología educativa
Presentación del tema: tecnología educativaricardoruizaleman
 
Escrito administrativo técnico y comerciales
Escrito administrativo técnico y comercialesEscrito administrativo técnico y comerciales
Escrito administrativo técnico y comercialesmelanieteresacontrer
 
Herbert James Drape. Erotismo y sensualidad.pptx
Herbert James Drape. Erotismo y sensualidad.pptxHerbert James Drape. Erotismo y sensualidad.pptx
Herbert James Drape. Erotismo y sensualidad.pptxArs Erótica
 
TECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptx
TECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptxTECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptx
TECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptxFranciscoCruz296518
 
la forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolarla forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolarCa Ut
 
Anna Llenas Serra. El monstruo de colores. Doctor de emociones.pdf
Anna Llenas Serra. El monstruo de colores. Doctor de emociones.pdfAnna Llenas Serra. El monstruo de colores. Doctor de emociones.pdf
Anna Llenas Serra. El monstruo de colores. Doctor de emociones.pdfSaraGabrielaPrezPonc
 
CARPETA PEDAGÓGICA 2024.docx para educacion
CARPETA PEDAGÓGICA 2024.docx para educacionCARPETA PEDAGÓGICA 2024.docx para educacion
CARPETA PEDAGÓGICA 2024.docx para educacionCarolVigo1
 

Kürzlich hochgeladen (20)

1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf
1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf
1° GRADO UNIDAD DE APRENDIZAJE 0 - 2024.pdf
 
EL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLA
EL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLAEL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLA
EL BRILLO DEL ECLIPSE (CUENTO LITERARIO). Autor y diseñador JAVIER SOLIS NOYOLA
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCEROCIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
 
U2_EA1_descargable TIC 2 SEM VIR PRE.pdf
U2_EA1_descargable TIC 2 SEM VIR PRE.pdfU2_EA1_descargable TIC 2 SEM VIR PRE.pdf
U2_EA1_descargable TIC 2 SEM VIR PRE.pdf
 
Tema 4 Rocas sedimentarias, características y clasificación
Tema 4 Rocas sedimentarias, características y clasificaciónTema 4 Rocas sedimentarias, características y clasificación
Tema 4 Rocas sedimentarias, características y clasificación
 
Actividad de bienestar docente 2016 Pereira
Actividad de bienestar docente 2016 PereiraActividad de bienestar docente 2016 Pereira
Actividad de bienestar docente 2016 Pereira
 
plan espacios inspiradores para nivel primaria
plan espacios inspiradores para nivel primariaplan espacios inspiradores para nivel primaria
plan espacios inspiradores para nivel primaria
 
1ro Programación Anual D.P.C.C ACTUALIZADO
1ro Programación Anual D.P.C.C ACTUALIZADO1ro Programación Anual D.P.C.C ACTUALIZADO
1ro Programación Anual D.P.C.C ACTUALIZADO
 
Xardín de San Carlos (A Coruña) IES Monelos
Xardín de San Carlos (A Coruña) IES MonelosXardín de San Carlos (A Coruña) IES Monelos
Xardín de San Carlos (A Coruña) IES Monelos
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTOCIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
 
explicacionsobrelasemanasanta-190411100653.ppt
explicacionsobrelasemanasanta-190411100653.pptexplicacionsobrelasemanasanta-190411100653.ppt
explicacionsobrelasemanasanta-190411100653.ppt
 
Presentación: Actividad de Diálogos adolescentes.pptx
Presentación: Actividad de  Diálogos adolescentes.pptxPresentación: Actividad de  Diálogos adolescentes.pptx
Presentación: Actividad de Diálogos adolescentes.pptx
 
Presentación del tema: tecnología educativa
Presentación del tema: tecnología educativaPresentación del tema: tecnología educativa
Presentación del tema: tecnología educativa
 
Escrito administrativo técnico y comerciales
Escrito administrativo técnico y comercialesEscrito administrativo técnico y comerciales
Escrito administrativo técnico y comerciales
 
Herbert James Drape. Erotismo y sensualidad.pptx
Herbert James Drape. Erotismo y sensualidad.pptxHerbert James Drape. Erotismo y sensualidad.pptx
Herbert James Drape. Erotismo y sensualidad.pptx
 
TECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptx
TECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptxTECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptx
TECNOLOGÍA EDUCATIVA, USO DE LAS TIC.pptx
 
la forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolarla forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolar
 
VISITA DE ESTUDO À CRUZ VERMELHA _
VISITA DE ESTUDO À CRUZ VERMELHA                   _VISITA DE ESTUDO À CRUZ VERMELHA                   _
VISITA DE ESTUDO À CRUZ VERMELHA _
 
Anna Llenas Serra. El monstruo de colores. Doctor de emociones.pdf
Anna Llenas Serra. El monstruo de colores. Doctor de emociones.pdfAnna Llenas Serra. El monstruo de colores. Doctor de emociones.pdf
Anna Llenas Serra. El monstruo de colores. Doctor de emociones.pdf
 
CARPETA PEDAGÓGICA 2024.docx para educacion
CARPETA PEDAGÓGICA 2024.docx para educacionCARPETA PEDAGÓGICA 2024.docx para educacion
CARPETA PEDAGÓGICA 2024.docx para educacion
 

Presentacións Sql mejorado

  • 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. 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. 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. 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. 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. Características de una Sentencia SELECT Selección Tabla 1 Tabla 1 Proyección Join Tabla 1 Tabla 2
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Ingreso SQL*Plus • Desde un Ambiente Windows: • Desde una línea de comandos: sqlplus[username[/password[@database]]]
  • 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. 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. Salida de SQL*Plus • Para salir de SQL*Plus se tiene el comando EXIT SQL> EXIT;
  • 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. Objetivos • Limitar las filas recuperadas de la ejecución de una consulta • Ordenar las filas recuperadas de la ejecución de una consulta
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Funciones para una Fila Funciones para una Fila Caracteres Conversiones Números Fechas
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  • 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. 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. 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. 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. Tipos de Join Join Join Interno Descripción = Non-Equijoin Join Externo Self Join BETWEEN (+) Con una tabla
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. ¿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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Objetivos • Describir que es una sub-consulta • Tipos de sub-consultas • Escribir algunos ejemplos
  • 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. 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. 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. 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. 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. Clases de Sub-Consultas • Asincrónicas Ambas consultas son independientes SELECT ... FROM empleados WHERE .... > ( Son independientes SELECT ... FROM sucursales WHERE cod = ’7’ );
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. Objetivos • Escribir consultas que requieren una variable de entrada • Usar algunos caracteres especiales para la sustitución de variables • Definir variables de usuario
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Usando el Comando UNDEFINE • Para borrar una variable, se usa el comando UNDEFINE SQL> UNDEFINE lugar SQL> DEFINE symbol lugar is UNDEFINED
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. La Sentencia DELETE • Para eliminar las filas existentes en una tabla se usa la sentencia DELETE DELETE [FROM] tabla [WHERE condicion];
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Objetivos • Describir restricciones de integridad • Crear y mantener restricciones de integridad
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Objetivos • • • • • Definir una vista Crear vistas Recuperar datos a través de una vista Modificar vistas Eliminar una vista
  • 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. ¿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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Objetivos • • • • Definir secuencias, índices y sinónimos Crear, mantener y usar secuencias Crear, mantener y usar índices Crear, mantener y usar sinónimos
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. ¿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. ¿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. 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. 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. 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. 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. 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. 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;