Oracle SQL

44
Academy SENTENCIAS SQL DE ORACLE BASES DE DATOS I CRISTIAN ESPINOZA CUARTO "2"

Transcript of Oracle SQL

Page 1: Oracle SQL

  

Academy

SENTENCIAS SQL DE ORACLE

BASES DE DATOS I

CRISTIAN ESPINOZA CUARTO "2"

Page 2: Oracle SQL

  

Academy

ORACLE SQL

OBJETIVOS:

1. Conocer la definición y aplicaciones de las principales funciones de Oracle SQL, según sus aplicaciones.

2. Poner en práctica todas estas funciones en la Consola del SQL Command Line para así ganar destreza en su aplicación.

3. Llegar a un amplio conocimiento de cómo aplicar estas funciones según sea las necesidades, proyectándonos en un futuro como excelentes DBA (Administradores de Bases de Datos).

                                 

Page 3: Oracle SQL

  

Academy

                        

FUNCIONES DE CARACTERES  

Page 4: Oracle SQL

  

Academy

Contenido de la lección: En esta lección, usted aprenderá a:

Seleccionar y aplicar funciones para el caso de conversión y o manipulación de caracteres

Seleccionar y aplicara funciones para el caso de manipulación de caracteres como LOWER, UPPER, INITCAP en una consulta de SQL.

Escribir consultas sustituyendo las variables.  

TABLA DUAL La tabla dual tiene una fila llamada “X” y una columna llamada “DUMMY (TONTA)”, es usada para crear instrucciones SELECT y ejecutar comandos no directamente relacionados con una tabla de datos especifica. Las consultas usando la tabla DUAL retornan como resultado una fila DUAL puedes ser usado para hacer cálculos como en los siguientes ejemplos y también para evaluar expresiones que no derivan de una tabla.

SELECT (319/29)+12 FROM DUAL;

FUNCIONES CARÁCTER DE UNA SOLA FILA Estas funciones están divididas en 2 categorías:

Funciones que convierten cadenas de caracteres. Funciones que pueden unir, extraer, mostrar, encontrar, pistar y recortar

cadenas de caracteres. Estas funciones pueden ser usadas en SELECT, WHERE y en clausulas ORDER BY. Para el caso de manipulación de funciones es muy importante ya que uno no puede saber siempre en que caso (mayúsculas, minúsculas o mesclado) estarán los datos registrados en la base de datos.

Page 5: Oracle SQL

  

Academy

Estas funciones te permiten tomar esos datos y mostrarlos en cualquiera de los casos que hayamos escogido.

Para los siguientes ejemplos hemos utilizado el usuario hr de Oracle.

FUNCIONES DE MANIPULACIÓN DE MAYUSCULAS/MINÚSCULAS

 

Utilizamos estas funciones cuando no conocemos como pueden estar guardados los datos , es decir no sabemos si los datos fueron guardados en mayúsculas, minúsculas u otros.

1. LOWER

Convierte caracteres alfabéticos en minúsculas

LOWER(NOMBRE_COLUMNA | EXPRESION)

SELECT first_name,last_name FROM employees WHERE LOWER(first_name)=’david’;

Funciones Caracter

Funciones de Manipulacion 

de  Casos

Funciones  de Manipulacion de 

Caracteres

LOWER UPPER INITCAP 

CONCAT SUBSTR LENGTH INSTR LPAD/RPAD TRIM REPLACE 

Page 6: Oracle SQL

  

Academy

2. UPPER

Convierte caracteres alfabéticos en mayúsculas

UPPER(NOMBRE_COLUMNA | EXPRESION) SELECT first_name,last_name FROM employees WHERE UPPER(first_name)=’DAVID’;

3. INITCAP

Convierte cadenas con la primera letra en mayúsculas y el resto en minúsculas.

INITCAP(NOMBRE_COLUMNA | EXPRESION) SELECT first_name,last_name FROM employees WHERE INITCAP(first_name)=’Peter’;

NOTA: Estas funciones antes de consultar la información deseada convierten el dato (en este caso fue el primer nombre) y lo convierte según sea el caso a minúsculas, MAYÚSCULAS, o también la primera letra MAYÚSCULA y el resto minúsculas, para luego comparar con el dato que estamos buscando que debe estar escrito según el caso que deseamos buscar.

Page 7: Oracle SQL

  

Academy

FUNCIONES DE MANIPULACIÓN DE CARACTERES  

Son usadas para extraer, cambiar el formato o cambiar en alguna forma una cadena de caracteres. Uno o más caracteres o palabras son pasados a la función y entonces esta se encarga de retornar ya una cadena cambiada, extraída o alterada de valor.

4. CONCAT Une las cadenas que le designemos, pero solo puede admitir 2 argumentos. SELECT CONCAT(first_name,last_name) FROM employees WHERE INITCAP(first_name)=’Peter’;

5. SUBSTR Devuelve una cadena con una longitud determinada, de los datos que consulto SELECT SUBSTR(CONCAT(CONCAT(first_name,last_name),email),1,8) FROM employees WHERE LOWER(first_name)=’john’;

6. LENGTH Muestra la longitud de una cadena como valor numérico. SELECT LENGTH(CONCAT(CONCAT(first_name,last_name),email)) FROM employees WHERE LOWER(first_name)=’randall’;

Page 8: Oracle SQL

  

Academy

7. INSTR Encuentra la posición numérica de un carácter nombrado. SELECT INSTR(CONCAT(CONCAT(first_name,last_name),email),’l’) FROM employees WHERE salary = 9500;

8. LPAD Devuelve una cadena con el dato que deseamos y una longitud especifica, pero si este no es suficiente el resto de la cadena se llena con el carácter como valor justificado a la derecha. SELECT LPAD(email,10,’-’) FROM employees WHERE salary < 2500;

9. RPAD Igual que el LPAD pero con justificado hacia la izquierda. SELECT RPAD(email,10,’-’) FROM employees WHERE salary < 2500;

Page 9: Oracle SQL

  

Academy

10. TRIM Remueve todos el carácter especificado, ya sea del principio o del final (Para este ejemplo utilizaremos también CONCAT para entender mejor) SELECT CONCAT(first_name,last_name) FROM employees WHERE salary < 2500;

SELECT TRIM(‘e’ FROM CONCAT(first_name,last_name)) FROM employees WHERE salary < 2500;

Page 10: Oracle SQL

  

Academy

FUNCIONES NUMÉRICAS

Page 11: Oracle SQL

  

Academy

1. ROUND Puede usarse con números y fechas. Es principalmente usado para redondear un número especificado de lugares decimales, pero también puede usarse para redondear números de la izquierda del punto decimal o números enteros. Sintaxis

ROUND(Columna|Expresion, lugares decimales). • Note que si el número de lugares decimales no es especificado o es

el cero, el número redondeará a ningún lugar decimal.

ROUND(45.926) 46 ROUND(45.926, 0) 46

• Si el número de lugares decimales es un número positivo, el

número se redondea a ese número de lugares decimales.

ROUND(45.926, 2) 45.93 • Si el número de lugares decimales es un número negativo, los

números a la izquierda del decimal son redondeados.

ROUND(45.926, -1) 50

Page 12: Oracle SQL

  

Academy

2. TRUNC

La función de TRUNC puede usarse con números y fechas. Cuando TRUNC se usa, si el número de lugares decimales no es especificado, entonces los valores predeterminados del número es cero. Sintaxis

TRUNC(Columna|Expresion, lugares decimales).

TRUNC (45.926, 2) 45.92

• Si la expresión de TRUNC no especifica el número de lugares

decimales o especifica un cero, el número se trunca para poner a cero los lugares decimales.

TRUNC (45.926, 0) 45 TRUNC (45.926) 45

Recuerde que ese TRUNC no redondea el número. Termina el número simplemente a un punto dado.

Page 13: Oracle SQL

  

Academy

3. MOD

MOD funciona para hallar el resto de un valor dividió por otro valor. MOD puede usarse para determinar si un valor es impar o par. Si usted divide un valor por 2 y hay resto, el número debe ser un número impar. Usando el MOD con 2, como en 12/2 y no hay ningún resto, el número debe de haber sido un número par.

Por ejemplo, el MOD de 5 dividió por 2 = 1.

MOD(Columna|Expresion, Columna|Numero).

SELECT MOD(1600,500) FROM DUAL; 100

No hay resto  

Si hay resto en unos y en otros no hay. 

Page 14: Oracle SQL

  

Academy

                   

FUNCIONES DE FECHA                         

Page 15: Oracle SQL

  

Academy

Contenido de la lección: En esta lección, usted aprenderá a:

Seleccionar y aplicar las funciones de una sola fila MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY, LAST_DAY, ROUND, y TRUNC que operan en los datos tipo fecha.

Explicar cómo las funciones de fecha transforman las fechas de Oracle en los datos de fecha o un valor numérico.

Demostrar el uso adecuado de los operadores aritméticos con fechas.

Demostrar el uso de las funciones SYSDATE y DATE.

1. FORMATOS DE FECHA DE ORACLE

Función de fecha que devuelve la fecha de base de datos del servidor y la hora actuales. El formato de visualización predeterminada de fechas es:

DD-MON-RR es decir, 02-diciembre-99.

Sin embargo, las Bases de Datos Oracle almacenan fechas internamente con un formato numérico, lo que representa el siglo, año, mes, día, hora, minutos y segundos. El formato de visualización predeterminada y la entrada para cualquier fecha es DD-MON-RR. Fechas válidas para Oracle están entre 1 de enero de 4 712 AC, y 31 de diciembre de 9 999, lo que representa el intervalo de fechas que se pueden almacenar con éxito en una Base de Datos Oracle.

SYSDATE

Función de fecha que devuelve la fecha de base de datos del servidor y la hora actuales.

SELECT SYSDATE FROM dual;

Page 16: Oracle SQL

  

Academy

2. OPERACIONES CON FECHAS

Los datos tipo DATE siempre almacena la información del año como un número de cuatro dígitos internos: dos dígitos para el siglo y dos dígitos para el año. Por ejemplo, las tiendas de base de datos Oracle el año 1996 o 2004, no sólo como 96 o 04. Aunque el almacenamiento interno no pierde de vista la fecha completa, cuando la columna de fecha se muestra en la pantalla, el componente de siglo no se muestra de forma predeterminada.

SUMA O RESTA DE FECHAS CON ENTEROS Permite sumar o restar a una fecha determinada una cantidad de días representadas por un numero, devolviendo como resultado un numero que representa la cantidad de días de esa operación.

SELECT ([FECHA]+[numero])

SELECT ([FECHA]-[numero])

Page 17: Oracle SQL

  

Academy

SUMA ALGEBRAICA DE 2 FECHAS Permite realizar operaciones de suma o resta entre fechas, devolviendo como resultado un numero que representa la cantidad de días producto de esa operación.

SELECT ([FECHA_1]+[FECHA_2])

SELECT ([FECHA_1]-[FECHA_2])

Además, permite combinar esta suma algebraica de fechas con otras operaciones como multiplicación, división y aplicar funciones numéricas como ROUND, TRUNC, ETC.

SELECT (([FECHA_1]+[ FECHA_2])*10)

SELECT (([FECHA_1]+[ FECHA_2])/365)

SELECT (ROUND([FECHA_1]+[FECHA_2]))

SELECT (TRUNC([FECHA_1]+[FECHA_2]))

Page 18: Oracle SQL

  

Academy

FUNCIONES DE FECHA

FUNCION DESCRIPCION

DATO

MONTHS_BETWEEN Número de meses entre dos fechas Numérico ADD_MONTHS Suma meses calendario a una fecha Date

NEXT_DAY Siguiente día de una fecha especifica DateLAST_DAY Último día del mes Date

ROUND Redondea la fecha, por mes o año DateTRUNC Trunca la fecha, por mes o año Date

MONTHS_BETWEEN Permite obtener la cantidad de meses calendario (con decimales) entre dos fechas especificas, devolviendo la cantidad de meses como un número.

SELECT MONTHS_BETWEEN([FECHA_1],[FECHA_2])

ADD_MONTHS Permite sumar una cantidad de meses a una fecha determinada, obteniendo como resultado una nueva fecha.

SELECT ADD_MONTHS([FECHA],[MESES])

Page 19: Oracle SQL

  

Academy

LAST_DAY Permite obtener la fecha del último día del mes de una fecha de referencia.

SELECT LAST_DAY([FECHA])

NEXT_DAY Permite obtener la fecha de siguiente día de la semana especificado a partir de una fecha de referencia.

SELECT LAST_DAY([FECHA],['DIA'])

Las opciones para DIA son: • SUN, MON, TUE, WED, THU, FRI y SAT (Configuración Regional en Ingles) • LUN, MAR, MIE, JUE, VIE, SAB y DOM (Configuración Regional en Español)

Page 20: Oracle SQL

  

Academy

ROUND Permite redondear (aproximar) la fecha por mes o por año a su valor inmediato superior o inferior (depende del valor más cercano).

SELECT ROUND([FECHA],['MONTH'])

SELECT ROUND([FECHA],['YEAR'])

Page 21: Oracle SQL

  

Academy

TRUNC Permite truncar (recortarr) la fecha por mes o por año a su valor inmediato inferior.

SELECT TRUNC([FECHA],['MONTH'])

SELECT TRUNC([FECHA],['YEAR'])

Page 22: Oracle SQL

  

Academy

                    

FUNCIONES DE CONVERSIÓN                      

Page 23: Oracle SQL

  

Academy

 Contenido de la lección: En esta lección, usted aprenderá a:

Ejemplos de una conversión explícita de tipos de datos y una conversión implícita de tipos de datos.

Explicar por qué es importante, desde una perspectiva empresarial, que un lenguaje se han incorporado en las capacidades de conversión de datos

Construir una consulta SQL que aplique correctamente TO_CHAR, TO_NUMBER TO_DATE y funciones de una sola fila para producir un resultado deseado.

Aplicar la fecha apropiada y/o modelo de formato de caracteres para producir un resultado deseado.

Explicar y aplicar el uso de YYYY y RRRR para volver el año correcto según los datos almacenados en la base de datos.

Cuando se crea una tabla de una base de datos, el programador de SQL debe definir qué tipo de datos serán almacenados en cada campo de la tabla. En SQL, hay varios tipos de datos diferentes. Estos tipos de datos definen el dominio de los valores que cada columna puede contener.

TIPOS DE DATOS VARCHAR2: Se utiliza para datos de caracteres de longitud variable, incluidos los números, caracteres especiales y guiones. CHAR: Se utiliza para datos de texto y caracteres de longitud fija, incluidos los números, guiones y caracteres especiales. NUMBER: Se utiliza para almacenar datos de longitud variable numérica. Sin guiones, textos, u otros datos numéricos están permitidos. De divisas se almacena como un tipo de número de datos. DATE: Se utiliza para valores de fecha y hora. Internamente, Oracle almacena las fechas como números y por la información de fecha predeterminado se muestra en forma de DD-MON-YY (por ejemplo, 19-JUN-04).

Page 24: Oracle SQL

  

Academy

El servidor de Oracle internamente puede convertir los datos VARCHAR2 y CHAR al número y tipos de datos FECHA. Se puede convertir los datos NUMBER y se remontan a tipo de datos CARÁCTER. Aunque esta es una característica conveniente, siempre es mejor hacer explícita conversiones de tipos de fecha y para garantizar la fiabilidad en las instrucciones SQL. Las cuatro funciones de conversión de tipo de datos que usted aprenderá son:

• Convertir datos tipo DATE a datos tipo CHAR. • Convertir datos tipo NUMBER a datos tipo CHAR. • Convertir datos tipo CHAR a datos tipo NUMBER. • Convertir datos tipo CHAR a datos tipo DATE.

CONVERTIR DATOS TIPO DATE A DATOS TIPO CHAR

A menudo es deseable para convertir fechas almacenadas en una base de datos por defecto en el formato DD-MON-YY a otro formato especificado por usted. La función para realizar esta tarea es:

TO_CHAR ([COLUMNA TIPO DATE], ['FORMATO DE FECHA])

El "modelo de formato” debe estar encerrado entre comillas simples y distingue entre mayúsculas y minúsculas.

Separe el valor de fecha a partir del modelo de formato con una coma. Cualquier elemento de formato de fecha válido puede ser incluido. Utilice un elemento fm para quitar los espacios en blanco o quitar ceros a la

izquierda de la salida. Utilice sp para precisar un número.

Page 25: Oracle SQL

  

Academy

Utilice th a tener el número de aparecer como un ordinal. (1 ª, 2 ª, 3 ª y así sucesivamente)

Utilice las “comillas doble” para agregar cadenas de caracteres a los modelos de formato.

Las tablas muestran los modelos de formato diferente que se puede utilizar. Al especificar los elementos de tiempo, tenga en cuenta que las horas (HH), minutos (MI), segundos (SS), y AM o PM también puede ser formateado.

Page 26: Oracle SQL

  

Academy

FECHA Y MODELOS DE FORMATO DE HORA Si una fecha de contratación de los empleados fue el 04-MAY-04, el modelo de formato con fm habría regresado 04 de mayo 2004, la supresión de la cero a la izquierda

TO_CHAR([FECHA],[‘Formato’])

CONVERTIR DATOS TIPO NUMBER A DATOS TIPO CHAR(VARCHAR2) Números almacenados en la base de datos no tienen el formato. Esto significa que no hay signos de moneda y símbolos, comas, ni decimales u otro formato. Para agregar formato, primero tiene que convertir el número a un formato de carácter. Esta conversión es especialmente útil con la concatenación.

La función de SQL que se utiliza para convertir las columnas de datos a un formato de número deseado:

TO_CHAR(NUMERO, 'MODELO DE FORMATO') La tabla muestra algunos de los elementos de formato disponibles para su uso con funciones TO_CHAR.

Page 27: Oracle SQL

  

Academy

CONVERTIR DATOS TIPO CHAR A DATOS TIPO NUMBER

A menudo es deseable para convertir una cadena de caracteres en un número. La función de esta conversión es la siguiente:

TO_NUMBER(CARACTER STRING, 'MODELO DE FORMATO') Esto convierte a un valor no numérico, tales como "450" a un número, sin las comillas simples. Las comillas simples son caracteres. El "450" se almacenan en la base de datos como datos de caracteres, y la siguiente consulta se convierte en un número para que las operaciones aritméticas se pueden realizar. No se puede realizar cálculos con datos de caracteres.

Page 28: Oracle SQL

  

Academy

SQL Plus muestra una cadena de signos de almohadilla (#) en lugar de un número entero cuyos dígitos mayor que el número de dígitos proporcionados en el modelo y el formato de número se redondea a dos decimales siempre en el modelo de formato. Oracle Application Express Oracle devuelve un error - NÚMERO NO VÁLIDO, si el modelo de formato no coincide con el número real devuelto por la base de datos.

CONVERTIR DATOS TIPO CHAR A DATOS TIPO DATE.

Para convertir una cadena de caracteres en un formato de fecha, utilice:

TO_DATE ('CADENA DE CARACTERES', 'MODELO DE FECHA') Esta conversión tiene un valor NONDATE tipo STRING como "3 de noviembre de 2001 " y lo convierte en un valor de fecha. El modelo de formato indica al servidor que la cadena de caracteres "se parece":

Al hacer un personaje a la conversión, la fecha, el FX (formato exacto) modificador especifica la concordancia exacta para el argumento de la fuente y el modelo de formato de fecha. En el ejemplo siguiente, tenga en cuenta que "May10" no tiene espacio entre''de mayo "y "10 ". El modelo de formato FX coincide con el argumento de carácter, ya que también no tiene ningún espacio entre"Mon "y" DD ".

Page 29: Oracle SQL

  

Academy

REGLAS DEL MODIFICADOR FX

Puntuación y el texto se cita en el argumento de caracteres debe coincidir con las partes correspondientes del modelo de formato exactamente (excepto para el caso).

El argumento de carácter no puede tener espacios en blanco adicionales.

Sin fx, el Servidor de Oracle ignora los espacios en blanco extra.

Los datos numéricos en el argumento personaje debe tener el mismo número de dígitos que el elemento correspondiente en el modelo de formato. Sin fx, los números en el argumento caracteres se pueden omitir los ceros iniciales.

FORMATOS DE FECHA: RR Y YY No ha pasado tanto tiempo desde el siglo pasado de 1900 a 2000. Junto con este cambio se produjo una considerable confusión en cuanto a si una fecha escrita en el 02-ENE-00 se interpretaría como 02 de enero 1900 o enero 2, 2000. Afortunadamente, Oracle tiene una forma de mantener estas fechas almacenada y recuperable con el siglo correcto. Algunas reglas: Si el formato de fecha se especifica con el formato AA o AAAA, el valor de retorno será en el mismo siglo en el siglo actual. Por lo tanto, si el año es 1995 y se utiliza el formato AA o AAAA, todo está bien y las fechas serán en el 1900. Sin embargo, si el año es 2004 y se utiliza el formato AA o AAAA para una fecha como 1989, obtendrá 2.089. Tal vez no lo que pretende. Si el formato de fecha se especifica con el RR o el formato de RRRR, el valor de retorno tiene dos posibilidades. Si el año es de entre 00 - 49: Fechas 0-49: La fecha será en el siglo actual Fechas 50-99: La fecha será en el siglo pasado Si el año es de entre 50 - 99: Fechas 0-49: La fecha será en el próximo siglo Fechas 50-99: La fecha será en el siglo actual

Page 30: Oracle SQL

  

Academy

Page 31: Oracle SQL

  

Academy

EXPRESIONES CONDICIONALES

Page 32: Oracle SQL

  

Academy

Contenido de la lección: En esta lección, usted aprenderá a:

Comparar y constatar las funciones DECODE Y CASE Construir y ejecutar una consulta SQL que utilice correctamente las

funciones DECODE y CASE Construir y ejecutar dos métodos para la aplicación de la lógica condicional

IF-THEN-ELSE

EXPRESIONES CONDICIONALES Las dos expresiones condicionales son CASE and DECODE. Tu ya tienes estudios de NULL IF, que es lógicamente equivalente a la expresión CASE en que el CASE comparas dos expresiones. Si las dos expresiones son iguales, entonces devuelve nulo; si ellos no son iguales entonces devuelven la primera expresión.

1. CASE

La expresión CASE básicamente hace el trabajo de un IF-THEN-ELSE. Los tipos de datos de el CASE, WHEN and ELSE expresiones deben ser las mismas

Sintaxis: CASE expresion WHEN expression_comparacion THEN return_expresion

[WHEN comparison_expr2 THEN return_expr2 WHEN comparison_exprn THEN return_exprn ELSE else_expr]

END

Page 33: Oracle SQL

  

Academy

2. DECODE

La función DECODE evalúa una expresión en una forma similar a la lógica IF-THEN-ELSE. DECODE compara una expresión con cada uno de los valores de búsqueda

Sintaxis:

DECODE (column1|expression, busqueda1, resultado1

[,busqueda2, resultado2,….,

[,default])

Si por defecto el valor se omite, un valor nulo se retorna en un valor de búsqueda no coincide con ninguno de los valores

 

 

               

Page 34: Oracle SQL

  

Academy

                        

CLAUSULAS DE UNION                        

Page 35: Oracle SQL

  

Academy

Contenido de la lección: En esta lección, usted aprenderá a:

Construir y ejecutar cláusulas USING y ON de la ANSI-99. Construir y ejecutar consultas ANSI-99 que une tres tablas.

CLAUSULA USING

En una unión natural, si las columnas tienen el mismo nombre, pero diferente tipo de dato, la causa de unión produce un error. Para evitar esta situación esta situación, la clausula de unión puede ser modificada por una clausula USING. La clausula USING especifica las columnas que deberían ser usadas para la igualdad de unión. La consulta nos muestra un ejemplo de la clausula USING. Las columnas de referencia en la cláusula USING no debería tener un calificador (nombre de la tabla o alias) en cualquier lugar de la instrucción SQL.

1. USING

L a clausula USING nos sirve para indicar el nombre del campo que comparten que en este caso es JOB_ID y EMPLOYEE_ID.

SELECT EMPLOYEE_ID AS EMPLEADO,FIRST_NAME AS NOMBRE,LAST_NAME AS APELLIDO,START_DATE AS DIA_INICIO FROM EMPLOYEES JOIN JOB_HISTORY USING(EMPLOYEE_ID)

Page 36: Oracle SQL

  

Academy

La clausula USING nos permite utilizar la clausula WHERE para restringir datos ya sea de una tabla o de la otra

SELECT EMPLOYEE_ID AS EMPLEADO,FIRST_NAME AS NOMBRE,LAST_NAME AS APELLIDO,START_DATE AS DIA_INICIO FROM EMPLOYEES JOIN JOB_HISTORY USING(EMPLOYEE_ID) WHERE EMPLOYEE_ID<200

CLAUSULA ON

¿Y si las columnas que se unirán tienen nombres diferentes, o si la combinación usa operadores de comparación que no son de igualdad como son <,> o BETWEEN? No podemos usar USING, así que utilizamos una cláusula ON. Esto permite una mayor variedad de condiciones de combinación que se determine. La cláusula ON también nos permite utilizar WHERE para restringir las filas de una o dos tablas

2. ON

L a clausula ON nos permite presentar datos de tablas pudiendo tener mayor variedad de condiciones en la unión de esas tablas. SELECT e.last_name as "EMPLEADO", m.last_name as "GERENTE" FROM employees e JOIN employees m ON (e.manager_id = m.employee_id)

Page 37: Oracle SQL

  

Academy

La misma consulta con una clausula WHERE para restringir filas seleccionadas. SELECT e.last_name as "EMPLEADO", m.last_name as "GERENTE" FROM employees e JOIN employees m ON (e.manager_id = m.employee_id) WHERE e.last_name like 'H%'

UNIENDO TRES TABLAS

SELECT EMPLOYEE_ID AS COD_EMPLEADO, FIRST_NAME AS NOMBRE, LAST_NAME AS APELLIDO, J.START_DATE AS DIA_INI, D.DEPARTMENT_NAME AS NOM_DEPAR FROM EMPLOYEES E JOIN JOB_HISTORY J USING(EMPLOYEE_ID) JOIN DEPARTMENTS D ON (E.MANAGER_ID=D.MANAGER_ID);

Page 38: Oracle SQL

  

Academy

FUNCIONES NULL

Page 39: Oracle SQL

  

Academy

Contenido de la lección: En esta lección, usted aprenderá a:

Demostrar y explicar la evaluación de una función anidada Lista de por lo menos cuatro funciones generales que funcionan con

cualquier tipo de datos y se refieren a la manipulación de los valores nulos Explicar el uso de la COALESCE y las funciones NVL Explicar el uso de las funciones generales para hacer frente a los valores

nulos en los datos Construir y ejecutar una consulta SQL que aplica correctamente NVL,

NVL2, NULLIF y COALESCE funciones de una sola fila Hasta ahora, solo tuvimos aplicado una línea simple de código con una función en declaraciones simples. Sin embargo es posible el anidado de funciones difíciles. Es importante conocer como son evaluadas estas funciones anidadas. El siguiente ejemplo es una función anidada. El proceso de evaluación de la función empieza desde el nivel interior hasta el exterior.

Paso 1. La fecha de contratación será añadida seis meses a este. Paso 2. El primer viernes del siguiente día serán identificados. Paso 3. El formato de fecha predeterminado será el formato que se leerá y se mostrará en pantalla el viernes en un formato similar a: Viernes, 18 de diciembre, 1987, y deberá aparecer en el salida bajo la columna de “Próxima evaluación”.

FUNCIONES RELACIONADAS A UN VALOR NULO

Al inicio del curso, el término nulo fue introducido. Si ustedes recuerdan el valor de este término no evaluado, desconocido, no asignado o inaplicado. Nosotros no podemos buscar estos términos para saber si es el mismo u otro valor, porque no sabes qué valor tiene este término.

Page 40: Oracle SQL

  

Academy

Estas funciones no son iguales a nada, ni siquiera a cero, pero aunque estas no sean iguales a nada no dejan de ser importantes. Imaginemos esta pregunta: es verdad qué x=y?. Para saber la respuesta tendríamos que conocer los valores de x y y. Oracle tiene 4 funciones generales para resolver estas funciones pertenecientes al uso de valores nulos. Estas son:

NVL NVL2 NULLIF COALESCE

FUNCION NVL La función NVL convierte a un valor nulo en un valor conocido de un tipo de dato fijo, alguna fecha, carácter o número. Los tipos de datos de la columna valor nulo y del nuevo tipo de dato debe ser el mismo. La función NVL es: NVL (valor o columna que contiene el nulo, valor a reemplazar el nulo) La siguiente consulta utiliza la función NVL con datos de tipo carácter:

SELECT NVL(comments, 'no comment') FROM D_PLAY_LIST_ITEMS;

Los tipos de datos de la columna de valores nulos y la de nuevos valores muestran lo mismo que esta explicado en el siguiente ejemplo:

NVL(auth_expense_amt,0) NVL(hire_date,’01-JAN-97’) NVL(speciality, ‘None Yet’)

Page 41: Oracle SQL

  

Academy

Nosotros podemos utilizar las funciones NVL para convertir columnas que contienen valores nulos a números antes de hacer cálculos. Cuando un cálculo aritmético es interpretado como nulo, el resultado es nulo. La función NVL puede convertir el valor nulo a un número antes del cálculo aritmético evitando el resultado nulo.

FUNCIONES NVL2

Las funciones NVL2 se evalúan con una expresión de 3 valores. El primer valor es no nulo, cuando la función NVL2 devuelve la segunda expresión. El primer valor es nulo cuando devuelve la tercera expresión. El primer valor también puede tener algún tipo de dato. La expresión 2 y 3 pueden tener cualquier valor excepto LONG. El tipo de dato del valor de retorno es siempre el mismo tipo de dato de la expresión 2, a menos que el dato de la expresión 2 sea un carácter, en tal caso el valor de retorno será VARCHAR2. La función NVL es: NVL2(expresión 1 este valor puede ser nulo, expresión 2 es el valor de retorno si la expresión 1 no es nulo, expresión 3 valor a remplazar si la expresión 1 es nula) Un camino fácil para recordar la función NVL2 es repasando “si la expresión 1 tiene un valor, se sustituye la expresión 2; si la expresión 1 es nula, se substituye la expresión 3”. La función NVL2 muestra un dato número para la expresión 1 y un dato carácter para las expresiones 2 y 3.

Page 42: Oracle SQL

  

Academy

FUNCIÓN NULLIF

La función NULLIF compara dos funciones. Si estas son iguales, la función retorna nulo. Si estas no son iguales, la función retorna la primera expresión. La función NULLIF es:

FUNCIÓN COALESCE

La función COALESCE es una extensión de la función NVL, excepto que COALESCE puede tomar múltiples valores. La palabra COALESCE significa “TRABAJAR JUNTOS” y esto significa lo que sucede. Si la primera expresión es nula, la función continúa bajando la línea hasta que una función no nula este funcionando. De acuerdo, si la primera expresión tiene un valor, la función retorna la primera expresión y la parada de la función. La función COALESCE es:

COALESCE (expresión 1, expresión 2, …. Expresión n) Al examinar la expresión SELECT de la tabla empleados mostramos lo correcto. ¿Qué empleados no reciben comisión?, ¿cómo se llaman?, ¿está aquí alguno que no recibe ningún porcentaje de comisión ni un salario?

Page 43: Oracle SQL

  

Academy

Page 44: Oracle SQL

  

Academy

CONCLUSIONES Como conclusión, podemos decir:

1. Es importante conocer que las funciones del SQL de Oracle cumplen diversas funciones y trabajan con distintos tipos de datos, así las funciones nos permiten trabajar de la mejor manera con cada tipo de dato, san estos números ,fechas o caracteres.

Asimismo permiten una combinación de cada una de estas funciones (funciones anidadas) y convertir tipos de dato de uno a otro según sean las necesidades del DBA. Aún más allá, también nos permiten evaluar funciones que en cierto modo podrían darnos errores en los Querys, como por ejemplo las Funciones NULL y realizar distintos tipos de operaciones más avanzadas que la simple conversión de datos.

2. El estudio práctico de estas funciones permite un correcto aprendizaje del SQL, conocer los posibles errores y poner en práctica las posibles combinaciones. No es posible aprender correctamente el Oracle SQL sin realizar muchos Querys donde nosotros podamos poner en práctica en una Base de Datos real (para el caso utilizamos el usuario Hr) y ver cuáles son los resultados y variaciones de cada una de las funciones estudiadas.

3. En nuestra formación como futuros profesionales de la Informática, es claro que el manejo de Bases de Datos es una parte esencial, así que la practica constante en el SQL, el Modelamiento y otros aspectos, nos llevaran a ser excelentes DBA y desarrollar perfectamente cualquier aplicación que se nos encomiende en un futuro.