Está en la página 1de 27

PBD3301 PROGRAMACIN DE BASE DE DATOS

Uso de Funciones de una Fila


Funciones SQL
Las funciones son una caracterstica muy poderosa del SQL y ellas pueden ser
usadas para:

Realizar clculos sobre los datos.

Modificar datos individuales.

Manipular la salida para grupos de filas.

Formatear fechas y nmeros para ser visualizadas.

Convertir tipos de datos de columnas.

Funciones SQL
Las funciones que operan con una fila (single-row):

Operan sobre cada una de las fila y retornan un resultado por cada una
de ellas.

Existen diferentes funciones de: caracteres, numricas, fechas,


conversin y general.

Las funciones que operan con mltiples filas (multiple-row):

Se pueden manipular grupos de filas.

Entregan un resultado por grupo de filas.

Funciones SQL de una Fila


Sintaxis:

nombre_funcin: es el nombre de la funcin SQL que se va a utilizar


argumentoN: pueden ser constantes proporcionadas por el usuario,
valores variables, nombre de columnas y expresiones

nombre_funcin [(argumento1, argumento2, )]

Funciones SQL de una Fila

Funciones de caracteres: aceptan un caracter como argumento o


parmetro de entrada y retorna cualquier valor de tipo caracter y
nmero.

Funciones numricas: aceptan como entrada un nmero y retornan


un nmero.

Funciones de fechas: operan sobre valores de tipo fecha (DATE).


Todas las funciones de fechas retornan una fecha excepto la funcin
MONTHS_BETWEEN que retorna un nmero.

Funciones de Conversin: transforman un valor desde un tipo a otro.

Funciones Generales: validan una expresin para retornar un valor.

Funciones de Caracteres
Las Funciones de caracteres se dividen en:

Funciones de Transformacin o Manipulacin.

Funciones de Conversin de texto en minscula o mayscula.

NOTA: Las funciones que se mencionan a continuacin son algunas de las ms


utilizadas en SQL.
Funciones de Caracteres
Funciones de conversin del texto a maysculas y minsculas:

LOWER: Convierte el texto a minsculas


LOWER(columna|expresin)

UPPER: Convierte el texto a maysculas


UPPER(columna|expresin)

INITCAP: Coloca la primera letra de cada palabra en mayscula


INITCAP(columna|expresin)

Funciones de reemplazo o manipulacin de caracteres:

CONCAT: concatena el valor del primer caracter con el valor del


segundo caracter. Equivalente al operador de concatenacin ||.
CONCAT(columna1|expresin1 ,columna2|expresin2)

SUBSTR: obtiene los n siguientes caracteres de la columna o texto a


partir de la posicin m. Si no se indica n, se recuperan los caracteres
desde la posicin m hasta el final.
SUBSTR(columna|expresin,m[,n])

LENGTH: obtiene el nmero de caracteres o largo de la expresin.

LENGTH(columna|expresin)

RTRIMLTRIM: Elimina los espacios en blanco a la derecha (RTRIM)


a la izquierda (LTRIM) de la columna o expresin.
RTRIM(columna|expresin)
LTRIM(columna|expresin)

REPLACE: busca el texto especificado en la columna o expresin y lo


cambia por el texto indicado como reemplazo
REPLACE(columna|expresin, texto_a_buscar, texto_reemplazo)

TRIM: Elimina los espacios en blanco a la izquierda y a la derecha del


texto o columna.
TRIM(columna|expresin)

LPAD-RPAD: rellena el texto a la izquierda (LPAD) a la derecha


(RPAD) n posiciones con el caracter indicado.
LPAD(columna|expresin,n,caracter_de_relleno)
RPAD(columna|expresin,n,caracter_de_relleno)

INSTR: obtiene la posicin en la se encuentra el texto buscado en la


columna o expresin. Opcionalmente se puede indicar la posicin inicial
(m) desde donde se desea comenzar la bsqueda y la ocurrencia o
nmero de posicin (n) del texto buscado. Por defecto ambas posiciones
es 1.
INSTR(columna|expresin, texto_buscado, [,m] ],n])

TRIM(caracter FROM columna|expresin): Elimina el carcter


especificado de la derecha e izquierda de la columna o expresin
TRIM(caracter FROM columna|expresin)

Funciones de Nmeros

ROUND: redondea la columna, expresin o valor a n posiciones


decimales. . Si no se especifica n o su valor es cero, el valor se
redondea al valor entero. Si n es negativo, los nmeros a la izquierda del
punto decimal se redondean a decenas, centenas etc.
ROUND(columna|expresin,n)

TRUNC: Trunca la columna, expresin o valor a n posiciones decimales.


Si no se especifica n decimales el valor es 0, por lo tanto se trunca el
valor slo en su parte entera. Por defecto en cero. Si n es negativo
trunca hacia la izquierda del punto decimal (coloca cero).
TRUNC(columna|expresin,n)

MOD: Devuelve el resto que resulta de dividir m por n.


MOD(m,n)

Funciones de Fecha

La Base de Datos Oracle almacena las fechas en un formato numrico


interno: siglo, ao, mes, da, horas, minutos y segundos.

El formato por defecto de visualizacin de las fechas es :DD-MON-RR,


donde DD corresponde al da, MON al mes en 3 letras y RR al ao en 2
dgitos

segn el siglo.

Cuando se desea generar una condicin por una fecha en particular,


sta debe ir entre comillas simples.

El formato de fecha RR es similar al elemento YY, pero se puede utilizar para


especificar diferentes siglos:

Funciones de Fechas

SYSDATE: retorna la fecha y hora actual de la Base de Datos


SYSDATE

MONTHS_BETWEEN: obtiene la diferencia en meses entre las dos


fechas. El resultado puede ser positivo o negativo. Si fecha1 es posterior
a fecha2, el resultado es positivo, si fecha1 es anterior a fecha2, el
resultado es negativo. La parte no entera del resultado representa una
porcin del mes.
MONTHS_BETWEEN(fecha1,fecha2)

ADD_MONTHS: aade a la fecha el nmero de meses indicado por n. El


valor de n debe ser un nmero entero y puede ser negativo.
ADD_MONTHS(fecha,n)

NEXT_DAY: retorna la fecha del da de la semana del argumento busca


y que es posterior a la fecha entregada. El da puede ser el nombre del
da (ingls o espaol segn como est configurada la Base de Datos) el
nmero del da de la semana 1=Lunes, 2=Martes etc.
NEXT_DAY(fecha,da)

LAST_DAY: obtiene el ltimo da del mes de la fecha especificada.


LAST_DAY(fecha)

ROUND: redondea la fecha al formato indicado. El formato puede ser:


ROUND(fecha,['formato'])

- YEAR: redondea la fecha al ao.


- MONTH: redondea la fecha al mes.

TRUNC: trunca la fecha al formato indicado. El formato es el mismo al


usado por ROUND.
TRUNC(fecha,['formato'])

Conversin de Tipos de Datos


En algunos casos, el servidor Oracle usa tipos de datos distintos a los que se
requieren. Cuando esto sucede, se debe convertir al tipo de datos que se
requiere.
La conversin de un tipo de dato a otro puede ser efectuada en forma
implcita o automtica por el servidor Oracle o en forma explcita por
el usuario usando funciones de conversin.
Conversin de Tipos de Datos Implcita

La asignacin de valores tiene xito si el servidor Oracle puede convertir


el tipo de dato del valor usado en el tipo de dato que se encuentra
almacenado.

Para asignaciones, el servidor Oracle puede convertir automticamente


siempre que el valor a convertir tenga un formato vlido al tipo de dato
en el que se convertir
DE

VARCHAR2 o CHAR

NUMBER

VARCHAR2 o CHAR

DATE

Conversin de Tipos de Datos Explcita


Oracle proporciona tres funciones para convertir en forma explcita un tipo de
dato en otro:

TO_CHAR: Obtiene un texto a partir de un nmero o fecha.


Opcionalmente se puede dar un formato especfico de conversin.

TO_NUMBER: Convierte textos en nmeros, indicndole, si se desea,


el formato de salida.

TO_DATE: Convierte textos en fechas, indicndole, si se desea, el


formato de salida.

Uso de Funcin TO_CHAR de Fechas


Se puede usar la funcin TO_CHAR para convertir la fecha desde su
formato por defecto a un formato especificado por el usuario.
TO_CHAR(fecha, ' formato_conversin')

El formato de conversin:

Debe ir entre comillas simples.

Puede incluir cualquier elemento de formato de fecha vlido.

Debe ir separado del valor fecha por una coma

Los principales elementos de formatos de fechas vlidos son:

YYYY: ao en formato de 4 dgitos.

YEAR: ao en palabras.

MM: mes en formato de 2 dgitos.

MONTH: nombre completo del mes.

MON: las tres primeras letras del mes.

DY: da de la semana abreviado en tres letras.

DAY: da completo de la semana en palabras.

DD: da del mes en formato de dos dgitos.

Los principales elementos de horas vlidos para los formatos de fechas son:

AM o PM: indicador de meridiano.

HH: hora del da

HH12: hora del da 1 a 12

HH24: hora del da de 0 a 23

MI: minutos (0-59).

SS: segundos (0-59).

/ . , : separadores que se ven reflejados en el formato final de la fecha.

"caracteres_a_visualizar : cadena de caracteres a visualizar en el


formato final de la fecha.

Los sufijos que se pueden utilizar en los elementos de fechas y horas para
modificar la forma de visualizacin:

SP: muestra el nmero en palabras. Ej: para el 04 muestra la palabra


cuatro.

SPTH o THSP: muestra en palabras el nmero ordinal. Ej: para 04


muestra la palabra cuarto.

Uso de Funcin TO_CHAR de Nmeros


Cuando se desean trabajar los valores numricos como una cadena de
caracteres se deben convertir esos nmeros a un tipo de dato caracter
utilizando la funcin TO_CHAR. Esta funcin convierte un dato de tipo
NUMBER a un dato de tipo VARCHAR2.
TO_CHAR(nmero, ' formato_conversin')

El formato de conversin:

Debe ir entre comillas simples.

Puede incluir cualquier elemento de formato de nmero vlido.

Debe ir separado del valor nmero por una coma:

Otros elementos de formatos de nmeros vlidos:

G: devuelve el separador de grupo en la posicin especificada. Ejemplo:


9G999 Resultado: 1.234

D: devuelve el carcter decimal en la posicin especificada (defecto es


punto). Ejemplo: 9999D99 Resultado: 1234,00

V: multiplica por 10 n veces (n = nmero de 9s despus V). Ejemplo:


99999V9999 Resultado: 12340000

Principales elementos de formatos de nmeros vlidos:


EJEMPL
O
ELEMENTO

DESCRIPCI
N

(con el
valor
1234)

RESULTADO

Representa
un nmero.

999999

1234

Fuerza a
que se
muestre un
cero

099999

001234

Coloca un
signo
dlar.

$99999
9

$1234

Coloca el
smbolo
local de la
moneda.

L99999
9

$1234

Coloca un
punto
decimal en

999999
.99

1234.00

la posicin
especificad
a.
,

Coloca un
separador
de miles.

99,999

1,234

Funciones Generales
Estas funciones trabajan con cualquier tipo de datos y se relacionan con el uso
de valores nulos en la lista de expresiones:

NVL: Si el valor de expr1 es NULO , devuelve el valor de expr2. Si no es


NULO retorna el valor de expr1.

Uso de Funcin NVL

Si expr1 es NULO , devuelve el valor de expr2. Si no es NULO retorna


el valor de expr1.

Los tipos de datos que pueden ser usados son: fecha, carcter y
nmero.

El valor que retornar la funcin (expr2) debe ser del mismo


tipo de dato de expr1.
NVL(expr1, expr2)

NVL2: Devuelve el valor de expr2 si el valor de expr1 no es NULO. Si


expr1 es NULO devuelve el valor de expr3.

Uso de Funcin NVL2

Esta funcin evala la primera expresin (expr1). Si no es Nula la


funcin NVL2 retorna la segunda expresin (expr2). Si la primera
expresin es Nula entonces la funcin retorna la tercera expresin
(expr3).

El argumento expr1 puede ser cualquier tipo de dato. Los argumentos


expr2 y expr3 pueden ser de cualquier tipo de dato excepto LONG.

El argumento expr3 debe ser del mismo tipo de dato de expr2 a menos
que expr3 sea Nulo.

El tipo de dato del valor que retorna la funcin es siempre del mismo
tipo de datos de expr2.
NVL2(expr1, expr2, expr3))

NULLIF: devuelve NULO si expr1 y expr2 son iguales. Si no lo son


devuelve el valor de expr1

Uso de Funcin NULLIF

La funcin NULLIF compara dos expresiones (expr1 y expr2 ). Si son


iguales, la funcin retorna NULO.

Si ellas no son iguales, la funcin retorna la primera expresin (expr1).

No se puede especificar NULL para la primera expresin (expr1).


.

NULLIF(expr1, expr2)

COALESCE: retorna el valor de expr1 si no es NULO. Si es NULO


devuelve el valor de expr2 si no es NULO. Si los valores de expr1 y expr2
son NULOS devuelve el valor de expr3 sino es NULO y as
sucesivamente.

Uso de Funcin COALESCE

La funcin COALESCE retorna la primera expresin NO NULA de la lista.

Todas las expresiones deben tener el mismo tipo de dato.

COALESCE(expr1, expr2, , exprn)

Expresiones Condicionales
Existe dos mtodos que se pueden utilizar para implementar el procesamiento
condicional de lgica IF-THEN-ELSE en una sentencia SQL.

Una de ellas es la expresin CASE que cumple con ANSI SQL.

El segundo mtodo es la funcin DECODE que es especfica de Oracle.

Uso de Expresiones CASE

Facilita las consultas condicionales realizando el trabajo de una


sentencia IF-THEN-ELSE en sentencias SQL.

Evala una lista de condiciones y devuelve una de las expresiones


de resultado.

En una expresin CASE simple, el servidor Oracle busca el primer par


WHEN . THEN para el cual expr sea igual a expr_comparacin y
retorna la expr_resultado.

Si en ningn par WHEN . THEN se encuentra la condicin y si existe


una clusula ELSE, entonces el servidor Oracle retorna la expr_else. Si
no existe la clusula ELSE el servidor Oracle retorna NULL (Nulo).

No se puede especificar el literal NULL para las expr_resultado y para


expr_else.

CASE expr

WHEN expr1_comparacin THEN expr1_resultado


[ WHEN expr2_comparacin THEN expr2_resultado
WHEN exprn_comparacin THEN exprn_resultado
ELSE expr_else ]

END

Uso de Funcin DECODE

Facilita las consultas condicionales realizando el trabajo de una


expresin CASE o una sentencia IF-THEN-ELSE.

La funcin DECODE traduce o descifra una expresin columna y


despus compara ste con cada valor de bsqueda. Si ambas son
iguales retorna el resultado asociado a esa bsqueda.

Si el valor por defecto es omitido y la expresin no coincide con ningn


valor de bsqueda , la funcin retorna NULL (Nulo). Si existe el defecto
entonces la funcin retorna este valor.

DECODE(columna|expresin, bsqueda1, resultado1


[, bsqueda2, resultado2 , ]
[resultado por defecto]

Uso de Funciones de Grupo


Funciones de Grupos o Agregadas
Las Funciones de caracteres se dividen en:

Funciones de Transformacin o Manipulacin.

Funciones de Conversin de texto en minscula o mayscula.

NOTA: Las funciones que se mencionan a continuacin son algunas de las ms


utilizadas en SQL.

Las funciones de grupo actan sobre un grupo de filas y


retornan un resultado por grupo.

El grupo de filas sobre las que actan estas funciones pueden ser la
tabla completa o la tabla dividida en grupos.

Lo interesante de poder crear grupos es la posibilidad de efectuar


clculos sobre ellos. Todos los valores se calculan para cada
elemento del grupo.
Las funciones de grupos aceptan un argumento como valor de entrada

Sintaxis:

funcin_de_grupo: es el nombre de la funcin SQL que se va a utilizar


columna_argumento: es el nombre de columna que sirve de
argumento a la funcin de grupo.

SELECT [columna], funcin_de_grupo(columna_argumento),


FROM tabla
[WHEREde
condicin]
Funciones
Grupo
columna]
[GROUP
AVG: BY
calcula
el promedio del valor de n, ignorando los valores Nulos.
[ORDER BY columna];
AVG([DISTINCT|ALL] n)

COUNT: cuenta el nmero de filas, donde expr puede ser el nombre de


una columna.
COUNT({*| [DISTINCT|ALL] expr})

MAX: obtiene el mximo valor de expr, ignorando los valores Nulos.


MAX([DISTINCT|ALL] expr)

MIN: obtiene el mnimo valor de expr, ignorando los valores Nulos.

SUM: suma los valores de expr, ignorando los valores Nulos.

MIN([DISTINCT|ALL] expr)

SUM([DISTINCT|ALL] expr)

STDDEV: determina la desviacin estndar de n, ignorando los valores


Nulos.
STDDEV([DISTINCT|ALL] x)

VARIANCE: devuelve la varianza de un conjunto de nmero.

VARIANCE([DISTINCT|ALL] x)

La opcin DISTINCT hace que la funcin considere slo los


valores no duplicados.

La opcin ALL (valor por defecto) hace que la funcin considere


todos los valores incluyendo los duplicados.

El tipo de datos para expr debe ser CHAR, VARCHAR2, NUMBER, DATE.
Todas las funciones de grupo ignoran los valores Nulos. Para
sustituir los valores Nulos se deben utilizar las funciones NVL, NVL2
COALESCE.

Uso de Funcin COUNT


La funcin COUNT tiene tres formatos:

COUNT(*): retorna el nmero de filas que satisfacen el criterio de la


sentencia SELECT incluyendo filas duplicadas y filas que
contengan valores Nulos en cualquiera de sus columnas. Si se incluye
las clusula WHERE en la sentencia SELECT , COUNT(*) retorna el
nmero de filas que satisfacen o cumplen con la condicin en la clusula
WHERE.
COUNT(*)

COUNT(expr): retorna el nmero de filas que poseen valores NO


Nulos en la columna identificada por expr.
COUNT( expr )

COUNT(DISTINCT expr): retorna el nmero de filas que


contengan valores diferentes No Nulos en la columna identificada
por expr.
COUNT(DISTINCT expr )

Uso de Funcin de Grupo con valores Nulos


Las funciones de grupo ignoran los valores nulos en las columnas excepto la
funcin COUNT en su formato COUNT(*). Sin embargo, la funcin NVL fuerza a
las funciones de grupo a incluir los valores nulos.
Creando Grupos de Datos
Las funciones de grupos pueden tratar a toda la tabla como un solo gran grupo,
pero existe el caso en que se hace necesario dividir la informacin existente
en la tabla en grupos ms pequeos utilizando la clusula GROUP BY.

Restricciones de Resultados del Grupo

Para restringir las filas que se desean seleccionar se utiliza la


clusula WHERE, pero para restringir grupos de filas basado en el
resultado de una funcin de grupo se debe utilizar la clusula
HAVING.

Cuando se usa la clusula HAVING, el servidor Oracle restringe los


grupos en el siguiente orden:

1.- Las filas son agrupadas

2.- La funcin de grupo es aplicada al grupo.


3.- Se muestran los grupos que coinciden con el criterio de la clusula HAVING.

Los grupos son formados y las funciones de grupos con calculadas antes
de que la clusula HAVING se aplique a los grupos.

Para encontrar el mximo salario en cada departamento pero que sea


mayor a 8000 se debe hacer lo siguiente:

Encontrar el salario mximo por cada departamento agrupando


por nmero de departamento.

Restringir los grupos para los departamentos con un mximo


salario mayor a 8000.

Funciones de Grupo Anidadas

Se pueden anidar hasta dos funciones de grupos.


La clusula GROUP BY es obligatoria cuando se anidan funciones de
grupo.

Mostrando Datos de Mltiples Tablas


Obteniendo Datos de Mltiples Tablas
En la versin SQL de 1999 (a contar de Oracle 9i) se ide una nueva sintaxis
para consultar varias tablas. La razn fue separar las condiciones de
asociacin (Unin o Join) respecto de las condiciones de seleccin de
slo se muestran las filas que tienen una relacin de igualdad entre
las columnas usadas como nexo, los valores Nulos NO SON
CONSIDERADOS.

La forma de conseguir que la sentencia SQL retorne todos las filas de


una tabla aunque no estn relacionadas con las de otra es realizar una
asociacin lateral o unin externa conocida como OUTER JOIN Filas
(Where).
Obteniendo Datos de Mltiples Tablas
En la sintaxis:

tablaN.columnaN : indica la tabla y la columna de la que se recuperan


los datos.

JOIN table2 ON tabla1.columna = tabla2.columna : realiza una


combinacin de igualdad basada en la condicin de la clusula ON.

LEFT/RIGHT/FULL OUTER : se utiliza para realizar las combinaciones


de OUTER Join o Join Externo.

CROSS JOIN : devuelve un producto cartesiano de las dos tablas.

SELECT tabla1.columna1, tabla1.columna2, tabla2.columna1, tabla2.columna2,...


FROM tabla1
[JOIN tabla2 ON (tabla1.columa = tabla2.columna)]|

Calificacin de Columnas en un Join


[LEFT | RIGHT | FULL OUTER JOIN tabla2 ON (tabla1.columa=tabla2.columna)]|

Cuando se unen dos o ms tablas , se necesita calificar los nombres de las


[CROSS JOIN
columnas
con tabla2];
el nombre de la tabla para evitar la ambigedad. Sin los prefijos
de tabla, por ejemplo para mostrar la identificacin del departamento y su
nombre, la columna DEPARTMENT_ID en la lista SELECT podra ser de la tabla
DEPARTMENTS o la tabla EMPLOYEES. Es necesario entonces aadir el prefijo
de tabla para ejecutar la consulta. Si no hay nombres de columna comunes
entre las dos tablas , no hay necesidad de calificar las columnas pero,
utilizando el prefijo de la tabla mejora el rendimiento, ya que le dice al
servidor de Oracle exactamente dnde encontrar las columnas.
Sin embargo, calificar nombres de columna con los nombres de tabla
puede llevar mucho tiempo, sobre todo si los nombres de tabla son
largos. En su lugar, puede utilizar alias de tabla . As como un alias de
columna da una columna de otro nombre, un alias de tabla da una
tabla con otro nombre. Los alias de tabla ayudan a mantener el cdigo
SQL ms pequeo, por lo tanto, usando menos memoria.
El nombre de la tabla se especifica por completo, seguido por un
espacio y luego el alias de la tabla.

Creando Joins con la clusula ON

Para especificar las columnas por las cuales se quiere para unir
dos tablas, se utiliza la clusula ON.

La condicin de JOIN o de unin se separan de otras condiciones


de bsqueda (WHERE).

Tambin se puede usar la clusula ON para unir columnas que tengan


diferentes nombres pero contienen el mismo dato en la misma tabla o en
tablas diferentes.

Creando Joins en Tres Sentidos

Un Join en tres sentidos es la unin de tres tablas y se ejecutan de


izquierda a derecha. Esto quiere decir, que en el ejemplo el primer join
que se ejecuta es EMPLOYEES JOIN DEPARTMENTS y posteriormente el
JOIN de DEPARTMENTS con LOCATIONS los departamentos retornados por
el primer JOIN

Agregando Condiciones Adicionales a un Join

El ejemplo se utiliza la clusula ON en el Join, para agregar condiciones


se puede utilizar la clusula AND . Opcionalmente, se puede utilizar la
clusula condicional WHERE seguido de las clusulas AND que se
deseen.

Join sobre la misma tabla o Self-Join

En ocasiones se debe realizar un join sobre la misma tabla para obtener


algn dato. Por lo tanto, es necesario unir las columnas de la tabla que
contienen

el mismo dato simulando que pertenecen a tablas diferentes.

Nonequijoins

Es una condicin de unin que contiene un operador de comparacin


que no sea el operador de igualdad (=). Por simplicidad se utiliza
BETWEEN.

La relacin entre la tabla EMPLOYEES y la tabla JOB_GRADES es un


ejemplo de un nonequijoin. La columna SALARY en la tabla EMPLOYEES
oscila entre los valores de las columnas LOWEST_SAL y HIGHEST_SAL de
la tabla JOB_GRADES. Por lo tanto, cada empleado puede ser clasificado
en funcin de su salario.

Otras condiciones (por ejemplo, <= y >=) se puede utilizar, pero


BETWEEN es el ms simple.

Outer Joins o Uniones Externas

En la versin SQL de 1999 la combinacin de dos tablas que retornan


slo filas coincidentes se llama INNER JOIN o Unin Interna.

Un Join entre dos tablas que retorna el resultado del INNER JOIN
(filas que coinciden) as como las filas de la tabla a la izquierda que
no existen en tabla de la derecha del Join es una Unin Externa
Izquierda o LEFT OUTER JOIN.

Una unin entre dos tablas que retorna el resultado de un INNER


JOIN as como las filas de la tabla a la derecha que no existen en
tabla de la izquierda del Join es una Unin Externa Derecha o
RIGTH OUTER JOIN.

Una unin entre dos tablas que retorna el resultado de un INNER


JOIN as como los de la Unin Externa izquierda y las filas de la
Unin Externa Derecha es una Unin Externa Completa o FULL
OUTER JOIN.

Uso de Subconsultas para Resolver Consultas


Usando Subconsulta para Resolver un Problema
Supongamos que se quiere escribir una consulta para saber quin gana un
salario mayor que el salario de Abel.
Para resolver este problema, se necesitan dos consultas: una para ver cunto
gana Abel, y una segunda consulta para encontrar quin gana ms de esa
cantidad.
Este problema se puede resolver con la combinacin de las dos consultas,
colocando una consulta dentro de otra consulta. La consulta interna (o
subconsulta) devuelve un valor que es utilizado por la consulta externa (o
consulta principal).
El uso de una subconsulta es equivalente a realizar dos consultas secuenciales
y usar el resultado de la primera consulta como el valor de bsqueda en la
segunda consulta.
Usando Subconsulta para Resolver un Problema
Una subconsulta es una instruccin SELECT que est en una clusula
de otra instruccin SELECT. Se pueden construir poderosas declaraciones
mediante el uso de subconsultas. Pueden ser muy til cuando se necesita
seleccionar filas de una tabla con una condicin que depende de los datos de la
misma tabla.
Se pueden colocar subconsultas en una clusula SQL como:

Clusula WHERE.

Clusula HAVING.

Clusula FROM.

En la sintaxis:

operador_comparacin : corresponde a una condicin de


comparacin que pueden ser: >, =, >=, <, <>, <= (operadores
de una sola fila) o IN, ANY, ALL (operadores de mltiples filas).

SELECT lista_del_select
FROM tabla
WHERE expresin operador_comparacin
(SELECT lista_del_select
FROM tabla);

Usando Subconsulta para Resolver un Problema

Las subconsultas deben ser escritas entre parntesis.


Colocar las subconsultas en el lado derecho de la condicin de
comparacin para mejorar la legibilidad. Sin embargo, las subconsultas
pueden aparecer en cualquier lado de el operador de comparacin.
La clusula ORDER BY de la subconsulta no es necesaria.
Se deben utilizar operadores de una sola fila con subconsultas que
retornan una sola fila y operadores de varias filas con subconsultas que
retornan varias filas.

Tipos de Subconsultas

Subconsultas de una sola fila: consultas que devuelven una sola fila
desde la sentencia SELECT interna.

Subconsultas de mltiples (varias) filas: consultas que devuelven ms


de una fila desde la sentencia SELECT interna.

NOTA: Tambin hay subconsultas de varias columnas, que son consultas que
devuelven ms de una columna en la sentencia SELECT interna
Subconsultas de una Fila
Una subconsulta de una sola fila es la que devuelve una fila desde la sentencia
SELECT interna. Este tipo de subconsulta utiliza un operador de una sola fila:

= : igual que

> : mayor que

>= : mayor o igual que

< : menor que

<= : menor o igual que

En la sentencia, se resuelve la subconsulta para obtener el trabajo del


empleado 141. El valor que retorna la subconsulta (ST_CLERK) es el que utiliza
la condicin de comparacin de la consulta principal para mostrar a los
empleados que poseen el trabajo ST_CLERK (el trabajo del empleado 141).

Subconsultas de una Fila y Funciones de Grupo


Se pueden mostrar datos de una consulta principal mediante el uso de una
funcin de grupo en una subconsulta de una sola fila. La subconsulta est entre
parntesis y se coloca despus de la condicin de comparacin.
Subconsultas de Mltiples Filas
Las subconsultas que devuelven ms de una fila se llaman subconsultas de
varias o mltiples filas. Se deben utilizar operadores de varias filas, en lugar de
un operador de una sola fila, con una subconsulta de varias filas ya que
esperan uno o ms valores para comparar.

IN : igual a cualquier miembro de la lista.

ANY : compara el valor con cada valor devuelto por la subconsulta.

ALL : compara el valor con todos los valores devueltos por la


subconsulta.

En el ejemplo, para poder obtener los empleados cuyo salario sea igual a
alguno de los salarios mnimos que existen en cada departamento se debe
utilizar el operador de comparacin IN.

Creando Vistas en la Base de Datos


Qu es una Vista?
Una Vista es una representacin lgica (no fsica como una tabla) basada
en una tabla, varias tablas o en otra vista. No contiene datos, pero es
similar a una ventana que a travs de ella se pueden ver o modificar datos.
Las tablas sobre las cuales est basada la vista se llaman Tablas Base. Las vista
se almacenan como una sentencia SELECT en el diccionario de datos
de la BD.
Ventajas de las Vistas

Las vistas restringen el acceso a los datos porque puede mostrar


columnas seleccionadas desde la tabla.

Una vista puede ser usada para construir una consulta simple que
recupere datos desde otra consulta compleja.

Las vistas proporcionan independencia de los datos entre el usuario y la


aplicacin.

Las vistas proporcionan a grupos de usuarios acceder a los datos de


acuerdo a criterios en particular.

Vistas Simples y Complejas


Existen dos clasificaciones para las vistas: simples y complejas. La diferencia
bsica est relacionada con las operaciones DML (INSERT, UPDATE y DELETE).
Una Vista Simple es aquella que:

Deriva de datos de una sola tabla

No contiene funciones o grupos de datos.

Se puede realizar operaciones de DML a travs de la vista.

Una Vista Compleja es aquella que:

Deriva de datos de una o ms tablas.

Contiene funciones o grupos de datos.

No siempre permite operaciones DML travs de la vista.

Creando una Vista

Para crear una vista se utiliza la sentencia CREATE VIEW.

Se debe incorporar una subconsulta en la sentencia CREATE VIEW.

La subconsulta puede contener sentencias SELECT complejas.

En la sintaxis:

OR REPLACE: recrea (vuelve a crear) la vista si sta ya existe.

FORCE: crea la vista sin importar que no existan las tablas bases.

NOFORCE: crea la vista slo si las tablas bases existen. Es la opcin


por defecto.
nombre_vista: es el nombre de la vista que se desea crear.
alias: especifica el nombre para las expresiones seleccionadas por la
consulta de la vista. Deben coincidir con el nmero de expresiones
seleccionadas por la vista. Si no se especifican alias, los nombres de
columnas de la vista sern las columna seleccionadas en la lista de la
clusula SELECT.
subconsulta: es una sentencia SELECT completa.
WITH CHECK OPTION : Especifica que solo las filas accesibles para la
vista pueden ser insertadas o modificadas. La restriccin que sigue a
esta seccin es el nombre que se le da a la restriccin de tipo CHECK
OPTION. Si no le asigna un nombre a la restriccin, el sistema asigna un
nombre por defecto en el formato SYS_Cn
WITH READ ONLY: especifica que la vista sea slo de lectura.

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW nombre_vista

NOTA: Los tipos de datos de las columnas de la vista corresponden a los tipos
de datos[(alias[,
de las
columnas de la tabla base.
alias]...)]
AS subconsulta
[WITH CHECK OPTION [CONSTRAINT nombre_constraint ]]
[WITH READ ONLY [CONSTRAINT nombre_constraint ]];

Modificando una Vista

Con la opcin OR REPLACE, una vista se puede crear incluso si ya


existe con el mismo nombre, sustituyendo as la antigua versin
de la vista. Esto significa que la vista puede ser modificada sin eliminar
o tener que volver a asignar privilegios sobre el objeto. Al asignar alias
de columna en la clusula CREATE OR REPLACE VIEW, se debe recordar
que los alias se enumeran en el mismo orden que las columnas de la
subconsulta.

Reglas para Efectuar Operaciones DML

Generalmente se pueden realizar operaciones DML sobre vistas simples.

No se pueden eliminar filas si la vista contiene: funciones de grupo,


clusula GROUP BY o la palabra DISTINCT.

No se pueden modificar datos en una vista si contiene: funciones de


grupo, clusula GROUP BY o la palabra DISTINCT.

Uso de la Clusula WITH CHECK OPTION

A travs de las vistas es posible realizar controles de la integridad


referencial. Por tanto, una vista puede servir de mecanismo para
proteger la integridad de los datos. La vista se puede utilizar para
proteger la integridad de datos, pero el uso es limitado.
La clusula WITH CHECK OPTION especifica que las inserciones y
actualizaciones que se realizan a travs de la vista no pueden crear filas
que la vista no selecciona. Por lo tanto, permite que las restricciones de
integridad y controles de validacin de datos se deban ejecutar en los
datos que se insertan o actualizan. Por lo tanto, en el ejemplo, la
clusula "with check option", no permite modificar la columna

department_id porque al hacerlo la fila ya no aparecera en la vista; s se


pueden actualizar las dems columna.

También podría gustarte