MySQL unidad5

12
FUNDACIÓN UNIVERSITARIA DEL ÁREA ANDINA CENTRO DE EDUCACIÓN A DISTANCIA PROGRAMA TÉCNICO PROFESIONAL EN SISTEMAS ASIGNATURA: IMPLEMENTACIÓN DE AMBIENTES WEB BASES DE DATOS CON MySQL UNIDAD CINCO: SUBCONSULTAS E ÍNDICES INTRODUCCIÓN. Se abarca en este aparte una breve introducción a las subconsultas y los índices. Las subconsultas o subselecciones son consultas creadas a partir de los resultados de otra consulta. Los índices se emplean fundamentalmente como mecanismo de optimización de consultas. SUBSELECCIONES: Una subselección es una selección realizada sobre otra selección previa. Para ilustra el uso de subselecciones planteamos el siguiente ejemplo, en el cual escribimos una consulta que selecciona los vendedores que han realizado ventas por valores superiores 2.000.000. En este ejemplo se puede considerar que primero se obtienen los valores del campo vndorde la tabla ventas, para los cuales el valor de la venta es superior a 2.000.000, posteriormente se solicita apellidos y nombres de los vendedores (tabla vendedor) cuya identificación coincide con los resultados de la consulta previa. La subselección planteada antes se podría descomponer en las dos consultas mostradas a continuación.

description

MySQL unidad5

Transcript of MySQL unidad5

Page 1: MySQL unidad5

FUNDACIÓN UNIVERSITARIA DEL ÁREA ANDINA

CENTRO DE EDUCACIÓN A DISTANCIA PROGRAMA TÉCNICO PROFESIONAL EN SISTEMAS

ASIGNATURA: IMPLEMENTACIÓN DE AMBIENTES WEB

BASES DE DATOS CON MySQL

UNIDAD CINCO: SUBCONSULTAS E ÍNDICES

INTRODUCCIÓN. Se abarca en este aparte una breve introducción a las subconsultas y los índices. Las subconsultas o subselecciones son consultas creadas a partir de los resultados de otra consulta. Los índices se emplean fundamentalmente como mecanismo de optimización de consultas. SUBSELECCIONES: Una subselección es una selección realizada sobre otra selección previa. Para ilustra el uso de subselecciones planteamos el siguiente ejemplo, en el cual escribimos una consulta que selecciona los vendedores que han realizado ventas por valores superiores 2.000.000.

En este ejemplo se puede considerar que primero se obtienen los valores del campo “vndor” de la tabla “ventas”, para los cuales el valor de la venta es superior a 2.000.000, posteriormente se solicita apellidos y nombres de los vendedores (tabla “vendedor”) cuya identificación coincide con los resultados de la consulta previa. La subselección planteada antes se podría descomponer en las dos consultas mostradas a continuación.

Page 2: MySQL unidad5

Otra forma, aún mejor, de obtener el mismo resultado es mediante el uso de una combinación como se indica en los siguientes ejemplos:

Page 3: MySQL unidad5

La obtención de los resultados mediante combinaciones es más favorable porque a menudo su procesamiento es máseficiente, principalmente en grandes bases de datos. El siguiente ejemplo muestra una subselección que da como resultado los nombres y apellidos de los vendedores que aún no han realizado ventas.

La versión de esta consulta mediante el uso de combinaciones es la siguiente.

Page 4: MySQL unidad5

Agregar registros a una tabla a partir de información contenida en otra. A manera de ejemplo podemos crear una nueva tabla con información de nombres y apellidos de clientes y los valores de las compras que han hecho. Para ver los datos que insertaremos en la tabla a crear ejecutamos la siguiente consulta:

Teniendo claridad sobre la información a almacenar en la nueva tabla, usamos la siguiente instrucción para crearla, y la que le sigue para insertar los datos.

Dado lo anterior podemos verificar a continuación el contenido de la nueva tabla “clientes_ventas_valor”.

Page 5: MySQL unidad5

Otras opciones útiles sobre agregación de registros La clausula INSERT también facilita la inserción de datos mediante sintaxis similar a la de UPDATE,en el ejemplo siguiente las dos instrucciones arrojan resultados equivalentes.

Además podemos realizar cálculos al agregarregistros. En el siguiente ejemplo se añade “campo2” como un nuevo campo de la tabla “clientes_ ventas_valor”

Page 6: MySQL unidad5

Ahora insertamos elementos a esta tabla, haciendo que valor2 corresponda al doble del campo valor:

Eliminación de registros mediante el uso de DELETE y TRUNCATE. Es claro que la eliminación de registros se puede realizar a través del uso de la instrucción DELETE, esta forma de eliminación presenta como desventaja su posible lentitud en tablas de gran tamaño. Una forma más eficiente de realizar la eliminación es usando la instrucción TRUNCATE. La diferencia entre DELETE y TRUNCATEestá en que DELETE debe contar el número de filas a eliminar para informarlo en el resultado de la consulta. Se invita al estudiante a realizar pruebas de lo comentado.

INDICES Y OPTIMIZACIÓN DE CONSULTAS. En una base de datos los registros no se almacenan en ningún orden específico, lo que ante la necesidad de una búsqueda puede dar lugar al examen completo de una tabla, para tablas que guardan gran cantidad de registros esta tarea es significativamente ineficiente. El ordenamiento de registros según un campo de interés ayuda a resolver este tipo de problemáticas, sin embargo, es posible que queramos realizar una consulta según otro criterio, situación en la cual podría ser necesario revisar la tabla completa, lo que sugiere que la mejor solución es implementar y almacenar diferentes ordenamientos de los registros de la tabla según diferentes criterios acorde a las necesidades, y un puntero a un registro de tabla. Esto, en el contexto de las bases de datos, da origen al concepto de índices, de los cuales la llave primaria es tal vez el más conocido y utilizado. Clave primaria: La clave primaria de una tabla en una base de datos relacional es un índice que se define sobre un campo o conjunto de campos. La selección de la clave primaria debe garantizar que los valores del respectivo campo sean exclusivos para todos los registros y que ninguno tome valor NULL, por ejemplo, el número de identificación de una persona o un código exclusivo. La definición de una llave primaria en el momento de crear una tabla se realiza mediante la escritura de la instrucción PRIMARY KEYal final de las definiciones de campos que

Page 7: MySQL unidad5

conformaran la clave primaria. A manera de ejemplo creemos una tabla prueba en la base de datos “primerabd”.

Si ya hemos creado una tabla, y no hemos definido clave primaria en ella, podemos modificarla para definirle una. En la imagen siguiente se muestra las instrucciones requeridas para definir clave primaria a las tablas “vendedor”, “clientes” y “ventas” de la base de datos “primerabd”.

En las anteriores instrucciones, los campos “id_vendedor”, “id_cliente” y “cod_ventas” se definen como las claves primarias de las tablas “vendedor”,“clientes” y “ventas”, respectivamente. El comando describe nos muestra la nueva estructura de la tabla. En el caso ilustrado en la imagen siguiente se observa que el campo “id_vendedor” es la clave primaria y no admite el valor NULL.

Page 8: MySQL unidad5

Nota: si la clave primaria está compuesta por dos o más campos, éstos se escriben separados por comas en la definición de la clave. Si en la creación de una tabla le asignamos una clave primaria, el intento de inserción de un registro con valor NULL en la clave primaria o la inserción de dos registros con valores duplicados, obtendremos un mensaje de error indicando la invalides del intento. Si al momento de asignar la clave primaria de una tabla, hay registros con valores repetidos,o algún registro con valor NULL, también se genera un error, en este caso se debe realizar la actualización de registros para eliminar la causa del problema. Uso de campos de incremento automático. Los campos autoincrementalespermiten aumentar automáticamente el valor de un campo cada vez que se inserta un nuevoregistro, es aplicable por ejemplo a campos que sean claves primarias numéricas.Se puede definir un campo autoincremental al momento de crear la tabla, o modificar la tabla para que el campo numérico que sea clave primaria pase a ser autoincremental. El siguiente es un ejemplo de creación de una tabla “prueba2” en la cual se define el campo “codigo” como clave primaria, entero y autoincremental.

La siguiente ilustración muestra la modificación de la tabla “vendedor” para que el campo “id_vendedor”, que antes se definió como clave primaria, sea autoincremental.

Page 9: MySQL unidad5

Surge entonces la pregunta respecto a la forma de inserción de registros si en la tabla hay un campo autoincremental, en este caso no se requiere especificar el valor del campo, ya que MySQL lo agrega automáticamente. La siguiente imagen muestra la instrucción utilizada para insertar un nuevo registro en la tabla “vendedor” y el resultado de la inserción. Obsérvese que en la instrucción de inserción no se indica valor para el campo “id_vendedor”.

El nuevo registro insertado toma el valor de 15 en el campo “id_vendedor”. MySQL guarda información del último valor agregado, aunque el mayor valor se elimine, la inserción de nuevos registros no usa el número liberado.

Page 10: MySQL unidad5

La siguiente imagen muestra la eliminación del último registro insertado, el resultado de la eliminación, la inserción de un nuevo registro y su resultado.

Se ve que el registro nuevo no toma el valor 15, sino 16 en el campo “id_vendedor”. Eliminación o modificación de una clave primaria. Ante consideraciones de diseño, es posible la necesidad de eliminar o modificar una clave primaria, en todo caso se debe eliminar y volver a crearla con la definición. La eliminación de una clave primaria utiliza la siguiente sintaxis. ALTER TABLE nombre-de-tabla DROP PRIMARY KEY; En el contexto de las bases de datos relacionales se hace uso del término relaciones, entendidas como posibles asociaciones entre registros contenidos en una tabla, con

Page 11: MySQL unidad5

registros de otra. Resulta conveniente citar aquí algunos conceptos involucrados en esta temática. Relación uno a varios o uno a muchos: es aquella relación,entre dos tablas, en la cual para cada registro de la primera tabla pueden existir varios en la segunda tabla. Considerando las tablas vendedor, clientes y ventas de la base de datos primerabd, vemos por ejemplo que un vendedor, al igual que un cliente, puede estar asociado a varias ventas, con lo cual podemos decir que las relaciones vendedor-ventas y clientes-ventas son relaciones uno a varios. Relación varios a varios: es aquella relación, entre dos tablas, en la cual para cada registro en cada una de las tablas puede existir varios registros en la otra. Por ejemplo, un cliente puede estar asociado a varios clientes y un cliente puede estar asociado a varios vendedores. Esto indica que la relación vendedor-clientes es una relación varios a varios. Relación obligatoria: es aquella relación en la cual para cada registro en la primera tabla debe existir obligatoriamente uno o más registros en la segunda. Relación opcional: es toda relación entre dos tablas en la cual para cada registro de la primera de ellas puede haber registros asociados en la segunda, sin que ello sea obligatorio. Integridad de datos: la expresión integridad de datos se refiere a la exactitud, valides y coherencia de los datos, por ejemplo la información de la tabla ventas, en lo referente a vendedores y clientes debe ser consistente con información almacenada en las respectivas tablas. El estudio profundo de la solución de problemas de integridad requiere el análisis detallado de principios de diseño de base de datos. Uso de Clave foránea: Gran parte las tareas realizadas con base en este documento se ha centrado sobre las tablas “vendedor”, “clientes” y “ventas” de la base de datos “primerabd”, en lo cual uno o más vendedores se relacionan con uno o más clientes a través de las respectivas ventas. En una base de datos, una relación que asocia dos tablas se crea asignando un campo común a las tablas (aunque no tengan el mismo nombre), el campo en común debe ser la clave primaria de una de las tablas. Una clave foránea de una tabla es un campo de la tabla que es a su vez clave primaria de otra tabla. Las claves foráneas son útiles para garantizar la integridad referencial, mediante la cual se indica que si una clave foránea tiene un valor, éste hace referencia a un registro en la tabla relacionada. Otra utilidad de las claves foráneas es la eliminación y actualización en cascada. En el ejemplo de la base de datos “primerabd”, la tabla “ventas” contiene los campos “vndor” e “id_cliente”, loscuales corresponden a las claves primarias de las tablas “vendedor” y “clientes” respectivamente, por tanto “vndor” e “id_cliente” son claves

Page 12: MySQL unidad5

foráneas de la tabla “ventas”. La definición de las claves foráneas en este ejemplose realiza mediante las instrucciones mostradas a continuación.

En el primer caso se define una relación, “vendedorFK”, entre las tablas “ventas” y “vendedor”,en la tabla “ventas”el campo “vndor”es clave foráneay referencia a la tabla “vendedor” a través del campo “id_vendedor”. En el segundo caso, se define la relación “clienteFK” entre “ventas” y “clientes”, el campo “id_cliente” de la tabla “ventas”es clave foránea que referencia a la tabla “clientes” a través del campo “id_cliente”.