Taller SQL - SUP Introducción al Lenguaje SQL. Sentencia Select Sentencia Insert Sentencia Update Sentencia Delete Claúsula Where Condiciones de Búsqueda Operadores de Comparación Rangos Listas Patrones de Caracteres y Comodines Valores desconocidos
Taller SQL - SUP Otras Claúsulas Group by Having Order by Sub Querys Union Principales Funciones Matemáticas De Fechas De Cadenas
Taller SQL - SUP Elaboración de Consultas con tablas del SUP Tablas Principales (tb_admcae, tb_biecgf, otros.) Tablas Auxiliares (tb_prmadmtse, otros) Ejecución de Stored Procedures elaborados por OFIN Examen de Evaluación
Introducción al Lenguaje SQL SQL es un lenguaje de alto nivel para sistemas de base de datos relacionales, el curso pretende dar a conocer las operaciones básicas que se pueden realizar con SQL. Las aplicaciones en red son cada día más numerosas y versátiles. En muchos casos, el esquema básico de operación es una serie de Scripts que rigen el comportamiento de una base de datos. Debido a la diversidad de lenguajes y de bases de datos existentes, la manera de comunicar entre unos y otras sería realmente complicada a gestionar de no ser por la existencia de estándares que nos permiten el realizar las operaciones básicas de una forma universal.
Introducción al Lenguaje SQL Es de eso de lo que trata el Structured Query Language que no es mas que un lenguaje estándar de comunicación con bases de datos. Hablamos por tanto de un lenguaje normalizado que nos permite trabajar con cualquier tipo de lenguaje en combinación con cualquier tipo de base de datos
Introducción al Lenguaje SQL Ejemplos : PLSQL de Oracle, Transact SQL de SQL Server, Informix 4GL de Informix, Microsoft JET SQL de Access, SYBASE Las sentencias SQL pueden ser incrustadas en programas de lenguajes como Cobol, Java, C, Visual Basic, etc.
Introducción al Lenguaje SQL Sentencias de Manipulación de Datos SELECT INSERT UPDATE DELETE
Sentencia SELECT Es la sentencia base del SQL y sirve para consultar las tablas de una base de datos. Esta sentencia incluye ocho cláusulas de las cuales SELECT y FROM son obligatorias. Con esta sentencia se resuelven los operadores relacionales.
Sentencia SELECT Estructura básica: SELECT, FROM. SELECT corresponde a la operación Proyección (Π). Lista los atributos deseados en el resultado de la consulta. FROM corresponde a la operación Producto Cartesiano (X). Lista las relaciones que se deben analizar.
Cláusula FROM Específica la(s) fuente(s) de donde van a ser tomadas las columnas mostradas y/o operadas en la sentencia Select. [SELECT ] FROM expresión tabla [as] t_alias [,...]
Ejemplos de la Sentencia SELECT Mostrar las compras de cigarrillos de color negro SELECT FROM WHERE marca Marca', filtro Filtro, color, clase, mentol, Dcompra Fecha, Qcomprada Cantidad Compras color = N
Sentencia INSERT INSERT es otra sentencia DML base, que usa para incorporar nuevas filas a una tabla de base de datos. INSERT [INTO] {table-name view-name} [(column-list)] {VALUES (values-list) select-statement }
Sentencia INSERT INSERT INTO FABRICANTES (Nfabricante, País) VALUES ( Reynolds Tobacco CO., EEUU ) INSERT INTO MARCAS VALUES ( Camel, Reynolds Tobacco CO., 10, 20) INSERT INTO CIGARRILLOS VALUES ( Camel, N, R, Normal, N, 1.1, 15, 2)
Sentencia UPDATE Modifica los datos existentes en filas de una tabla de Base de Datos UPDATE {table-name view-name} SET{column-list variable-list variable_and_column-list},.. [ WHERE { condition }]
Sentencia UPDATE Cambiar aquellos cigarrillos de clase Normal, con filtro, fabricados por Tabacalera Nacional, de modo que ahora no tengan filtro UPDATE CIGARRILLOS SET filtro = N WHERE marca in (SELECT marca FROM MARCAS WHERE Nfabricante = Tabacalera Nacional And filtro = S and clase = Normal )
Sentencia DELETE Elimina filas de una tabla de Base de Datos. DELETE FROM {table-name view-name} [WHERE {condition} ]
Sentencia DELETE Eliminar todos los fabricantes que no manufacturen cigarrillos de clase Ultra Light DELETE FROM FABRICANTES WHERE Nfabricante NOT IN (SELECT DISTINCT Nfabricante FROM MARCAS WHERE marca IN (SELECT marca FROM CIGARRILLOS WHERE clase = Ultra Light ))
Cláusula WHERE Es la cláusula en donde se especifican las condiciones de búsqueda para las filas que conforman el conjunto resultado. [SELECT...] INTO tabla_temp [FROM...] WHERE condiciones_de_búsqueda
Cláusula WHERE Las condiciones_de_búsqueda se conectan de forma opcional con los operadores lógicos AND, OR o NOT. Pueden corresponder a los siguientes tipos Condiciones de comparación. Condiciones con Subquery.
Condiciones de Búsqueda Las condiciones de búsqueda pueden incluir: Operadores de Comparación (=, <>, < y >). Rangos (BETWEEN y NOT BETWEEN). Listas (IN, NOT IN). Patrones de caracteres (LIKE y NOT LIKE). Valores desconocidos (IS NULL y IS NOT NULL). Combinaciones con conjunciones (AND, OR).
Condiciones de Búsqueda Operadores de comparación: WHERE SueldoBásico > 1000 WHERE SUBSTR(CodigoPostal, 1, 3)= SAN Rangos (BETWEEN / NOT BETWEEN): WHERE SueldoBásico BETWEEN 1000 AND 5000 Listas (IN / NOT IN): WHERE Departamento NOT IN ('ADM', 'SIS') Coincidencia de patrones o cadenas de caracteres (LIKE / NOT LIKE)) WHERE NombreCompleto LIKE LET%
Operadores y Comodines (Wildcards) en la cláusula WHERE Operador Significado = > < >= <= <>!>!< Igual a Mayor que Menor que Mayor o igual Menor o igual No igual a No mayor No menor Wildcard * %?, #, _ [-] [!] Significado Cualquier cadena de cero o mas caracteres. Cualquier carácter/ número único. Cualquier carácter único dentro de un rango. Cualquier carácter único que no está dentro de un rango.
Operadores y Wildcards en el WHERE.WHERE Nombre LIKE Ma% busca todos los nombres que comiencen con Ma (Ej.: María, Mariana, Manuel, Martín) LIKE %ía busca todos los nombres que terminen con ía. (Ej.: Sofía, María, Estefanía). LIKE %ar% busca todos los nombres que tengan las letras ar. (Ej.:Carlos, Arturo, Eleazar).
Operadores y Wildcards en la cláusula WHERE LIKE _va LIKE [CM]arlo[ns] LIKE [B-D]elia busca todos los nombres de tres letras que terminan en va. (Ej.: Eva, Iva, Ava). busca todos los nombres: Carlon, Marlon, Carlos y Marlos. busca todos los nombres que terminan en elia y que comiencen con las letras de la B a la D. (Ej.: Delia, Celia).
Operadores y Wildcards en la cláusula WHERE LIKE M[!a]% LIKE _ busca todos los nombres que comiencen con M y cuya segunda letra no es a.(mónica). busca todas las cadenas de exactamente 3 caracteres. LIKE _ % busca las cadenas de al menos 3 caracteres.
Cláusula GROUP BY Especifica las columnas por las que las filas van a estar agrupadas o particionadas. Los resultados del query contienen un valor o conjunto de valores para cada conjunto de valores indicado por las funciones_de_agregación nombradas en la lista del Select
Cláusula GROUP BY SELECT {{columnas_de_agrupación, }, {función_de_agregación, }} [FROM ] [WHERE ] GROUP BY {columnas_de_agrupación, }
GROUP BY Obtener el total de compras de cigarrillos de color negro realizadas SELECT SUM(Qcomprada) Total_Unidades marca Marca', filtro Filtro, color Rubio/Negro, clase Clase, mentol Mentol FROM Compras WHERE color = N GROUP BY marca, filtro, color, clase, mentol
Cláusula HAVING Especifica una restricción que se aplica a las funciones de agregación de los grupos. Esto afecta a las filas que son devueltas como resultado y no al cálculo de las funciones de agregación. La cláusula WHERE si puede condicionar al número de filas que intervienen en el cálculo de las funciones de agregación.
Cláusula HAVING SELECT {{columnas_de_agrupación, }, {función_de_agregación, }} [FROM ] [WHERE ] GROUP BY {columnas_de_agrupación, } HAVING condiciones_de_búsqueda
GROUP BY y HAVING Mostrar los nombres estancos que hayan realizado menos de 500 operaciones de venta SELECT FROM WHERE a.rucestanco, b.nestanco VENTAS a, ESTANCOS b a.rucestanco = b.rucestanco GROUP BY a.rucestanco, b.nestanco HAVING COUNT(*) < 500
GROUP BY -HAVING -WHERE Procedimiento: Si en una misma consulta aparece una cláusula WHERE y una cláusula HAVING, se aplica primero el predicado de la cláusula WHERE. Las tuplas que satisfagan la condición, se colocan en grupos según la cláusula GROUP BY. La cláusula HAVING se aplica luego a cada grupo. Los grupos que no la satisfagan se eliminan. La cláusula SELECT utiliza los grupos restantes para generar las tuplas resultado de la consulta.
Cláusula ORDER BY Ordena el resultado de los querys por los valores de las columnas mencionadas. Solamente se puede ordenar por las columnas especificadas en el SELECT. ASC: Es el valor por defecto e indica que los resultados se van a presentar ascendentemente. DESC: Debe especificarse al lado de la columna cuyo orden se desea ver en forma descendente. Consideración: ordenar un gran número de tuplas puede ser costoso. Es conveniente ordenar sólo cuando sea estrictamente necesario.
Cláusula ORDER BY SELECT {columna 1, columna 2, } [FROM ] [WHERE ] [GROUP BY...] [HAVING...] ORDER BY columna 1 [ASC DESC],...
ORDER BY SELECT Nombre 'Departamento', AVG(SueldoBasico) 'Promedio Sueldos' FROM EMPLEADO E, DEPARTAMENTO D WHERE E.Departamento = D.Departamento GROUP BY Nombre ORDER BY AVG(SueldoBasico) DESC
Uso de Subqueries Un Subquery es una sentencia SELECT anidada dentro de otras sentencias SQL como SELECT, INSERT, UPDATE o DELETE, o dentro de otro Subquery. A una sentencia SELECT, que contiene uno o mas Subqueries, se la denomina Nested Query o SELECT anidado.
Conectores para incrustar Subconsultas en Where Operando izquierdo Conector Operando derecho elemento En / no en Conjunto de elementos conjunto = / no = Conjunto Existe / no existe Conjunto elemento > / < Conjunto de un elemento elemento = / no = Conjunto de un elemento elemento > = / < = Conjunto de un elemento elemento >, <, =, no =, > =, < = modificados con ANY o con ALL Conjunto de elementos
Uso de Subqueries Subqueries con el uso de la palabra IN: El resultado, es una lista de cero o mas valores. Una vez que el Subquery devuelve resultados, el Outer query los usa. (Con el uso de esta palabra se puede resolver el operador relacional de Intersección)
Uso de Subqueries Subqueries con el uso de las palabras NOT IN: El resultado, es una lista de cero o mas valores. Una vez que el Subquery devuelve resultados, el Outer query los usa por negación. (Con el uso de esta palabra se puede resolver el operador relacional de Diferencia)
Uso de Subqueries SELECT FROM WHERE NombreCompleto, SueldoBasico PERSONA, EMPLEADO IDPersona=IDEmpleado and IDEmpleado NOT IN (SELECT IDEmpleado FROM SANCIONES_EMPLEADO)
Uso de Subqueries Subqueries con Operadores de comparación. Son los subquerys que se introducen con algún operador de comparación como =, <>, <, <=, >, >=, etc. Estos subqueries retornan un solo valor.
Uso de Subqueries Operadores de comparación modificados por ANY o ALL. Estos subqueries retornan cero o muchos valores. > ALL, significa que todos los valores retornados por el subquery son menores al valor de comparación del outer. > ANY, significa que por lo menos un valor retornado por el subquery es menor al valor de comparación del outer.
Uso de Subqueries Subqueries Correlativos. El Subquery depende del outer query para devolver sus valores. Esto significa que el Subquery se ejecuta repetidamente, una vez por cada fila seleccionada por el Outer query.
Uso de Subqueries Subqueries Correlativos. SELECT FROM a.idempleado, a.sueldobasico EMPLEADO a WHERE a.sueldobasico >= (SELECT b.sueldobasico FROM EMPLEADO b WHERE a.idjefe = b.idempleado ) Muestra código y sueldo de los empleados cuyos sueldos son mayores o iguales a los sueldos de sus respectivos jefes
Operadores de UNION A diferencia del SELECT, que por omisión conserva los duplicados, las operaciones de unión normalmente los suprimen. A fin de evitar esto, es necesario colocar a continuación del operador UNION la palabra clave ALL
Guías para la construcción de UNION Todas las select-list mencionadas con la sentencia UNION, deben tener el mismo número de expresiones (columnas, expresiones aritméticas, funciones de agregación, etc.). Las columnas que se corresponden, deben tener el mismo tipo de dato, sino es así, debe existir una conversión de datos implícita o explícita con una función de conversión de por medio.
Guías para la construcción de UNION Las columnas que se corresponden en SELECTs individuales deben ocurrir en el mismo orden, porque UNION compara las columnas una a una. Si se quiere alterar los nombres de las columnas, se debe hacer en el primero de los SELECT y estos nombres podrán ser usados en la cláusula ORDER BY Si no se especifica la cláusula ALL, las tuplas duplicadas se eliminan automáticamente del resultado.
UNION Todos los clientes que poseen una cuenta, un préstamo o ambos (SELECT FROM UNION (SELECT FROM nombre-cliente TITULAR-CUENTA) nombre-cliente PRESTATARIO)
Funciones de Agregación SUM([ALL DISTINCT] expresión) Calcula el total de una expresión numérica para todas las filas o sólo las distintas. AVG([ALL DISTINCT] expresión) Calcula el promedio de una expresión numérica para las filas involucradas. MIN([ALL DISTINCT] expresión) Calcula el mínimo valor de una expresión numérica para las filas involucradas.
Funciones de Agregación MAX([ALL DISTINCT] expresión) Calcula el máximo valor de una expresión numérica para las filas involucradas. COUNT([ALL DISTINCT] expresión) Número de veces que se repite el valor de la expresión. COUNT(*) Número de filas seleccionadas