Tema 29.docx
Document Details
Uploaded by Oganesson93
Universidad de Valladolid
Tags
Full Transcript
**Tema 29. El lenguaje SQL: Tipos de datos. Operadores. La sentencia SELECT. Consultas por grupos. Consultas anidadas. Subconsultas correlacionadas. Subconsultas en la cláusula HAVING. Consultas multitablas. SQL avanzado: Lenguaje de Definición de Datos - DDL (CREATE, DROP, ALTER, GRANT, REVOKE). Pr...
**Tema 29. El lenguaje SQL: Tipos de datos. Operadores. La sentencia SELECT. Consultas por grupos. Consultas anidadas. Subconsultas correlacionadas. Subconsultas en la cláusula HAVING. Consultas multitablas. SQL avanzado: Lenguaje de Definición de Datos - DDL (CREATE, DROP, ALTER, GRANT, REVOKE). Procedimientos almacenados** El SQL es el lenguaje estándar ANSI/ISO de definición, manipulación y control de bases de datos relacionales. Es un lenguaje declarativo: sólo hay que indicar qué se quiere hacer. **Tipos de datos** Al igual que cualquier otro lenguaje de programación, SQL tiene sus propios tipos de datos para representar diferentes tipos de información en una base de datos. ![](media/image2.png) **Operadores** Para definir las condiciones en la cláusula WHERE, podemos utilizar alguno de los operadores de los que dispone el SQL, que son los siguientes: Operadores de comparación: ![Texto Descripción generada automáticamente](media/image4.png) Tabla Descripción generada automáticamente con confianza media **La sentencia SELECT** Para hacer consultas sobre una tabla con el SQL es preciso utilizar la sentencia SELECT FROM, que tiene el siguiente formato: Donde elemento puede ser una columna de la tabla o una expresión. La opción AS nos permite renombrar las columnas que queremos seleccionar por un alias. Si ponemos DISTINCT nos aparezcan las filas resultantes sin repeticiones, poniendo ALL (opción por defecto) aparecerán todas. Con la sentencia SELECT FROM podemos seleccionar todas las columnas de una tabla con todas las filas, pero si lo queremos es seleccionar filas de una tabla es preciso añadirle la cláusula WHERE. El formato es: La cláusula WHERE nos permite obtener las filas que cumplen la condición especificada en la consulta. Se pueden utilizar algunos de los operadores que vimos en el apartado anterior. **Consultas por grupos** Las cláusulas siguientes, añadidas a la instrucción SELECT FROM, permiten organizar las filas por grupos: - La cláusula GROUP BY nos sirve para agrupar filas según las columnas que indique esta cláusula. - La cláusula HAVING especifica condiciones de búsqueda para grupos de filas; lleva a cabo la misma función que antes cumplía la cláusula WHERE para las filas de toda la tabla, pero ahora las condiciones se aplican a los grupos obtenidos. Presenta el siguiente formato: Los factores de agrupación de la cláusula GROUP BY deben ser, como mínimo, las columnas que figuran en SELECT, exceptuando las columnas afectadas por funciones de agregación. Se pueden utilizar funciones de agregado para realizar cálculos en los datos agrupados. Algunas de las funciones de agregado más comunes en SQL son: ![](media/image6.png) En general, las funciones de agregación se aplican a una columna, excepto la función de agregación COUNT. Las funciones de agregado serán de uso obligatorio en la cláusula HAVING. **Consultas anidadas** Una anidada es una subconsulta que se incluye en otra consulta SELECT. La subconsulta es otra consulta SELECT que siempre está entre paréntesis y se puede colocar en cualquier parte de la SELECT (en la clausula SELECT, FROM, WHERE o HAVING) pero donde se suele encontrar es en el WHERE o HAVING. Puede haber subconsultas: 1. Que devuelvan un único valor. 2. Que devuelvan una única fila. 3. Que devuelvan una tabla. Las subconsultas en la cláusula SELECT solo podrá devolver un único valor (una fila con una columna). Las subconsultas en la cláusula FROM pueden devolver varias filas y columnas, realmente el resultado de la subconsulta actúa como una tabla. Las subconsultas en la cláusula WHERE puede ser: 1. Uso de subconsultas simples (la subconsulta obligatoriamente devuelve un único valor): FROM otra\_tabla); En la consulta anidada se tiene que obligatoriamente devolver un único valor. 2. Usos de subconsultas de múltiples filas, pero solo una columna: **Subconsultas correlacionadas** Son un tipo de subconsulta que utiliza datos de la consulta principal para filtrar los resultados de la subconsulta. Es decir, la subconsulta utiliza valores de la consulta principal para realizar sus cálculos. Se puede utilizar con los predicados anteriores y además: [Predicado EXISTS o NOT EXISTS] Para comprobar si una subconsulta produce alguna fila de resultados, podemos utilizar la sentencia denominada test de existencia: EXISTS. Para comprobar si una subconsulta no produce ninguna fila de resultados, podemos utilizar NOT EXISTS. **Subconsultas en la cláusula HAVING** Se puede aplicar lo mismo descrito en el apartado de subconsultas anidadas en la cláusula WHERE pero en este caso en la cláusula HAVING. Y en vez de utilizar columnas en las comparaciones de la tabla principal se utilizará funciones de agregado. HAVING función\_agregado {IN \| NOT IN \| operador SOME \| operador ANY \| operador ALL} (subconsulta) **Consultas multitablas** Muchas veces queremos consultar datos de más de una tabla haciendo combinaciones de columnas de tablas diferentes. En el SQL es posible listar más de una tabla que se quiere consultar especificándolo en la cláusula FROM. La combinación de tablas en el FROM consigue crear una sola tabla (es resultado del producto cartesiano de todas las tablas. En condiciones tenemos que asociar las columnas de las diferentes tablas para obtener el resultado esperado. En la versión SQL 1999 se ideó una nueva sintaxis para consultar varias tablas. Las consultas JOIN se utiliza para combinar filas de dos o más tablas basándose en un campo común entre ellas. -- -- -- -- -- -- -- -- Si las columnas que se van a asociar se llaman igual en vez de utiliza la "ON" se puede utilizar "USING" (nombre\_columna). - LEFT JOIN mantiene todas las filas de la tabla izquierda (la tabla1). Las filas de la tabla derecha se mostrarán si hay una coincidencia con las de la izquierda. Si existen valores en la tabla izquierda pero no en la tabla derecha, ésta mostrará null. - RIGHT JOIN es igual que LEFT JOIN pero al revés. Ahora se mantienen todas las filas de la tabla derecha (tabla2). Las filas de la tabla izquierda se mostrarán si hay una coincidencia con las de la derecha. Si existen valores en la tabla derecha pero no en la tabla izquierda, ésta se mostrará null. - INNER JOIN selecciona todas las filas de las dos columnas siempre y cuando haya una coincidencia entre las columnas en ambas tablas. Es el tipo de JOIN más común. - OUTER JOIN o FULL OUTER JOIN devuelve todas las filas de la tabla izquierda (tabla1) y de la tabla derecha (tabla2). Combina el resultado de los joins LEFT y RIGHT. Aparecerá null en cada una de las tablas alternativamente cuando no haya una coincidencia. - NATURAL JOIN: No hace falta utilizar ni ON ni USING, automáticamente coje las columnas que se denominen igual y las iguala y además en el SELECT solo devuelve el valor de una columna. (Se pude utilizar con cualquiera de los anteriores). Se puede utilizar con todos los demás JOIN. La razón fue separar [las condiciones de asociación respecto de las condiciones de selección de registros], lo cual otorga una mayor claridad a las instrucciones SQL. Porque en SQL92 la forma de operar era utilizando el símbolo (+) en la cláusula WHERE después de la columna: LEFT JOIN: el (+) aparece en la columna perteneciente al lado derecho. RIGHT JOIN: el (+) aparece en la columna perteneciente al lado izquierdo. FULL OUTER JOIN: (\*) aparece en las dos columnas. **SQL avanzado: Lenguaje de Definición de Datos - DDL (CREATE, DROP, ALTER, GRANT, REVOKE)** El DDL es la parte del lenguaje SQL que realiza la función de definición de datos del SGBD. Fundamentalmente, se encarga de la creación, modificación y eliminación de los objetos de la base de datos (es decir de los metadatos). Operaciones de DDL: - CREATE: Se utiliza para crear nuevos objetos en la base de datos, como tablas, vistas, índices, procedimientos almacenados, funciones, etc. Por ejemplo, CREATE TABLE para crear una nueva tabla en la base de datos. - DROP: Se utiliza para eliminar objetos de la base de datos, como tablas, vistas, índices, procedimientos almacenados, funciones, etc. Por ejemplo, DROP TABLE para eliminar una tabla de la base de datos. - ALTER: Se utiliza para modificar la estructura de un objeto existente en la base de datos, como una tabla, vista, procedimiento almacenado, función, etc. Por ejemplo, ALTER TABLE para modificar la estructura de una tabla existente. - GRANT: Se utiliza para otorgar permisos a los usuarios para acceder a objetos específicos de la base de datos. Por ejemplo, GRANT SELECT ON TABLE para otorgar permisos de solo lectura en una tabla. - REVOKE: Se utiliza para revocar permisos otorgados previamente a los usuarios para acceder a objetos específicos de la base de datos. Por ejemplo, REVOKE SELECT ON TABLE para revocar permisos de solo lectura en una tabla. **Procedimiento almacenado** (stored procedure) Es una rutina o programa que se almacena en una base de datos relacional con código SQL. Cada SGBD utilizará la sintaxis de su lenguaje SQL para crearlos. En Oracle por ejemplo se creará con PL/SQL: - Parámetros: los procedimientos almacenados pueden recibir parámetros de entrada y de salida, que se definen en la cabecera del procedimiento. - Variables: los procedimientos almacenados pueden utilizar variables, que se declaran dentro del cuerpo del procedimiento y se utilizan para almacenar valores temporales. - Control de flujo: los procedimientos almacenados pueden utilizar estructuras de control de flujo, como IF-ELSE, WHILE y CASE, para ejecutar diferentes acciones según las condiciones que se presenten. - Transacciones: los procedimientos almacenados pueden ser parte de una transacción, lo que significa que, si la transacción falla, todas las acciones realizadas por el procedimiento almacenado se revierten.