2_mas_sql

download 2_mas_sql

of 59

description

aun mas de sql

Transcript of 2_mas_sql

  • UNIVERSIDAD PUBLICA DE EL ALTOINGENIERIA DE SISTEMAS

    El Alto, Marzo 2015By fac

    SEMESTRE I-2015

    MAS DE SQL

  • SQL Funciones

    Funciones son programas que toman cero o ms argumentos y retornan un valor nico. Existen cinco clases de funciones significativas: funciones de una sola fila, funciones de agregacin (tambin denominadas funciones de grupo), funciones analticas, funciones de referencia a objetos, y funciones definidas por el usuario.

    Funciones de una sola fila

    Funciones de una sola fila operan sobre expresiones derivadas de columnas o literales, y las mismas son ejecutadas una vez por cada fila recuperada.

  • SQL Comparacin entre funciones de una fila y funciones de grupo

  • SQL Conversin Implcita

    El SGBD Oracle soporta conversin implcita y explcita de valores de un tipo de dato a otro. Es recomendado especificar conversiones explcitas en vez de confiar en conversiones automticas o implcitas, por las siguientes razones:

    Las sentencias SQL son ms fciles de entender cuando se utilizan funciones de conversin de tipos de dato.

    La conversin de tipo de dato automtica puede tener un impacto negativo en performance.

    Las conversiones implcitas dependen del contexto en el cual las mismas ocurren y pueden no funcionar de la misma forma en todos los casos.

    El comportamiento de una conversin explcita es ms predecible. Los algoritmos de conversin implcita estn sujetos a modificaciones en diferentes versiones de software.

  • SQL El SGBD automticamente convierte un valor de un tipo de dato a otro cuando dicha conversin tiene sentido. Por Ej.: si se invoca a una funcin SQL con un argumento de un tipo de dato diferente al tipo de dato esperado por la misma, el motor implcitamente convierte el argumento al tipo de dato esperado antes de ejecutar la funcin SQL

  • SQL El siguiente cuadro muestra las conversiones implcitas

  • SQL

    Tambin existen reglas para las conversiones implcitas

  • SQL

    Conversin Explcita

    Es posible especificar explcitamente una conversin de tipo de dato utilizando funciones de conversin SQL.

    Una funcin de conversin convierte un valor de un tipo de dato a otro. Generalmente, la nomenclatura de este tipo de funciones sigue el formato: tipo_de_dato TO tipo_de_dato. El primer tipo de dato es el tipo de dato de entrada, mientras que el segundo es el tipo de dato de salida.

  • SQL

    El siguiente grfico muestra funciones SQL que explcitamente convierten un valor de un tipo de dato a otro.

  • SQL

    Argumentos de Entrada

    Las funciones pueden recibir informacin de entrada a travs de una lista de argumentos.Una funcin de una sola fila puede requerir cero o ms argumentos dependiendo del tipo de operacin que sta realice. Un argumento es un valor o una expresin de un tipo de dato especfico que la funcin utiliza para realizar la operacin y retornar un nico resultado. (Cuadro siguiente)

    Los argumentos deben ser pasados entre parntesis a la funcin en el momento que sta es invocada y delimitados por comas en caso requerir ms de un argumento. La lista de argumentos puede estar integrada por variables, expresiones y/o constantes.

    Es necesario respetar el orden y tipo de dato de los argumentos segn se especifique en la sintaxis de la funcin utilizada.

  • SQL

  • SQL

    En caso que una funcin reciba como argumento un valor o resultado de una expresin cuyo tipo de dato sea diferente al que realmente espera, el Server realizar la conversin implcita siempre y cuando sta sea vlida. De lo contrario, se producir un error.

  • SQL

    Funciones de caracteres

    Las funciones de caracteres que retornan valores del mismo tipo de dato que el argumento de entrada. Las funciones de caracteres que retornan valores numricos pueden tomar como argumento cualquier tipo de dato carcter.

  • SQL

    Lmite en valores caracteres retornados:

    Funciones que retornan valores CHAR estn limitadas en longitud a 2000 bytes.

    Funciones que retornan valores VARCHAR2 estn limitadas en longitud a 4000 bytes.

    Funciones que retornan valores CLOB estn limitadas a 4 GB.

    Reglas en el tratamiento de los lmites:

    Para funciones de tipo CHAR y VARCHAR2, si la longitud del valor de retorno excede el lmite, el motor trunca el valor y retorna el resultado sin un mensaje de error.

    Para funciones CLOB, si la longitud del valor de retorno excede el lmite, el motor dispara un error y no retorna datos

  • SQL

    Funciones numricas

    La mayora de estas funciones retornan valores representados por dgitos con precisin de 38 decimales. Las funciones COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN y TANH trabajan con precisin de 36 dgitos decimales. Las funciones ACOS, ASIN, ATAN y ATAN2 trabajan con precisin de 30 dgitos decimales.

    En la figura se muestra un listado exhaustivo de las funciones numricas existentes en el motor.

  • SQL

    Funciones para trabajar con datos NULOS

    Si una columna en una fila no posee valor, se dice que la columna es nula o contiene el valor nulo (null). Valores nulos pueden aparecer en columnas de cualquier tipo de dato que no posean restricciones de integridad NOT NULL o PRIMARY KEY. Utilice un nulo cuando el valor actual no es conocido o cuando dicho valor no es significativo.

    No utilice nulo para representar un valor cero, debido a que los mismos no son equivalentes. Actualmente, el motor trata un valor carcter con longitud cero como nulo, sin embargo, esto puede no continuar siendo verdadero en futuras versiones del producto. De esta forma, Oraclerecomienda no tratar cadenas de caracteres vacas como nulos. Toda expresin aritmtica conteniendo un nulo, siempre evala a nulo. Por ejemplo, 10 sumado a null da como resultado null. De hecho, todos los operadores (excepto concatenacin) retornan null cuando existe un operando nulo.

  • SQL

    Todas las funciones escalares (excepto REPLACE, NVL y CONCAT) retornan null cuando reciben un argumento nulo. Es posible utilizar la funcin NVL para retornar un valor en la ocurrencia de un nulo. Por ejemplo, la expresin NVL(COMM,0) retorna cero si COMM es nulo, o el valor de COMM si ste es no nulo.

    La mayora de las funciones de agregacin ignoran los valores nulos. Por ejemplo, considere una consulta que promedia los siguientes cinco valores: 1000, null, null, null, y 2000. Dicha consulta ignora los nulos y calcula el promedio como:

    (1000+2000)/2 = 1500

  • SQL

    Nulos en condiciones de comparacin

    Para verificar la existencia de valores nulos debe utilizarse nicamente las condiciones de comparacin IS NULL y IS NOT NULL. Si se utiliza cualquier otra condicin con nulos y el resultado depende del valor nulo, el resultado es desconocido (UNKNOWN). Debido a que el valor nulo representa ausencia de datos, un nulo no puede ser igual ni distinto de algn otro valor o de otro nulo. Sin embargo, el motor considera dos nulos como iguales cuando se evala una funcin DECODE.

    El motor tambin considera dos valores nulos como iguales si los mismos aparecen en claves compuestas. Esto es, el motor considera idnticas dos claves compuestas que contengan nulos si todos los componentes no nulos de las claves son iguales.

  • SQL

    Nulos en condiciones

    Una condicin que evala a UNKNOWN acta similar a FALSE. Por ejemplo, una sentencia SELECT con una condicin en la clusula WHERE que evala a UNKNOWN no retorna filas. No obstante, una condicin que evala a UNKNOWN difiere de FALSE en que operaciones posteriores realizadas sobre la condicin UNKNOWN darn como resultado UNKNOWN. Esto es, NOT FALSE evala a TRUE, pero NOT UNKNOWN evala a UNKNOWN.

  • SQL

    Funciones de fechas

    Las funciones de fecha operan sobre valores de tipo DATE (fecha/hora). Todas las funciones de fecha retornan un valor o un intervalo de valores de tipo DATE, excepto la funcin MONTHS_BETWEEN, la cual retorna un valor numrico. La figura muestra las funciones de fecha presentes en el motor.

  • SQL

    SYSDATE

    La funcin SYSDATE retorna la fecha y hora corriente. El tipo de dato del valor retornado es DATE. La funcin no requiere argumentos. En sentencias SQL distribuidas, esta funcin retorna la fecha y hora de la base de datos local.

  • SQL

    SYSTIMESTAMP

    La funcin SYSTIMESTAMP retorna la fecha del sistema, incluyendo fracciones de segundos y la zona horaria del sistema en el cual la base de datos reside. El tipo de retorno es TIMESTAMP WITH TIME ZONE..

  • SQL

  • SQL

    Funcin CASE (expresiones de mltiples condiciones)

    Las expresiones CASE pueden clasificarse en dos tipos generales: expresiones sencillas y expresiones de mltiples condiciones.

    A travs de las expresiones CASE de mltiples condiciones puede utilizarse una combinacin de condiciones. La sintaxis se muestra en la figura siguiente.

  • SQL

    En este tipo de expresiones, el motor busca de izquierda a derecha la primera ocurrencia de condicin que sea verdadera, y devuelve return_expr. Si ninguna de las condiciones (condition) es verdadera y existe una clusula ELSE, el motor devuelve else_expr. En caso contrario, el motor devuelve un valor nulo.

    El nmero mximo de argumentos en una expresin CASE es de 255, y cada par WHEN...THEN cuenta como dos argumentos. Para evitar exceder el lmite de 128 posibilidades, es posible anidar expresiones CASE. Esto es, return_expr puede ser en s misma una expresin CASE.

  • SQL

    Funcin DECODE

    Si expr y search contienen datos carcter, el motor los compara utilizando semntica de comparacin sin completar con espacios en blanco. expr, search y result pueden ser de cualquiera de los tipos CHAR, VARCHAR2, NCHAR o NVARCHAR2. La cadena de caracteres retornada es de tipo VARCHAR2. Los valores search, result y default pueden ser derivados de expresiones. El motor evala cada valor search nicamente antes de compararlo a expr. Como consecuencia, nunca se evala un valor search si un valor search previo es igual a expr (grfico sgte) .

  • SQL

  • SQL

    El motor automticamente convierte el valor expr y cada valor search al tipo de dato del primer valor search antes de realizar la comparacin. El motor automticamente convierte el valor de retorno al tipo de dato del primer valor result. Si el primer valor result posee tipo de dato CHAR o es nulo, se convierte el valor de retorno al tipo de dato VARCHAR2.

    En una funcin DECODE, el motor considera dos valores nulos como equivalentes. Si expr es nulo, se retorna el valor result del primer searchque tambin es nulo. DECODE no necesariamente debe retornar un valor; la funcin puede retornar nulo (graf. Sgte).

  • SQL

    El nmero mximo de componentes en la funcin DECODE, incluyendo expr, searches, results y default, es 255.

  • SQL

    Ejercicios

    Pruebe los siguientes ejercicios:

  • SQL

    Para el viernes 06/03/2015 o martes 10/03/2015 pruebe los ejercicios que vienen en el archivo adjunto (formatos.doc)

  • SQL

    Visualizacin de datos de varias tablas

    Una base de datos posee muchas tablas donde se almacenan datos. En el material anterior Escritura de sentencias SQL SELECT bsicas (de 27-08-2013 y hoy) se vio cmo escribir consultas simples que seleccionan datos de una nica tabla. La potencialidad primaria de bases de datos relacionales es la capacidad de unir dos o ms tablas relacionadas y acceder a informacin. Utilizando la sentencia SELECT, es posible escribir consultas avanzadas que satisfacen requerimientos de usuario.

    Este tema focaliza la atencin en la consulta a datos a partir de ms de una tabla utilizando uniones de tabla. Oracle ha enriquecido las capacidades al realizar uniones en conformidad al estndar ANSI/ISO SQL1999. Dicho tema abarca la funcionalidad de los varios tipos de uniones existentes, y ejercita la sintaxis apropiada en cada caso.

  • SQL

    Descripcin de claves ajenas (Foreign Key)

    Una clave primaria no puede contener valores nulos. Esto es debido a que los valores de clave primaria son utilizados para identificar filas de manera unvoca en una tabla; si existieran valores de clave primaria nulos implica que no sera posible identificar algunas filas de la tabla. Dicho de otra forma, si dos o ms filas de la tabla poseen valores nulos en su clave primaria, no sera posible distinguirlas. Este tipo de restriccin de clave, o restriccin de integridad sobre una relacin, es impuesto sobre una o ms columnas de una tabla individual.

    Por otro lado, restricciones de clave especificadas sobre dos tablas son utilizadas para mantener la consistencia entre filas de ambas tablas. Informalmente, una restriccin de integridad referencial asevera que una fila en una tabla haciendo referencia a otra tabla debe referenciar a una fila existente en la tabla destino. Por ejemplo, la columna DEPARTMENT_ID de la tabla EMPLOYEES proporciona el nmero de departamento en el cual trabaja cada empleado; esto es, su valor en cada fila de la tabla empleado debe coincidir con el valor de la columna DEPARTMENT_ID de alguna de las filas en la tabla DEPARTMENTS.

  • SQL

    Una restriccin de integridad referencial se establece a travs de una clave fornea (graf. Sgte). En el ejemplo citado, la columna DEPARTMENT_ID en la tabla EMPLOYEES es una clave fornea y referencia a la tabla DEPARTMENTS, ya que sus valores (en EMPLOYEES) se corresponden a valores de clave primaria en la tabla DEPARTMENTS. Una clave fornea puede contener valores nulos, lo que implica que la fila correspondiente no posee una fila relacionada en la tabla destino.

  • SQL

    Una clave fornea puede hacer referencia a la misma tabla, estableciendo una autorelacin. Por ejemplo, la columna MANAGER_ID de la tabla EMLPOYEES establece una autorelacin entre empleados. Para un empleado determinado, la clave fornea MANAGER_ID referencia a otra fila en la misma tabla EMPLOYEES que corresponde al empleado director del empleado en cuestin (graf. sgte.).

  • SQL

    Unin de tablas La condicin WHERE

    Para consultar datos a partir de ms de una tabla, es necesario identificar columnas comunes que establezcan una relacin entre las tablas. En la clusula WHERE, se define la relacin entre las tablas que aparecen en la clusula FROM utilizando operadores de comparacin. Dicha relacin puede ser especificada utilizando una clusula JOIN en vez de la clusula WHERE. La clusula JOIN es una caracterstica nueva en Oracle Server, adicionada para satisfacer el estndar ISO/ANSI SQL1999. Una consulta de mltiples tablas sin una relacin de este tipo es conocida como producto cartesiano o unin cruzada (cross join).

    El operador ms comn utilizado para relacionar dos tablas en el operador de igualdad (=). Se denomina unin de igualdad si se relacionan dos tablas utilizando el operador de igualdad. La unin de igualdad tambin es denominada unin simple, unin interna o equijoin. Este tipo de unin combina filas de dos tablas que poseen valores equivalentes para las columnas especificadas, y retorna nicamente las filas que satisfacen la condicin de igualdad.

  • SQL

  • SQL

    Cuando la clusula FROM incluye ms de dos tablas, el motor sigue un algoritmo de unin tomando conjuntos de dos tablas por vez .

  • SQL

    Condiciones adicionales a la unin de tablas

    Adems de especificar la condicin de unin en la clusula WHERE, es posible especificar otras condiciones para limitar las filas recuperadas. Tales uniones son denominadas uniones complejas.

  • SQL

    Ambigedad de columnas

    Si mltiples tablas poseen los mismos nombres de columna, los nombresde columna duplicados deben ser cualificados en la consulta con elnombre de tabla o alias correspondiente (excepto cuando se utilizasintaxis ANSI SQL). La cualificacin de nombres de columna evitaambigedad e incrementa la legibilidad de la consulta.

  • SQL

    Utilizacin de Alias de las tablas

    De la misma forma que para las columnas, las tablas tambin puedentener alias. El nombre alias de la tabla se especifica al lado de la tabla,separado con un espacio. Los alias de tabla incrementan la legibilidad dela consulta. Los mismos tambin pueden ser utilizados para acortar losnombres de tabla largos con nombres alias reducidos en tamao.

    Cuando tablas (o vistas) son especificadas en la clusula FROM, Serverbusca los objetos en el esquema (o usuario) conectado actualmente a labase de datos. Si la tabla pertenece a otro esquema, es necesariocualificar el nombre de tabla con el nombre del esquema correspondiente(esto puede evitarse utilizando sinnimos, los cuales sern tratados msadelante).

  • SQL

    Reglas de cualificacin:

    Es posible utilizar el nombre del propietario (o esquema) para cualificar un nombre de tabla.

    Es posible utilizar el nombre de tabla o el nombre de tabla y el esquema para cualificar una columna.

  • SQL

    Es posible cualificar un nombre de columna con su esquema y tablanicamente cuando el nombre de tabla ha sido cualificado con elesquema correspondiente.

    Cuando se utilizan nombres de alias de tabla, deben cualificarse losnombres de columna con el alias nicamente; cualificar las columnas conel nombre de tabla producir un error

  • SQL

    Uniones de NO igualdad

    Si la consulta relaciona dos tablas utilizando un operador de igualdad (=), la misma es una unin de igualdad, tambin denominada unin interna o equijoin. Si se utiliza cualquier otro operador para relacionar las tablas en la consulta, la misma es denominada unin de no igualdad.

  • SQL

    Uniones externas

    Una unin interna retorna slo las filas coincidentes de ambas tablas. Aveces, es necesario visualizar los datos de una tabla an si no existe la filacorrespondiente en la tabla relacionada. Para realizar esto, Oracle Serverprovee un mecanismo denominado unin externa.

    La unin externa retorna resultados basada en al condicin de unininterna, as como tambin en las filas no coincidentes de una o ambastablas.

    En la sintaxis SQL tradicional, el smbolo ms encerrado entre parntesis, (+), denota una unin externa en la consulta. Escriba (+) al lado del nombre de columna de la tabla donde puede no existir una fila correspondiente.

  • SQL

    Por ejemplo, para escribir una consulta que ejecute una unin externa delas tablas A y B y retorne todas las filas de A, se aplica el operador deunin externa (+) a todas las columnas de B en la condicin de unin.Para todas las filas en A que no posean filas coincidentes en B, la consultaretorna valores nulos para las columnas de B. Dicho de otra manera, eloperador de unin externa (+) va del lado de la relacin donde secompleta con valores nulos. Por ejemplo, para listar el pas (de la tablaCOUNTRIES) y la ciudad (de la tabla LOCATIONS), mostrando todos lospases que pertenecen a la tabla COUNTRIES sin importar si poseen o nociudades relacionadas en la tabla LOCATIONS. Para ejecutar esta uninexterna, se utiliza un operador de unin externa junto a todas lascolumnas de la tabla LOCATIONS en la clusula WHERE.

  • SQL

    El operador de unin externa (+) puede aparecer nicamente en laclusula WHERE de una sentencia SELECT. Si existen mltiples condicionesde unin entre las tablas, el operador de unin externa debe ser utilizadoen todas ellas.

  • SQL

    Una unin externa, conteniendo el operador (+), no puede sercombinada con otra condicin utilizando los operadores OR o IN.

  • SQL

  • SQL

    Sintaxis de uniones externas

    Una unin externa izquierda es una unin entre dos tablas que retornafilas basada en la condicin de comparacin, as tambin como filas nocoincidentes de la tabla que aparece del lado izquierdo en la clusulaFROM (o JOIN en sintaxis ANSI). Por ejemplo, si se combinan las tablas Ay B (FROM A, B), y se desea visualizar todas las filas de A, el operador deunin externa es ubicado junto a todas las columnas de B. Esto es unaunin externa izquierda. Notar el orden en que aparecen las tablas en laclusula FROM.

  • SQL

    Una unin externa derecha es una unin entre dos tablas que retornafilas basada en la condicin de comparacin, as tambin como filas nocoincidentes de la tabla que aparece del lado derecho en la clusula FROM(o JOIN en sintaxis ANSI)

  • SQL

    Cabe resaltar que una consulta incluyendo una unin externa de tablas puede ser escrita tanto por izquierda como por derecha .

    Una unin externa completa (o full) es una unin entre dos tablas queretorna filas basada en la condicin de comparacin, as tambin comofilas no coincidentes de la tabla del lado izquierdo y filas no coincidentesde la tabla del lado derecho de la clusula JOIN ( sintaxis ANSI). Porejemplo, suponer que se desea listar todos los apellidos de los empleadoscon sus nombres de departamento. Se desea incluir en el listado a todoslos empleados, an si los mismos no poseen un departamento asignado.completa resuelve este requerimiento

  • SQL

    Y tambin se desea incluir en el listado a todos los departamentos, an sino existen empleados trabajando en dicho departamento. Una uninexterna.

    En sintaxis Oracle, una consulta de unin externa completa no puedeescribirse en forma directa utilizando el operador de unin externa (+)

  • SQL

    Una forma de escribir una consulta de unin externa completa en sintaxisOracle es a travs del operador UNION

  • SQL

    Unin de una misma tabla

    Una autounin combina una tabla a s misma. El nombre de la tablaaparece dos veces en la clusula FROM, con diferentes nombres de aliasobligatoriamente. Los dos alias son tratados como dos tablas diferentes, ylas mismas se combinan de la misma forma que cualquier conjunto deotras tablas, a travs de columnas en comn .

  • SQL

    Cuando se ejecuta una autounin en sintaxis ANSI, siempre debe utilizarsela sintaxis JOIN...ON. Los tipos de unin NATURAL, y JOIN...USING nopueden ser utilizados

  • SQL

    Tambin tenemos mas UNIONES como se grafica en los siguientes:

  • SQL

  • SQL

    EJERCICIOS: Uniones de dos tablas

    Uniones de ms de dos tablas