0% encontró este documento útil (0 votos)
322 vistas128 páginas

Bases de Datos Libro

Este documento describe las características básicas de las bases de datos relacionales en LibreOffice Base. Explica que una base de datos se compone de tablas que contienen registros y campos, y que las tablas están relacionadas entre sí. También define conceptos clave como claves primarias, claves foráneas y tablas principales y secundarias, los cuales permiten vincular la información entre las tablas de una base de datos relacional.

Cargado por

MarcoReynoso
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
322 vistas128 páginas

Bases de Datos Libro

Este documento describe las características básicas de las bases de datos relacionales en LibreOffice Base. Explica que una base de datos se compone de tablas que contienen registros y campos, y que las tablas están relacionadas entre sí. También define conceptos clave como claves primarias, claves foráneas y tablas principales y secundarias, los cuales permiten vincular la información entre las tablas de una base de datos relacional.

Cargado por

MarcoReynoso
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Administración de bases de datos con LibreOffice Base

Capítulo 1: LibreOffice Base


Bases de datos

Desde su nacimiento, la informática se ha encargado de proporcionar herramientas que


Object 4

faciliten la manipulación de los datos. Antes de la aparición de las aplicaciones


informáticas, las empresas tenían como únicas herramientas de gestión de datos los
ficheros con cajones, carpetas y fichas de cartón. En este proceso manual, el tiempo
Object
Object 15
10
11
12
13
14
1
2
3
5
6
7
8
9

requerido para manipular estos datos era enorme. Pero la propia informática ha adaptado
sus herramientas para que los elementos que el usuario utiliza en cuanto a manejo de
datos se parezcan a los manuales. Por eso se sigue hablado de ficheros, formularios,
carpetas, directorios, etc. Muchas veces, para referirse a una base de datos, simplemente
se dice BD.

Base de datos LibreOffice Base

LibreOffice Base, al que de ahora en adelante se le llamará solamente Base, es una


interfaz de base de datos de escritorio con todas las funciones, diseñado para satisfacer las
necesidades de una amplia gama de usuarios. Pero Base también atiende a los usuarios
avanzados y requerimientos empresariales, y proporciona controladores nativos para
algunos de los motores de bases de datos multiusuario más utilizados: MySQL/MariaDB,
Adabas D, MS Access y PostgreSQL. Además, el soporte incorporado para los controladores
JDBC y ODBC estándar permite conectar a prácticamente cualquier otro motor de base de
datos existente.

Esta es la ventana del entorno de trabajo de Base

Cuando se crea una base de datos con Base, se genera un archivo con extensión: .odb

1
Administración de bases de datos con LibreOffice Base

Estructura mínima de almacenamiento en una base de datos relacional

Las bases de datos relacionales se dividen, básicamente, en los siguientes componentes:

Tabla
Objeto de almacenamiento perteneciente a una BD. Es una estructura organizada en filas y
columnas donde se almacenan registros o filas de datos. Cada tabla tiene un nombre único
en la BD.

Registro o fila
Cada una de las filas de una tabla, esta compuesto por campos o atributos.

Campo o columna
Es cada una de las casillas de un registro donde se guardan los datos. Cada campo tiene un
nombre único para la tabla de la cual forma parte, además es de un tipo (naturaleza)
determinado, por tanto no podemos guardar limones en el cajón de las naranjas, en
términos informáticos y a modo de ejemplo, no encontraremos un dato alfanumérico
(letras y números) en un campo diseñado para guardar datos numéricos. Se describirán
los tipos de datos más adelante.

Bases de datos relacionales


Base genera bases de datos relacionales. En un modelo relacional, cada grupo de datos
está representado por tablas las cuales tienen relación entre sí.

Campos o columnas de la tabla


Tabla Estudiante

CodigoEstudiante NombreEstudiante
10-2020 Marco del Cid
11-2020 Vilma Pérez

Registros o filas de la tabla

2
Administración de bases de datos con LibreOffice Base

Clave primaria

En el diseño de bases de datos relacionales, se llama clave principal a un campo o a una


combinación de campos que identifica de forma única a cada fila de una tabla. Una clave
primaria comprende de esta manera una columna o conjunto de columnas. No puede
haber dos filas en una tabla que tengan la misma clave primaria.
Ejemplos de claves primarias son DPI (asociado a una persona) o ISBN (asociado a un
libro), el código de un producto, el número de carné de un estudiante, por citar algunos
ejemplos.

En la tabla Estudiante, el código del estudiante es llave primaria o clave principal.

En Base, las claves


primarias, se
acompañan de una
llave.

Llaves compuestas

Se le llama así, a una llave que está conformada por más de un campo. En el siguiente
ejemplo, un estudiante puede tener varias materias asignadas y, si llegara a reprobar la
materia, podrá volver a asignársela.

Diagrama o Modelo Relacional

3
Administración de bases de datos con LibreOffice Base

En la tabla AsignacionMateria, la clave principal está formada por tres campos.

CodigoEstudiante CodigoMateria FechaAsignacionMateria NotaMateria


10-2020 10 15/1/2020 85
11-2020 08 10/1/2020 90
12-2020 10 12/1/2020 42
13-2020 07 25/1/2020 70
12-2020 10 8/5/2020 71

Este alumno se ha asignado dos veces el mismo curso pero, en fechas distintas

Como puede notarse, el estudiante con código: 12-020 se asignó la materia con código: 10
en fecha: 12/1/2020. Al no haber alcanzado una nota satisfactoria, se ha tenido que volver
a asignar la materia en otra fecha, habiendo obtenido, esta vez, una nota aprobada. En
este caso los dos campos se repiten, por lo que ambos deben formar la clave principal
unido con la fecha de asignación de materia, para diferenciar cuando un estudiante se
vuelve a asignar una materia (en caso de haberla reprobado)

A continuación se muestra,un caso más, de clave primaria compuesta:

La base de datos servirá para llevar registros de los productos, proveedores y pedidos.

Tabla Producto: En esta tabla, la clave primaria es el código del producto.

Tabla Proveedor: La clave principal es el código del proveedores

Tabla Pedido: La clave principal consta de tres campos.

4
Administración de bases de datos con LibreOffice Base

En la tabla Pedido, el campo CodigoProveedor no se puede definir como clave primaria


porque ya es clave primaria en la tabla Proveedor. Así mismo, el campo CodigoProducto
no se puede establecer como campo clave primaria en la tabla Pedido porque ya lo es en
la tabla Producto porque: Un único campo no puede ser clave primaria en más de una
tabla.

En el caso de la tabla Pedido, los campos CodigoProveedor y CodigoProducto sí podrían


(juntos) ser clave primaria compuesta pero, como a un mismo proveedor se le puede
comprar el mismo producto varias veces, los datos se repetirían y, al ser ambos, clave
primaria no se podría registrar este hecho. Para ello, debe incluirse como clave primaria, al
campo FechaPedido.

La siguiente tabla muestra lo explicado:

CodigoProveedor CodigoProducto FechaPedido Cantidad


10 100 20/1/2020 30
10 200 20/1/2020 45
20 300 7/3/2020 65
20 400 7/3/2020 72
10 200 9/4/2020 250
10 100 9/4/2020 52

Al proveedor con código 10 se le han comprado los productos con códigos 100 y 200 en
distintas fechas, lo que hace que la clave principal: CodigoProveedor + CodigoProducto +
Fecha sea única.

5
Administración de bases de datos con LibreOffice Base

Clave Foránea

Una clave foránea es una columna o grupo de columnas de una tabla que contiene valores
que coinciden con la clave primaria de otra tabla. Las claves foráneas se utilizan para unir
tablas.

En el ejemplo anterior, en la tabla Pedido hay dos claves foráneas: CodigoProveedor y


CodigoProducto, debido a que cada uno de ellos, en sus correspondientes tablas
(Proveedor y Producto) son claves primarias.

Un campo que no esté definido como clave primaria, también, puede ser clave foránea,
como se muestra en el siguiente ejemplo:

Entidad débil

Entidad fuerte

Clave foránea o campo de


enlace, el cual vincula la tabla
Estudiante con la tabla Pago

Tabla Principal o entidad fuerte


La tabla principal es la que tiene un único registro que puede estar relacionado con varios
de la tabla secundaria. Por lo que si la relación es 1 a varios, la que tenga el 1 sería la
principal.

Tabla secundaria o entidad débil


Es una tabla que depende de la existencia de otra . Por ejemplo la tabla Pago es una
entidad débil porque depende de la tabla Estudiante. La tabla Estudiante es entidad
fuerte porque puede existir sin la participación de la tabla Pago.

6
Administración de bases de datos con LibreOffice Base

Actividad 1.1

En cada uno de los siguientes casos, identifique una clave principal que pueda identificar a
cada objeto.

1) Un automóvil
2) Un afiliado al IGSS
3) Los libros en una biblioteca
4) Los estudiantes en un colegio
5) Una cuenta bancaria

Actividad 1.2

Escriba los campos de cada tabla para que permitan llevar registro de lo solicitado. Incluya
la clave principal.
1) Medicamentos en un hospital
2) Empleados en una empresa
3) Vehículos en un parqueo
4) Pacientes en una veterinaria
5) Libros en una biblioteca

Sello o firma del docente:

Fecha:

7
Administración de bases de datos con LibreOffice Base

Relaciones entre tablas

Las relaciones son los vínculos que tiene una tabla con otras en una base de datos
relacional. La diferencia de las bases de datos relacionales con respecto a una base de
datos plana consiste en que los datos sólo se introducen una sola vez en una tabla, pero
gracias a las relaciones pueden aparecer en las tablas que se quiera.

Cualquier modificación sólo hay que efectuarla una sola vez y automáticamente se
realizará en todas las demás tablas. De este modo se ahorra mucho tiempo, espacio y
exactitud en los datos que siempre estarán actualizados independientemente de la tabla
en la que estemos.

Tipos de relaciones

Existen tres tipos de relaciones, que se explican a continuación. Más adelante se verá
cómo quedan guardadas relaciones de este tipo en Base.

Relación uno a uno

Cada registro de la tabla A se relaciona sólo con un registro de una tabla B. En la práctica
se utilizan muy poco. En el siguiente diagrama relacional, se muestra el hecho de que en
un aula puede haber, solamente, un proyector. Las relaciones uno a uno se dan de clave
primaria a clave primaria.

8
Administración de bases de datos con LibreOffice Base

Relación uno a varios

Cada registro de la tabla A está relacionado con varios registros de la tabla B y cada
registro de la tabla B está relacionado con un sólo un registro de la tabla A.

Una relación de este tipo se daría entre las tablas Estudiante y Pago, debido a que un
estudiante puede realizar varios pagos. El diagrama relacional, se muestra a continuación:

La letra “n” significa: varios

Relación varios a varios (muchos a muchos)

Cada registro de la tabla A puede estar relacionado con más de un registro de la tabla B y
cada registro de la tabla B puede estar relacionado con más de un registro de la tabla A.

En el ejemplo, la relación varios a varios existe entre las tablas Proveedor y Producto. Un
proveedor puede abastecer varios productos y un producto puede ser solicitado a varios
proveedores. Puede notarse que se trata de una relación uno a varios recíproca entre las
dos tablas. Sin embargo, para poder implementarla, se hace necesaria una tercer tabla
que una a las otras dos. Esta tabla se denomina: Tabla de Enlace. Se trata de una tabla
secundaria que une a dos tablas primarias. El nombre de esta tabla , se puede obtener de
la acción que se lleva a cabo entre las otras dos; en este caso: A un proveedor se le
pueden PEDIR varios productos . Como los nombre de las tablas no deben ser verbos, se
opta por su correspondiente sustantivo: Pedido.

9
Administración de bases de datos con LibreOffice Base

Tabla de enlace

Observación: Sin una tabla de enlace, no se puede realizar una relación varios a varios.
Integridad Referencial

En la relación que hemos definido en el apartado anterior, se impide que cualquier registro
relacionado sea modificado o eliminado. Esta propiedad es lo que se conoce como
integridad referencial. Por ejemplo, a un estudiante que no esté registrado no se le puede
registrar pago alguno. Primero ha de existir en la tabla Estudiante para que luego sea
posible almacenar los pagos que realice.

Cuando existe una relación entre 2 tablas, cualquier operación con los datos ha de
respetar la relación. En caso contrario, no se realizará.

Tipos de campos en Base

Texto [VARCHAR]: Texto hasta 32700 caracteres, número de caracteres es variable, es


aconsejable para un campo como puede ser Observaciones.

Texto (fijo) [CHAR]: Texto hasta 255 caracteres, número de caracteres es fijo, es una buena
definición para campos como Nombre, apellidos, domicilio, etc.

10
Administración de bases de datos con LibreOffice Base

Texto [VARCHAR_IGNORECASE]: No distingue entre mayúsculas y minúsculas, cuidado con


este tipo de campo, ya que si es una base de datos que hace documentos para público
puede tener algún problema.

Nota [LONGVARCHAR]: Textos largos, 2 Gigabytes en caracteres, un buen formato para


escribir largos textos.

Tiny Integer [TINYINT]: Números enteros de -127 a 127.

Small Integer [SMALLINT]: Números enteros entre -32.768 y + 32.768.

Integer [INTEGER]: Números enteros hasta 10 dígitos. Acepta valor automático.

Big Integer [BIGINT]: Números enteros hasta 19 dígitos. Acepta valor automático.

Numero [NUMERIC]: Números enteros con muchísimos dígitos y 18 decimales.

Decimal [DECIMAL]: Similar al anterior.

Double [DOUBLE]: Números decimales con una precisión hasta 14 dígitos.

Float [FLOAT]: Números decimales con una precisión hasta 7 dígitos.

Real [REAL]: Similar al anterior.

Hora [TIME]: Datos tipo hora.

Fecha [DATE]: Datos tipo fecha, formato adecuado para fecha de nacimiento, fechas de
alta.

Fecha/Hora [TIMESTAMP]: Datos fecha y hora, un buen formato para cuando tengamos
que tener un registro de entrada y salida, en el cual debe figurar tanto la fecha como la
hora.

Sí/No [BOOLEAN]: Valores son true-false, verdadero-falso o 1-0, funciona como un


biestable.

Imagen [LONGVARBINARY]: Objetos OLE, imágenes, videos, etc...

11
Administración de bases de datos con LibreOffice Base

Actividad 1.3

Dibujar el modelo relacional de cada caso que se presenta. Todas las relaciones son uno a
varios. Identifique las tablas principales y secundarias. No olvide acompañar de una llave,
sus claves primarias. Identificar, también, las claves foráneas.

1) Un médico puede atender a varios pacientes


2) Un departamento empresarial puede tener varios empleados
3) A un equipo de fútbol le corresponden varios jugadores
4) Un cuenta-habiente puede realizar varios depósitos a su cuenta bancaria
5) A una categoría pueden pertenecer varios libros.

Actividad 1.4

Dibujar el modelo relacional de cada caso que se presenta. Todas las relaciones son varios
a varios. Identifique las tablas principales y secundarias. No olvide acompañar de una
llave, sus claves primarias y foráneas.

1) Un médico puede atender a varios pacientes y, un paciente puede ser atendido por
varios médicos.
2) Un estudiante puede prestar varios libros en la biblioteca y, un libro puede ser
prestado a varios alumnos.
3) Un cliente puede comprar varios productos y un producto puede ser vendido a
varios clientes.
4) En una empresa, un vehículo puede ser conducido por varios empleados y, un
empleado puede conducir varios vehículos.
5) En un curso pueden inscribirse varios estudiantes y , un estudiante puede
inscribirse en varios cursos.

Sello o firma del docente:

Fecha:

12
Administración de bases de datos con LibreOffice Base

Creación de una base de datos en LibreOffice Base

Para crear una BD en Base, deben seguirse los siguientes pasos:

1) Luego de poner en marcha Base, se mostrará el asistente de bases de datos, en el


cual debe estar seleccionada la opción: Crear una base de datos nueva.
2) Clic en Siguiente >

13
Administración de bases de datos con LibreOffice Base

3) Si la base de datos va a ser utilizada por otras aplicaciones de la suite de


LibreOffice, entonces marque la opción: Sí, registrar la base de datos, de lo
contrario marcar la opción No.

4) Clic en Finalizar

14
Administración de bases de datos con LibreOffice Base

A continuación se debe seleccionar la carpeta donde se desea guardar la BD y digitar el


nombre con el que se almacenará.
5) Clic en Guardar.

6) Luego de lo anterior, se mostrará el entorno de trabajo de Base


7) Para crear una tabla, hacer clic en: Crear tabla en modo de diseño...

15
Administración de bases de datos con LibreOffice Base

9) En la ventana de diseño de la tabla, se deben ingresar los nombre de los campos y


el tipo de dato de cada uno.

Si deseamos que una clave principal tenga


un valor automático, seleccionamos el campo
y en esta propiedad marcamos Sí

Estableciendo la clave principal

Siguiendo con el ejemplo anterior, estableceremos el campo Codigo como clave principal.
Para ello, hacer lo siguiente:

1) Clic derecho en encabezado de


columna del campo a configurar.
2) Seleccionar: Clave
principal
1

16
Administración de bases de datos con LibreOffice Base

Guardar la estructura de una tabla

Una vez que se ha creado la estructura de una tabla, se debe guardar para que los
cambios realizados sean permanentes. Esto se lleva a cabo de la siguiente manera:

1) Clic en la X para cerrar la ventana de diseño de tablas


2) Digitar el nombre con el que guardará la tabla.
3) Clic en Aceptar

La propiedad Valor automático

Con esta propiedad podemos indicar si el valor de un campo será asignado,


automáticamente por Base. Al establecerlo a: Sí, Base le dará un valor al campo, cada vez
que se ingrese un registro. Si lo dejamos marcado en: No, el usuario deberá ingresar el
valor para el campo. Los valores automáticos solamente funcionan con tipos de datos :
Entero, Entero largo y Entero corto.

Editar tablas

Se entiende por edición, al proceso de modificar la estructura de una tabla; es decir,


agregar o quitar campos, cambiar los tipos de datos, cambiar los nombres de los campos.
Para editar una tabla se debe realizar lo siguiente:

17
Administración de bases de datos con LibreOffice Base

1) Clic derecho sobre el nombre dela tabla a editar


2) Clic en Editar...

3) La tabla se mostrará en vista diseño, con lo cual se podrán realizar las


modificaciones deseadas.

18
Administración de bases de datos con LibreOffice Base

Eliminar campos de una tabla

En Base, se elimina un campo de una tabla de la siguiente forma:


1) Clic derecho sobre el encabezado de fila del campo a eliminar
2) Clic en Eliminar
3) Para que los cambios efectuados tengan efecto, cerrar la ventana de diseño de
tablas (haciendo clic en la X)
4) Clic en Sí, para guardar los cambios.

19
Administración de bases de datos con LibreOffice Base

Guardar una base de datos

Para guardar una base de datos se puede proceder de dos formas:

Forma 1:

1) Clic en Archivo
2) Clic en Guardar

Forma 2:
• Clic en el icono de Guardar

20
Administración de bases de datos con LibreOffice Base

Ingresar registros a una tabla


1) Para ingresar registros a una tabla, hacer doble clic sobre su nombre.

2) Luego de lo cual, se mostrará la ventana de vista de datos de la tabla


3) Para que los registros se guarden, hacer Clic en el icono Guardar registro actual.

2
3

Cómo el campo Codigo se ha configurado con


Valo automático, el usuario no debe ingresar su
valor. Por eso se muestra <Campo automático>

21
Administración de bases de datos con LibreOffice Base

Relacionando tablas en Base

El proceso se explica mediante un ejemplo, en el cual se establecerá una relación de uno a


varios: Un departamento puede tener varios empleados (un empleado puede pertenecer
a un sólo departamento).

A) Crear una base de datos llamada Empresa

B) Crear las siguientes tablas


No use tildes ni espacios para los
nombres de campos.
• Tabla : Departamento

CodigoDepartamento Entero (con propiedad valor automático en Sí)


NombreDepartamento Texto

• Tabla : Empleado Por lo general, los nombres de


tablas se establecen en singular
CodigoEmpleado Entero
CodigoDepartamento Texto
NombreEmpleado Texto

Clave foránea

Las tablas quedarán como se muestra a continuación:

En las propiedades del campo


Sueldo, por ser de tipo Decimal,
establecer en 2 la cantidad de decimales

22
Administración de bases de datos con LibreOffice Base

En el entorno de Base, se muestran las dos tablas creadas.

C) Para relacionar las tablas, hacer lo siguiente:


1) Clic en Herramientas
2) Hacer clic en Relaciones…

23
Administración de bases de datos con LibreOffice Base

3) Se mostrará la ventana de diseño de relaciones


4) Seleccionar, una a una, cada tabla y hacer clic en Añadir o hacer doble clic
sobre el nombre de cada una.
5) Luego de lo anterior, las tablas se mostrarán en el diseñador
6) Clic en Cerrar

6
5

7) Arrastre y suelte el campo: CodigoDepartamento de la tabla Departamento, hacia


el campo: CodigoDepartamento de la tabla Empleado.

Tabla secundaria
7

Tabla primaria Arrastrar campos,


siempre, de tabla
primaria hacia la
tabla secundaria

24
Administración de bases de datos con LibreOffice Base

En el supuesto de que un departamento fuera eliminado de la tabla, los correspondientes


empleados (de ese departamento), también serían eliminados de la tabla empleados; es
decir, se respetará la Integridad Referencial.

8) Se muestra la ventana de Relaciones, en la cual se marcarán las opciones:


Actualización en cascada y Eliminar en cascada. Con estas dos opciones
marcadas, Base hará que se establezca la Integridad Referencial.

9) Clic en Aceptar

25
Administración de bases de datos con LibreOffice Base

10) En la ventana de diseño de relaciones, se mostrarán las tablas con una relación
uno a varios.

Puede agregar más


tablas de la base de
datos, haciendo clic
sobre este icono.

Línea de relación

11) Al cerrar la ventana de relaciones, se deben guardar los cambios realizados,


haciendo clic en Sí.

12) A continuación se ingresan los registros, comenzando con la entidad fuerte o tabla
principal. Para este caso, la tabla: Departamento.

26
Administración de bases de datos con LibreOffice Base

13) Luego, se ingresan registros en la tabla secundaria (entidad débil)

El departamento con código cero tiene


3 empleados, el departamento 1 tiene 2

¿Qué sucede, si en la tabla Empleado agregamos un código de departamento que no


existe en la tabla Departamento?

Este mensaje indica que


el registro ingresado no es
válido por infringir la
integridad referencial

Se genera un error porque el departamento con código 3 no existe en la tabla


Departamento. Hacer clic en Aceptar y corregir el registro con un dato válido

27
Administración de bases de datos con LibreOffice Base

Modificar o eliminar una relación

Para tal propósito, hacer clic derecho sobre la línea de relación a cambiar y seleccionar la
acción requerida (Eliminar o editar) .

Errores en la creación de relaciones

Cuando se crean las estructuras de las tablas, debe tomarse en cuenta que las claves
principales y las correspondientes claves foráneas, deben ser del mismo tipo de datos. Por
ejemplo: Si la clave principal CodigoProducto es de tipo Entero y la clave foránea
CodigoProducto (en la otra tabla) es de tipo Texto, se generará el siguiente error.

Hacer clic en Aceptar y hacer las correcciones.

28
Administración de bases de datos con LibreOffice Base

Cambiar el nombre de una tabla

1) Hacer clic derecho sobre nombre de la tabla.


2) Clic en Cambiar nombre...

Actividad 1.5

Desarrollar las bases de datos que se piden a continuación. Implementar las soluciones en
Base, estableciendo las relaciones que corresponden.

1) Una base de datos para una pequeña empresa debe contener información acerca
de clientes, artículos y pedidos. Hasta el momento se registran los siguientes datos
en documentos varios:
• Para cada cliente: Número de cliente (único), Direcciones de envío (varias por
cliente), Saldo, Límite de crédito (depende del cliente, pero en ningún caso debe
superar los Q10,000.00 , Descuento.

• Para cada artículo: Número de artículo (único), proveedor que distribuye,


Existencias de ese artículo en cada fábrica, Descripción del artículo.

Para cada pedido: Cada pedido tiene una cabecera y el cuerpo del pedido. La
cabecera está formada por el número de cliente, dirección de envío y fecha del
pedido. El cuerpo del pedido son varias líneas, en cada línea se especifican el

29
Administración de bases de datos con LibreOffice Base

número del artículo pedido y la cantidad. Además, se ha determinado que se debe


almacenar la información de las fábricas. Sin embargo, dado el uso de
distribuidores, se usará: Número de la fábrica (único) y Teléfono de contacto.

2) Le contratan para hacer una BD que permita apoyar la gestión de un


sistema de ventas. La empresa necesita llevar un control de proveedores,
clientes, productos y ventas. Un proveedor tiene un código nombre, dirección,
teléfono y página web. Un cliente también tiene NIT, nombre, dirección, pero
puede tener varios teléfonos de contacto. Un producto tiene un id único,
nombre, precio actual, stock y código del proveedor . Además se organizan en
categorías, y cada producto va sólo en una categoría. Una categoría tiene id,
nombre y descripción. Por razones de contabilidad, se debe registrar la
información de cada venta con un id, fecha, cliente, descuento y monto final.
Además se debe guardar el precio al momento de la venta, la cantidad vendida y el
monto total por el producto.

3) Crear una base de datos para un sistema de control de vuelos adaptado a las
siguientes reglas de gestión (indicar las entidades, interrelaciones, etc., que se
deducen de cada una de las reglas):

a) De cada aeropuerto se conoce su código, nombre, ciudad y país. b) En cada


aeropuerto pueden tomar tierra diversos modelos de aviones (el modelo de
un avión determina su capacidad, es decir, el número de asientos. c) En cada
aeropuerto existe una colección de programas de vuelo. En cada programa de
vuelo se indica el número de vuelo, línea aérea y días de la semana en que existe
dicho vuelo. d) Cada programa de vuelo despega de un aeropuerto y aterriza en
otro. e) Los números de vuelo son únicos para todo el mundo. f) En cada
aeropuerto hay múltiples aterrizajes y despegues. Todos los aeropuertos
contemplados están en activo, es decir, tienen algún aterrizaje y algún despegue. g)
Cada vuelo realizado pertenece a un cierto programa de vuelo. Para cada vuelo se
quiere conocer su fecha, plazas vacías y el modelo de avión utilizado. h) Algunos
programas de vuelo incorporan escalas técnicas intermedias entre los aeropuertos
de salida y de llegada. Se entiende por escala técnica a un aterrizaje y despegue
consecutivos sin altas ó bajas de pasajeros. i) De cada vuelo se quieren conocer las
escalas técnicas ordenadas asignándole a cada una un número de orden. Por
ejemplo, el programa de vuelo 555 de Iberia con vuelos los lunes y jueves
despega de Guatemala y aterriza en Canadá teniendo las siguientes escalas
México, Estados Unidos.

30
Administración de bases de datos con LibreOffice Base

Formularios

Los formularios son muy útiles a la hora de introducir datos, ya que aparte de la
comodidad que ofrecen, con su uso se pueden evitar también los posibles errores que
podrían ocurrir usando la vista Hoja de Datos.

Los formularios se pueden vincular tanto a tablas como a consultas.

Crear un formulario usando el asistente

En la parte izquierda de la ventana principal hemos de hacer clic en el icono Formularios y


a su derecha en Usar el asistente para crear formulario:

31
Administración de bases de datos con LibreOffice Base

Se mostrará la siguiente ventana, y en el cuadro de diálogo Asistente para formularios:

1) Seleccionar la tabla de la cual se tomarán los campos para el formulario


2) Pueden seleccionarse los campos, uno por uno, haciendo doble clic sobre el
nombre o seleccionando cada uno y haciendo clic sobre el botón >. Para pasar
todos los campos al formulario, en un solo clic, presionamos el botón >>.
3) Se muestran los campos que se visualizaran en el formulario
4) Clic en Siguiente>

32
Administración de bases de datos con LibreOffice Base

5) En caso de que se desee agregar una tabla secundaria puede hacerse en esta
ventana. De lo contrario clic en Siguiente>

6) La forma en que se visualizarán los controles se elige en este ventana


7) Clic en Siguiente>

33
Administración de bases de datos con LibreOffice Base

8) La ventana de modo de entrada de datos, ofrece varias opciones. Si desea que el


formulario tenga todas las funcionalidades, deje marcada la opción: El formulario
mostrará todos los datos. Clic en Siguiente>

9) Seleccionar el estilo deseado para el formulario. Clic en Siguiente>

34
Administración de bases de datos con LibreOffice Base

10) Ingresar el nombre para el formulario. Puede dejarse el nombre asignado por
defecto.
11) Clic en Finalizar

10

11

12) Se muestra el formulario con los campos de la tabla seleccionada y el primer


registro.

Usando la barra de navegación podrá: buscar, agregar, guardar, eliminar, filtrar y


moverse entre registros (hacia el anterior o siguiente)

35
Administración de bases de datos con LibreOffice Base

13) Al terminar de trabajar con el formulario, cerrarlo y guardar los cambios.


14) En entorno de Base, se mostrarán los nombres de los formularios creados.

• Se puede modificar el diseño de un formulario,


haciendo clic derecho sobre su nombre y luego
clic en Editar...

Formulario con subformulario

Al trabajar con datos relacionales (datos relacionados que están almacenados en tablas
independientes), a menudo necesita ver los datos de varias tablas o consultas en el mismo
formulario. Por ejemplo, puede que quiera ver al mismo tiempo datos de los
departamentos de una tabla e información sobre los empleados desde otra tabla. Los
subformularios son una herramienta útil para hacerlo. Con este tipo de formularios, hay
una sección de encabezado (entidad fuerte) y una de detalle (entidad débil)

Para la creación de un formulario con subformualrio, seguir el siguiente proceso:

36
Administración de bases de datos con LibreOffice Base

1) Clic en: Crear un formulario mediante asistente…

2) Seleccionar la tabla principal (para la sección de detalle)


3) Trasladar todos los campos de la tabla al formulario, haciendo clic en el botón >>
4) Los campos se mostrarán en el cuadro de la derecha
5) Clic en Siguiente>

3
4

37
Administración de bases de datos con LibreOffice Base

6) Se mostrará la ventana para agregar la entidad débil como subformulario. Marcar


la casilla: Agregar subformulario y el botón de radio: Subformulario basado en
relación existente.
7) Seleccionar, con un clic, el nombre de la tabla secundaria para la sección de detalle
8) Clic en Siguiente>

9) Seleccione cada campo de la tabla secundaria, haciendo doble clic. No elija la clave
foránea (para este caso, el campo CodigoDepartamento no seleccionarlo)
10) Los campos pasaran al cuadro de la derecha. Clic en: Siguiente>

9
10

Las claves foráneas no deben pasarse


a este cuadro

38
Administración de bases de datos con LibreOffice Base

11) Esta ventana permite organizar los controles en los formularios. Para la tabla
principal (detalle), seleccione: En columnas. Para la tabla secundaria, elija: Como
hoja de datos. Clic en Siguiente>

11

12) Dejar marcada esta opción. Clic en Siguiente>

12

39
Administración de bases de datos con LibreOffice Base

13) Seleccionar el estilo deseado. Clic en Siguiente>

13

Puede cambiar el aspecto de los


campos, seleccionando estas opciones

14) Digitar el nombre para el formulario. Clic en Finalizar.

14

40
Administración de bases de datos con LibreOffice Base

15) Se muestra en formulario, con la tabla principal como encabezado y el


subformulario con los campos y registros de la tabla secundaria.

La tabla principal es el encabezado

La tabla secundaria es el detalle

Creación de formulario sin asistente

Los formularios pueden ser generados sin necesidad de asistentes. Esto es útil
cuando se desea personalizar, lo más posible, el aspecto de un formulario.
Seguir los siguientes pasos:

1) Seleccionar la opción Formularios y luego un


clic en : Crear un formulario en modo diseño.

41
Administración de bases de datos con LibreOffice Base

2) Clic en el icono de Navegador de formularios…

3) Se mostrará la ventana para crear un nuevo formulario. Clic derecho sobre:


Formularios , luego seleccionar: Nuevo, clic en: Formulario

42
Administración de bases de datos con LibreOffice Base

4) En la ventana del navegador de formularios, se habrá agregado un formulario. Es


conveniente cambiarle en nombre que Base le ha asignado, para ello: Clic derecho
sobre el nombre y seleccionar: Cambiar nombre.

5) Digitar el nombre deseado y luego oprimir Enter.


6) Se le debe asignar una tabla o consulta. Hacer clic derecho sobre el nombre del
formulario y luego clic en Propiedades.

43
Administración de bases de datos con LibreOffice Base

7) En ventana de Propiedades del formulario, pestaña Datos, elegir el tipo de


contenido (tabla, consulta, orden de SQL). En este caso, seleccionar: Tabla.
8) En Contenido, elegir la tabla que servirá para el formulario. Por ejemplo: Empleado
9) Clic en X, para cerrar la ventana

9
7

10) Clic en el icono: Añadir campo...

10

44
Administración de bases de datos con LibreOffice Base

11) Se mostrara la ventana de registros de la tabla, de la cual, con clic sostenido


arrastrar y soltar los campos hacia el formulario.

11

12) Organizar los campos en el formulario, para que se vea estético.


13) Desactivar o activar el modo de diseño haciendo clic en este icono.
14) El formulario mostrará cada registro de la tabla

13

Puede navegar entre


registros, haciendo clic en
las flechas.

45
Administración de bases de datos con LibreOffice Base

Agregar controles a un formulario

La finalidad de un formulario es, principalmente, la de ofrecer una forma agradable y


eficiente de ingresar registros a una tabla. Por ello, es conveniente mejorar su aspecto
agregando etiquetas, colores, etc.

Incorporar etiquetas

1) Estando el formulario en modo de diseño, hacer clic sobre el control Etiqueta y


dibujar un rectángulo en el área deseada dentro del formulario.
2) Hacer doble clic sobre el rectángulo de la etiqueta para que se muestren sus
propiedades.
3) Modificar la propiedad etiqueta con el texto deseado.
4) En Tipo de letra, en el botón … , puede modificar la fuente, el tamaño, color.

5) Guardar las modificaciones hechas en el formulario

46
Administración de bases de datos con LibreOffice Base

Cuadro combinado

Este tipo de control permite seleccionar una entre varias opciones. Es muy útil para validar
o restringir el ingreso de datos en un campo. Los cuadros combinados pueden hacer
referencia a datos almacenados en tablas.

Cualquier control que represente a un campo de una tabla, está compuesto por dos
controles: Una etiqueta y un cuadro de texto.

Para transformar un cuadro de texto en un cuadro combinado, primero deben separarse la


etiqueta del cuadro de texto. Para tal propósito;

1) Hacer clic derecho sobre el cuadro de texto a modificar


2) Clic en Desagrupar
3) Eliminar el cuadro de texto

47
Administración de bases de datos con LibreOffice Base

4) Seleccionar con un clic el control Cuadro combinado y “dibujarlo” en la ubicación


deseada dentro del formulario.
5) Se abrirá el Asistente de Cuadro combinado, en el cual se ha de seleccionar la
tabla que proporcionará los datos. En este caso, la tabla Departamento
6) Clic en Siguiente>

48
Administración de bases de datos con LibreOffice Base

7) Con un clic, elegir el campo que se visualizará en el cuadro combinado. Debe ser la
clave foránea. Para este ejemplo: CodigoDepartamento.
8) Clic en Siguiente>

9) El valor seleccionado en el cuadro combinado, se deberá guardar en la


tabla, por lo que debe seleccionarse esta opción.
10) Elegir el campo en el que se almacenará. Clic en Finalizar

10

Este campo debe ser


la clave foránea de la
tabla secundaria.

49
Administración de bases de datos con LibreOffice Base

Al ejecutar el formulario, se mostrará el primer registro de la tabla. Haciendo clic sobre el


cuadro combinado, se visualizarán los códigos de departamento almacenados en la tabla
Departamento.

Concatenación de campos

En el formulario anterior, puede observarse el inconveniente de que el cuadro combinado


muestra, solamente, los códigos de los departamentos. Sería conveniente que se
mostraran tanto los códigos como los nombres de los departamentos registrados. Para
lograrlo, se hará uso de la funcionó SQL denominada: Concat. Su sintaxis es la siguiente:

Concat(campo o texto1, campo o texto2, …)

donde todos sus argumentos deben ser de tipo texto.

Aplicándolo al formulario de ejemplo, se debe realizar lo siguiente:

1) Abrir el formulario en modo de diseño


2) Doble clic sobre el cuadro combinado

1
2

50
Administración de bases de datos con LibreOffice Base

3) Se mostrará la ventana de propiedades del cuadro combinado.


4) En la ficha Datos , propiedad: Contenido de lista, agregue lo siguiente:

SELECT DISTINCT Concat("CodigoDepartamento", "NombreDepartamento") FROM


"Departamento"

No borre el contenido de la lista; solamente


modifíquelo, agregando la función Concat y
los nombres de campos que desea unir,
encerrados entre comillas.

5) Cerrar la ventana de propiedades


6) Ejecute el formulario y seleccione una opción del cuadro combinado.

Se muestran los códigos junto


con el nombre del departamento

51
Administración de bases de datos con LibreOffice Base

Consultas

Las bases de datos tienen información almacenada para diversos fines, entre ellos el de
poder consultar los datos que queramos en un determinado momento. Por ello uno de los
elementos que más se suele utilizar son las consultas, ya que éstas nos van a permitir
extraer la información para, posteriormente, poder tratarla.

Mediante una consulta seleccionamos y filtramos la información a mostrar de una o varias


tablas.

El resultado de una consulta se denomina: Hoja de Datos y presenta aspecto de tabla; sin
embargo, las consultas no crean nuevas tablas, sino que muestran parte de la tabla o las
tablas sobre las que se realiza la consulta.

Asistente para consultas

El Asistente para consultas sencillas crea consultas que recuperan datos de los campos
especificados en una o más tablas o consultas, aunque hemos de recordar que éstas no
podrán tener un grado de complejidad grande, ya que para este tipo de consultas
debemos implementarlas en vista Diseño.

El asistente contiene una serie de pasos en los que iremos configurando la consulta y que
nos mostrarán, al terminarlos, el resultado obtenido.

Para crear una consulta con el asistente, seguir los siguientes pasos:
1) Seleccionar la opción : Consultas
2) Clic en: Usar el asistente para crear una consulta…

52
Administración de bases de datos con LibreOffice Base

3) Seleccionar la tabla sobre la que se hará la consulta.

4) Se mostrarán los campos de la tabla seleccionada. Con doble clic, sobre el nombre
de cada campo, puede seleccionarlos para que se muestren en la consulta. Si se
necesitan todos los campos de la tabla, pueden seleccionarse haciendo clic en el
botón >>
5) Clic en Siguiente

4
Los campos
pasarán hacia el
cuadro derecho
5

53
Administración de bases de datos con LibreOffice Base

6) Si se quiere una consulta que muestre los campos en algún orden, puede
establecerse en esta ventana. Clic en Siguiente>

7) Pueden establecerse condiciones sobre los campos, para que se muestren


solamente aquellos que cumplan con determinadas condiciones. En el ejemplo se
ha establecido la condición de que se muestren, únicamente, los empleados cuyo
sueldo sea mayor que 7000 . Clic en Siguiente>

54
Administración de bases de datos con LibreOffice Base

8) Clic en Siguiente>

9) No se desea usar alias, por lo tanto, clic en Siguiente>

55
Administración de bases de datos con LibreOffice Base

10) Puede darsele un nombre, a la consulta, en este espacio. Clic en Finalizar.

11) Se muestra la consulta con los registros de la tabla

Unicamente se muestran los registros cuyo


campo sueldo es mayor a 7000

56
Administración de bases de datos con LibreOffice Base

Creación de consultas sin asistente

Se pueden crear consultas sin recurrir al asistente y con ello poder personalizarla. Seguir
los siguientes pasos:

1) Seleccionar la opción Consultas


2) Clic en : Crear consulta en modo de diseño...

3) Con doble clic, seleccionamos la(s) tabla(s) necesarias. Clic en Cerrar.

57
Administración de bases de datos con LibreOffice Base

4) Se muestran las tablas seleccionadas

Las consultas que se crean en


este entorno, se denominan:
Query by example (Consultas
por ejemplo)

5) Con clic sostenido, arrastrar y soltar hacia la fila Campo, los campos que desean
visualizarse en la consulta.

58
Administración de bases de datos con LibreOffice Base

6) Para guardar la consulta, hacer clic en este botón.


7) Se mostrará la ventana para darle un nombre a la consulta, hacer clic en Sí.

8) Digitar el nombre deseado. Clic en Aceptar

59
Administración de bases de datos con LibreOffice Base

9) Para visualizar la consulta, presionar el botón: Ejecutar consulta

10) Se mostrarán los registros con los campos que fueron seleccionados para la
consulta

Las consultas anteriores se denominan consultas de selección.

60
Administración de bases de datos con LibreOffice Base

Operadores Relacionales usados en consultas

Estos operadores son necesarios para construir condiciones (criterios) que deberán
cumplir los registros que deseamos consultar. Dichos operadores se listan a continuación:

> mayor que


< menor que
>= mayor o igual que
<= menor o igual que
<> diferente que
= igual que
Like Como
Betwen Entre

Ejemplo de uso de operadores relacionales:

Mostrar los empleados que ganan menos de Q9000.00.


En la fila Criterios y en la columna donde se ubica el campo Sueldo, escribimos : <9000

Se pueden agregar y borrar criterios,


tantas veces como se desee.

61
Administración de bases de datos con LibreOffice Base

Al ejecutar la consulta, se mostraran los registros cuyo campo sueldo cumple con la
condición establecida.

Consultas con más de una condición

Cuando deseamos consultar registros de una tabla que cumplan con más de una
condición, debemos tener cuidado de identificar si las condiciones estarán conectadas con
Y o con O.

Uso de condiciones Y

Suponga que deseamos consultar nuestra tabla Empleado, de tal manera que se muestren
únicamente los registros los empleados del departamento de Contabilidad que ganan mas
de Q9000.00. En este caso deben cumplirse ambas condiciones:

Que el departamento sea Contabilidad y que sueldo sea mayor que 9000

62
Administración de bases de datos con LibreOffice Base

LibreOffice Base identifica las condiciones tipo Y, cuando todas las condiciones están
colocadas en la fila Criterio.

Al ejecutar la consulta, se muestran los registros que cumplen con las dos condiciones

63
Administración de bases de datos con LibreOffice Base

Uso de condiciones O

Podemos utilizar este tipo de condiciones cuando deseamos una consulta que muestre los
registros que cumplan cualquiera de las condiciones (no necesariamente todas). Para
establecer condiciones O, utilizamos a partir de la fila O del diseño de consultas. Cada
criterio O debe escribirse en una Fila distinta.

Ejemplo: Deseamos una consulta que muestre los empleados que sean del
departamento de programación o los que ganen más de Q7500.00

Filas O

Las condiciones O, se
colocan en filas
distintas, a partir de la
fila Criterio.

64
Administración de bases de datos con LibreOffice Base

Al ejecutar la consulta se mostrarán los registros que cumplen una u otra condición: O que
sean del departamento de contabilidad o que ganen más de Q7500.00.

Tipos de consultas

Consultas de selección

Son las consultas que extraen o nos muestran únicamente los datos que le especificamos.
Este tipo de consultas son las anteriormente vistas.

Consultas de acción

Este tipo de consultas se utilizan para realizar cambios a los registros en una sola
operación. Para implementarlas se utiliza la ventana de: Ejecutar instrucción de SQL.
Existen tres tipos de consultas de acción:
• De eliminación
• De actualización
• De datos anexados y de creación de tablas.

Consulta de eliminación (Delete)

Como su nombre lo indica, este tipo de consultas nos permiten la eliminación de los
registros de una tabla que cumplen con ciertas condiciones.

Ejemplo:

La tabla Empleado tiene los siguientes registros:

65
Administración de bases de datos con LibreOffice Base

Se desea eliminar a los empleados que ganan menos de Q3000.00. Como se podrá
observar, hay sólo un empleado que cumple la condición: Juan Ortiz.

1) Clic en Herramientas
2) Clic en SQL…
3) En la ventana SQL, escribir la instrucción para la eliminación de los registros que
cumplan la condición, la cual se traduce como:
Borrar los registros desde la tabla Empleado donde el sueldo sea menor a 3000
4) Clic en Ejecutar

3
2

66
Administración de bases de datos con LibreOffice Base

5) Cerrar la ventana de SQL.


6) Al abrir la tabla, los registros que cumplieron la condición de eliminación fueron
borrados.

El empleado Juan Ortiz fue eliminado de la tabla

Consulta de actualización (Update)

Este tipo de consultas nos permiten modificar los registros cuyos campos cumplan con los
criterios establecidos. Mediante la sentencia Update podemos realizar la actualización. La
sintaxis de Update es:

Update “nombre-tabla” Set “campo” = valor Where Condición

Veamos esto con un ejemplo.

A los empleados del departamento de Programación, se les dará un aumento del Q500.00

Los datos de la tabla son los siguientes:

67
Administración de bases de datos con LibreOffice Base

1) En la ventana SQL, escribir la siguiente instrucción:

2) Clic en Ejecutar

El departamento
con código 1 es el
de programación

3) Abrir la tabla y verificar los cambios. Puede observarse que, solamente, los
empleados del departamento de programación recibieron el aumento de Q500.00

Si hubiésemos querido darle el aumento a todos los empleados; independientemente a


qué departamento pertenecieran, la instrucción no tendría Where. Como se muestra a
continuación:

Update "Empleado" set "sueldo" = "sueldo" + 500

68
Administración de bases de datos con LibreOffice Base

Observación: En una instrucción SQL en Base, los nombres de tablas y campos se encierran
entre comillas.

Consultas de actualización de condiciones compuestas

Se dice que una condición es compuesta cuando el criterio está formado por más de una
condición. Para establecer condiciones compuestas se utilizan los operadores lógicos, los
cuales son:

• And
• Or

Operador And

La consulta afecta a los registros que cumplan, necesariamente, todas las condiciones.

Ejemplo:

Descontar Q75.00 por seguro médico, a los empleados de Contabilidad que ganen más de
Q10000.00.

Solución:
En la ventana SQL, escriba lo siguiente:

Update "Empleado" set "sueldo" = "sueldo" - 75 where


"sueldo" > 10000 And "CodigoDepartamento" = 0

Ejecute el código y verifique los resultados

Operador Or

Podemos utilizar este tipo de condiciones cuando deseamos una consulta que muestre los
registros que cumplan cualquiera de las condiciones (no necesariamente todas).

69
Administración de bases de datos con LibreOffice Base

Ejemplo:

Crear una consulta que descuente Q50.00 a los empleados que sean del departamento de
Programación o a los que ganen más de Q10000.00. Los registros de la tabla son:

Abrir la ventana SQL y digitar lo siguiente:

Update "Empleado" set "sueldo" = "sueldo" - 50 where


"CodigoDepartamento" = 1 Or "sueldo" > 10000

Abriendo la tabla, se puede corroborar que los cambios han sido realizados en los registros
que cumplieron una u otra condición (o ambas).

Uso de Like

Este operador nos permite comparar campos de tipo texto con datos del mismo tipo. Se
usa con frecuencia acompañado del comodín *. El comodin * representa “cualquier
texto”.

Sintaxis:

Like ‘caracter*’ Que comience con determinado carácter o texto


Like ‘*caracter’ Que termine con determinado carácter o texto
Like ‘*caracter*’ Que tenga determinado carácter o texto en cualquier parte del texto

70
Administración de bases de datos con LibreOffice Base

Ejemplo:

Deseamos una consulta que muestre los empleados cuyo nombre comience con V o con
M (para esto usaremos Like*).

Crear una Query by example (es decir, una consulta donde no ingresaremos -
directamente- instrucciones SQL). Para ello:

1) Clic en: Crear una consulta en modo de diseño…

2) Trasladar a la fila Campo, los registros a visualizar. En la fila


3) La primera sentencia Like ‘V*’ (encerrada entre apóstrofes) significa: Que empiece
con V sin importar los caracteres restantes.
4) Al tratarse de una condición O, la siguiente debe ponerse en la fila de abajo.

Puede ocultar la
visualización de un
campo, desmarcando
esta opción

3
4

71
Administración de bases de datos con LibreOffice Base

5) Ejecutar la consulta, haciendo clic sobre este botón:

6) Se mostrarán los registros que cumplen una u otra condición.

Uso de Between (entre)

Se utiliza para establecer rangos de valores en una consulta.

Su sintaxis es:

Between valor1 And valor2

Ejemplo:

Mostrar los empleados que ganen entre Q9000.00 y Q10000.00

72
Administración de bases de datos con LibreOffice Base

En la fila Criterio, se digita la condición

Al ejecutar la consulta, se mostrarán los registros que cumplen la condición.

73
Administración de bases de datos con LibreOffice Base

Consultas con parámetros

Una consulta de este tipo es aquella en la que al momento de ejecutarla se nos pide el
ingreso de un dato, necesario para la consulta. Un parámero se establece de acuerdo a
esta sintaxis:

operador :Identificador de parámetro

Donde, operador es relacional (>, <, >=, <=, <>,=) y texto de entrada es el mensaje que se
mostrará para solicitar datos. Este último no debe llevar espacios.

Ejemplo 1:

Hacer una consulta que muestre los empleados que ganan más de un valor ingresado por
el usuario. La instrucción es:

> :Ingrese_Sueldo

Entre los : y el identificador de


parámetro, no debe haber espacio

Donde, Ingrese_Sueldo es el parámetro.

Texto de entrada

74
Administración de bases de datos con LibreOffice Base

Al ejecutar la consulta, se mostrará esta vetana, solicitando un valor. Digitar el dato y hacer
clic en Aceptar.

Texto de entrada

Luego de lo cual, se muestran los registros que cumplen con la condición, con relación al
valor del parámetro.

Ejemplo 2:

Hacer una consulta que muestre los empleados que ganan entre un rango de valores
solicitados por parámetros.

La solucion necesita el uso de Between, como se muestra a continuación:

75
Administración de bases de datos con LibreOffice Base

Al ejecutar la consulta se pediran dos datos:

• Ingresar el primero y luego clic en Siguiente


• Ingresar el segundo y clic en Aceptar

Empleados que ganan


entre Q8000 y Q9000

Se muestran los registros coincidentes con los valores que estan entre los parámetros
ingresados.

76
Administración de bases de datos con LibreOffice Base

Campos calculados en consultas

Un campo calculado es aquel que, mediante una expresión aritmética, lógica o de texto,
toma su valor de otros campos de una tabla. . Un campo calculado, además de una
expresión que le dé un valor, necesita un encabezado con el cual mostrarse en la consulta.
A este encabezado se denomina: Alias. El Alias es el encabezado de columna con el que se
mostrará cuando se ejecute la consulta.

La forma de escribir correctamente un campo calculado es:

“CampoDeLaTabla” Operador Valor

A todo campo calculado, es recomendable un alias. Estos campos se agregan,


manualmente, en la fila Campo.

Ejemplo:

Calcular el IGSS (4.83%) de todos los empleados. Como el símbolo de % no puede


utilizarse para ese propósito en Base, usar su equivalente: 4.83 /100

La expresion para el cálculo del IGSS es:

“sueldo” * 4.83 / 100

Campo calculado que se


mostrará con el
encabezado IGSS

Si la fila Alias no está visible, haga clic en este botón.

77
Administración de bases de datos con LibreOffice Base

Al ejecutar la consulta, se mostrará el campo calculado con su respectivo Alias.

Observaciones:

• En la fila Alias, pude cambiarle los encabezados a todos lo campo.


• Los alias puede contener texto con espacios
• Los campos calculados no se almacenan en la base de datos.

Consulta de tablas de referencias cruzadas

Una consulta de referencias cruzadas es aquella que nos permite visualizar los datos
agrupados, con respecto a un campo. Al agrupar, podemos: sumar, calcular promedios,
mostrar el mínimo o máximo, etc.

Ejemplo 1:

Se desea saber el total de sueldos de los departamentos de Contabilidad y Programación.

1) Se crea una consulta en modo de diseño.


2) Se agregan las tablas que servirán para el proceso. En este caso: tabla
Departamento y tabla Empleado.
3) Agregar los campos necesarios. Hacer, antes, un análisis de los campos que serán
útiles.
4) En la fila: Función, elija Agrupar para determinar el campo por el cual se hará el
agrupamiento de datos. Para este ejemplo, se necesita agrupar los datos por
Departamento. El campo de agrupamiento es el Encabezado de fila.
5) De igual forma, en la fila: Función, Identificar el campo sobre el cual se hará el
cálculo. En el problema planteado se nos indica que se debe calcular el total de
sueldos, por lo tanto se utilizará la función: Suma.

78
Administración de bases de datos con LibreOffice Base

Agregar un alias
adecuado

4 5

6) Ejecutar la consultar

Alias

Encabezados de fila

79
Administración de bases de datos con LibreOffice Base

Actividad

Crear las siguientes tablas:

Tabla: Vendedor

Tabla: Venta

Establecer la relación:

Un vendedor puede realizar varias ventas

80
Administración de bases de datos con LibreOffice Base

Ingresar los siguientes registros a cada tabla:

Tabla: Vendedor

Tabla: Ventas

Generar una consulta de tablas de referencias cruzadas, que muestre el total vendido por
cada persona.

81
Administración de bases de datos con MySQL

82
Administración de bases de datos con MySQL

Capítulo 2: MySQL
El administrador de bases de datos Mysql

SQL, Structure Query Language (Lenguaje de Consulta Estructurado) es un lenguaje de


programación para trabajar con base de datos relacionales como MySQL, Oracle, etc.

MySQL es un interpretador de SQL, es un servidor de base de datos.

MySQL permite crear base de datos y tablas, insertar datos, modificarlos, eliminarlos,
ordenarlos, hacer consultas y realizar muchas operaciones, etc., resumiendo: administrar
bases de datos.

Ingresando instrucciones en la linea de comandos o embebidas en un lenguaje como PHP


nos comunicamos con el servidor. Cada sentencia debe acabar con punto y coma (;).

La sensibilidad a mayúsculas y minúsculas, es decir, si hace diferencia entre ellas, depende


del sistema operativo, Windows no es sensible, pero Linux si. Por ejemplo Windows
interpreta igualmente las siguientes sentencias:

create database administracion;


Create DataBase administracion;

Pero Linux interpretará como un error la segunda.

Se recomienda usar siempre minúsculas.


Durante este curso utilizaremos la versión "MySQL Community" que es Open Source.

Mostrar bases de datos (show databases)

Una base de datos es un conjunto de tablas. Una base de datos tiene un nombre con el cual
accederemos a ella.
Supongamos que vamos a trabajar en una base de datos ya creada , llamada
"administracion".

Para que el servidor nos muestre las bases de datos existentes, se lo solicitamos enviando la
instrucción:

show databases;

Nos mostrará los nombres de las bases de datos, debería aparecer, otras, "administracion".

83
Administración de bases de datos con MySQL

Creación de una tabla y mostrar sus campos

Una base de datos almacena sus datos en tablas.


Una tabla es una estructura de datos que organiza los datos en columnas y filas; cada
columna es un campo (o atributo) y cada fila, un registro. La intersección de una columna
con una fila, contiene un dato específico, un solo valor.

Cada registro contiene un dato por cada columna de la tabla.

Cada campo (columna) debe tener un nombre. El nombre del campo hace referencia a la
información que almacenará.

Cada campo (columna) también debe definir el tipo de dato que almacenará.

nombre clave
--------------------------------------
Mario Pérez Marito
Maria García Mary
Diego Rodríguez z8080

Acá tenemos la tabla usuarios, que contiene dos campos llamados:nombre y clave. Luego
tenemos tres registros almacenados en esta tabla, el primero almacena en el campo nombre
el valor "Mario Pérez" y en el campo clave "Marito", y así sucesivamente con los otros dos
registros.

Creación de tablas

La tabla debe ser definida con un nombre que la identifique y con el cual accederemos a
ella.

Creamos una tabla llamada "usuarios", digitamos:

create table usuarios (


nombre varchar(30),
clave varchar(10)
);

Si intentamos crear una tabla con un nombre ya existente (existe otra tabla con ese
nombre), mostrará un mensaje de error indicando que la acción no se realizó porque ya
existe una tabla con el mismo nombre.

Para ver las tablas existentes en una base de datos digitamos nuevamente:

84
Administración de bases de datos con MySQL

show tables;

Ahora aparece "usuarios" entre otras que ya pueden estar creadas.

Cuando se crea una tabla debemos indicar su nombre y definir sus campos con su tipo de
dato. En esta tabla "usuarios" definimos 2 campos:

- nombre: que contendrá una cadena de hasta 30 caracteres de longitud,


que almacenará el nombre de usuario y
- clave: otra cadena de caracteres de 10 de longitud, que guardará la clave de
cada usuario.

Cada usuario ocupará un registro de esta tabla, con su respectivo nombre y clave.

Mostrando la estructura de una tabla

Para ver la estructura de una tabla usamos el comando "describe" junto al nombre de la
tabla:

describe usuarios;

Aparece lo siguiente:

Field Type Null


_________________________
nombre varchar(30) YES
clave varchar(10) YES

Esta es la estructura de la tabla "usuarios"; nos muestra cada campo, su tipo, lo que ocupa
en bytes y otros datos como la aceptación de valores nulos etc, que veremos más adelante
en detalle.

Para eliminar una tabla usamos "drop table". digitamos:

drop table usuarios;

Si digitamos nuevamente:

drop table usuarios;

Aparece un mensaje de error, indicando que no existe, ya que intentamos borrar una tabla
inexistente.

Para evitar este mensaje podemos escribir:

85
Administración de bases de datos con MySQL

drop table if exists usuarios;

En la sentencia precedente especificamos que elimine la tabla "usuarios" , si existe.

Cada vez que ingresamos a MySQL debemos seleccionar la base de datos a usar, mediante
la cláusula "use" y posteriormente ejecutar comandos SQL sobre dicha base de datos. Por
ejemplo si deseamos trabajar con la base de datos administracion, digitamos la siguiente
orden:

use administración;

Actividad

A) Queremos almacenar los datos de nuestros amigos.

1- Elimine la tabla "agenda" si existe:


drop table if exists agenda;

2- Cree una tabla llamada "agenda", debe tener los siguientes campos:

create table agenda(


nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

3- Intente crearla nuevamente. Aparece mensaje de error.

4- Visualice las tablas existentes (show tables).

5- Visualice la estructura de la tabla "agenda" (describe agenda).

6- Elimine la tabla, si existe (drop table, if exists).

7- Intente eliminar la tabla sin la cláusula if exists (drop table agenda).


Debe aparecer un mensaje de error cuando no existe la tabla.

B) Queremos almacenar información referente a nuestros libros.

1- Elimine la tabla "libros", si existe.

2- Cree una tabla llamada "libros".


Debe definirse con los siguientes campos:

86
Administración de bases de datos con MySQL

titulo varchar(20),
autor varchar(30),
y editorial varchar(15)

3- Intente crearla nuevamente. Aparece mensaje de error.

4- Visualice las tablas existentes.

5- Visualice la estructura de la tabla "libros".

6- Elimine la tabla, si existe.

7- Intente eliminar la tabla.

Abrir una base de datos

Para poder trabajar con una base de datos, que ha sido previamente creada, tenemos que
abrila con el fin de poder habilitarla para su uso. Esto se logra mediante la sentencia: Use.
La sintaxis es:

Use nombreBaseDeDatos;

Por ejemplo, si deseamos abrir una base de datos llamada: Clientes, debemos abrila con:

use Clientes;

Tipos de datos básicos en MySQL

Al crear una tabla debemos resolver qué campos (columnas) tendrá y que tipo de datos
almacenará cada uno de ellos, es decir, su estructura. Estos son algunos tipos de datos
básicos:

varchar: se usa para almacenar cadenas de caracteres. Una cadena es una secuencia de
caracteres. Se coloca entre comillas (simples): 'Hola'. El tipo "varchar" define una cadena
de longitud variable en la cual determinamos el máximo de caracteres. Puede guardar hasta
65535 caracteres (versiones antiguas de MySQL permitían solo 255). Para almacenar
cadenas de hasta 30 caracteres, definimos un campo de tipo varchar(30). Si asignamos una
cadena de caracteres de mayor longitud que la definida, la cadena se corta. Por ejemplo, si
definimos un campo de tipo varchar(10) y le asignamos la cadena 'Buenas tardes', se
almacenará 'Buenas tar' ajustándose a la longitud de 10 caracteres.

87
Administración de bases de datos con MySQL

integer: se usa para guardar valores numéricos enteros, de -2000000000 a 2000000000


aprox. Definimos campos de este tipo cuando queremos representar, por ejemplo,
cantidades.

float: se usa para almacenar valores numéricos decimales. Se utiliza como separador el
punto (.). Definimos campos de este tipo para precios, por ejemplo.

Antes de crear una tabla debemos pensar en sus campos y optar por el tipo de dato
adecuado para cada uno de ellos. Por ejemplo, si en un campo almacenaremos números
enteros, el tipo "float" sería una mala elección; si vamos a guardar precios, el tipo "float" es
correcto, no así "integer" que no tiene decimales.
Servidor de MySQL instalado en forma local.

Crearemos una tabla en la base de datos "administracion" con una serie de campos de
distinto tipo:

create table libros(


titulo varchar(40),
autor varchar(20),
editorial varchar(15),
precio float,
cantidad integer
);

Procederemos a insertar una serie de filas:

insert into libros values ('El


aleph','Borges','Emece',45.50,100);

insert into libros values('Alicia en el país de las


maravillas','Lewis Carroll','Planeta',25,200);
insert into values ('Matematica estas
ahi','Paenza','Planeta',15.8,200);

Actividad

A) Un videoclub que alquila películas en video almacena la información de sus


películas en una tabla llamada "peliculas"; para cada película necesita los siguientes
datos:
-nombre, cadena de caracteres de 20 de longitud
-actor, cadena de caracteres de 20 de longitud
-duración, valor numérico entero
-cantidad de copias: valor entero

88
Administración de bases de datos con MySQL

1- Elimine la tabla, si existe:


drop table if exists peliculas;

2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo:


create table peliculas(
nombre varchar(20),
actor varchar(20),
duracion integer,
cantidad integer
);
3- Vea la estructura de la tabla:

describe peliculas;

4- Ingrese los siguientes registros:


insert into peliculas values ('Mision imposible','Tom
Cruise',120,3);
insert into peliculas values ('Mision imposible 2','Tom
Cruise',180,2);
insert into peliculas values ('Mujer bonita','Julia
R.',90,3);

insert into peliculas values ('Elsa y Fred','China


Zorrilla',90,2);

5- Muestre todos los registros:


select * from peliculas;

B) Una empresa almacena los datos de sus empleados en una tabla "empleados" que
guarda los siguientes datos: nombre, documento, sexo, domicilio, sueldobase.

1- Elimine la tabla, si existe:


drop table if exists empleados;

2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo:


create table empleados(
nombre varchar(20),
documento varchar(8),
sexo varchar(1),
domicilio varchar(30),
sueldobase float
);

3- Vea la estructura de la tabla:


describe empleados;

89
Administración de bases de datos con MySQL

4- Ingrese algunos registros:


insert into empleados values ('Marco del
Cid','22345678','m','zona 1',9000);

insert into empleados values ('Ana


Acosta','24345678','f','zona 6',5000);

insert into empleados values ('Marcos


Torres','27345678','m','zona 7',8000);

5- Seleccione todos los registros:


select * from empleados;

Seleccionar campos con select

Hemos aprendido cómo ver todos los registros de una tabla:

select * from libros;

El comando "select" recupera los registros de una tabla. Con el asterisco (*) indicamos que
seleccione todos los campos de la tabla que nombramos.

Podemos especificar el nombre de los campos que queremos ver separándolos por comas:

select titulo,autor,editorial from libros;

En la sentencia anterior la consulta mostrará sólo los campos "titulo", "autor" y "editorial".
En la siguiente sentencia, veremos los campos correspondientes al título y precio de todos
los libros:

select titulo,precio from libros;

Para ver solamente la editorial y la cantidad de libros tipeamos:

select editorial,cantidad from libros;

Procedamos a crear una tabla, insertar algunas filas y mostrar solo algunas columnas de
dicha tabla:

drop table if exists libros;

create table libros(


titulo varchar(100),
autor varchar(30),
editorial varchar(15),
precio float,
cantidad integer

90
Administración de bases de datos con MySQL

);

insert into libros values ('Leyendas de Guatemala','Miguel


Angel Asturias','Salvat',45.50,100);

insert into values ('Alicia en el pais de las


maravillas','Lewis Carroll','Planeta',25,200);

insert into values ('Matematica estas


ahi','Paenza','Planeta',15.8,200);

select titulo,precio from libros;

select editorial,cantidad from libros;

select * from libros;

Actividad

A) Un videoclub que alquila películas en video almacena la información de sus


películas en alquiler en una tabla llamada "peliculas".

1- Elimine la tabla, si existe:

drop table if exists peliculas;

2- Cree la tabla:

create table peliculas(


titulo varchar(20),
actor varchar(20),
duracion integer,
cantidad integer
);

3- Vea la estructura de la tabla:

describe peliculas;

4- Ingrese los siguientes registros:

insert into peliculas values ('Mision imposible','Tom


Cruise',120,3);

insert into peliculas values ('Mision imposible 2','Tom


Cruise',180,2);

insert into peliculas values ('Mujer bonita','Julia


R.',90,3);

91
Administración de bases de datos con MySQL

insert into peliculas values ('Elsa y Fred','China


Zorrilla',90,2);

5- Realice un "select" mostrando solamente el título y actor de todas las películas:

select titulo,actor from peliculas;

6- Muestre el título y duración de todas las películas.

7- Muestre el título y la cantidad de copias.

B) Una empresa almacena los datos de sus empleados en una tabla llamada
"empleados".

1- Elimine la tabla, si existe:


drop table if exists empleados;

2- Cree la tabla:
create table empleados(
nombre varchar(20),
documento varchar(8),
sexo varchar(1),
domicilio varchar(30),
sueldobase float
);

3- Vea la estructura de la tabla:


describe empleados;

4- Ingrese algunos registros:


insert into empleados values ('Marco del
Cid','22345678','m','zona 1',9000);

insert into empleados values ('Ana


Acosta','24345678','f','zona 8',5000);

insert into empleados ('Juan Torres','27345678','m','zona


5',8000);

5- Muestre todos los datos de los empleados.

6- Muestre el nombre y documento de los empleados.

7- Realice un "select" mostrando el nombre, documento y sueldo básico de todos los


empleados.

92
Administración de bases de datos con MySQL

C) Un comercio que vende artículos de computación registra la información de sus


productos en la tabla llamada "articulos".

1- Elimine la tabla si existe:

drop table if exists articulos;

2- Cree la tabla "articulos" con los campos necesarios para almacenar los siguientes datos:
- código del artículo: entero,
- nombre del artículo: 20 caracteres de longitud,

- descripción: 30 caracteres de longitud,


- precio: float.

3- Vea la estructura de la tabla (describe).

4- Ingrese algunos registros:

insert into articulos values (1,'impresora','Epson Stylus


C45',400.80);
insert into articulos values(2,'impresora','Epson Stylus
C85',500);
insert into articulos values (3,'monitor','Samsung 14',800);

5- Muestre todos los campos de todos los registros.

6- Muestre sólo el nombre, descripción y precio.

Selección de registros condicional con Where

El comando "select" recupera los registros de una tabla. Detallando los nombres de los
campos separados por comas, indicamos que seleccione todos los campos de la tabla que
nombramos.

Existe una cláusula, "where" que es opcional, con ella podemos especificar condiciones
para la consulta "select". Es decir, podemos recuperar algunos registros, sólo los que
cumplan con ciertas condiciones indicadas con la cláusula "where". Por ejemplo, queremos
ver el usuario cuyo nombre es "MarioPerez", para ello utilizamos "where" y luego de ella,
la condición:

select nombre, clave from usuarios where nombre='MarioPerez';

93
Administración de bases de datos con MySQL

Para las condiciones se utilizan operadores relacionales (tema que trataremos más adelante
en detalle). El signo igual(=) es un operador relacional. Para la siguiente selección de
registros especificamos una condición que solicita los usuarios cuya clave es igual a
'municipal':

select nombre, clave from usuarios where clave='municipal';

Si ningún registro cumple la condición establecida con el "where", no aparecerá ningún


registro.

Ingresar a PHPMyAdmin o Workbench y ejecutar los siguientes comandos SQL:

drop table if exists usuarios;

create table usuarios (


nombre varchar(30),
clave varchar(10)
);

describe usuarios;

insert into usuarios values ('Marco','madcr');


insert into usuarios values ('MarioPerez','Marito');
insert into usuarios values ('Marcelo','municipal');
insert into usuarios values ('Gustavo','municipal');

select nombre, clave from usuarios;

select nombre, clave from usuarios where nombre='Marco';

select nombre, clave from usuarios where clave='municipal';

select nombre, clave from usuarios where clave='river';

Actividad

A) Crear una base de datos llamada: Contactos


Crear una tabla denominada: "agenda".
1- Eliminamos "agenda", si existe:

drop table if exists agenda;

2- Creamos la tabla, con los siguientes campos:

94
Administración de bases de datos con MySQL

nombre (cadena de 20), domicilio (cadena de 30) y telefono


(cadena de 11).

3- Visualice la estructura de la tabla "agenda".(describe).

4- Ingrese los siguientes registros:


'Alberto Mores','zona 4','4234567',
'Juan Torres','zona 5','4458787',
'Mariana López','zona 7','4545454',
'Fernando López','zona 18','4545454'.

5- Seleccione todos los registros de la tabla. (select).

6- Seleccione el registro cuyo nombre sea 'Juan Torres'.

7- Seleccione el registro cuyo domicilio esté en 'zona 4'.

8- Muestre los datos de quienes tengan el teléfono '4545454'.

B) Un comercio que vende artículos de computación registra los datos de sus artículos
en una tabla llamada: articulos. La base de datos se debe llamar Liberia (sin tilde).

1- Elimine la tabla si existe.

2- Cree la tabla "articulos" con la siguiente estructura:


create table articulos(
codigo integer,
nombre varchar(20),
descripcion varchar(30),
precio float
);

3- Vea la estructura de la tabla (describe).

4- Ingrese algunos registros:


insert into articulos values (1,'impresora','Epson Stylus
C45',400.80);
insert into articulos values (2,'impresora','Epson Stylus
C85',500);
insert into articulos values (3,'monitor','Samsung
14',800);

95
Administración de bases de datos con MySQL

insert into articulos values (4,'teclado','ingles


Biswal',100);
insert into articulos values (5,'teclado','español
Biswal',90);

5- Seleccione todos los datos de los registros cuyo nombre sea "impresora".

6- Muestre sólo el código, descripción y precio de los teclados.

Operadores Relacionales
Hemos aprendido a especificar condiciones de igualdad para seleccionar registros de una
tabla; por ejemplo:
select * from libros where autor='Miguel Angel Asturias';

Utilizamos el operador relacional de igualdad.


Los operadores relacionales vinculan un campo con un valor para que MySQL compare
cada registro (el campo especificado) con el valor dado.
Los operadores relacionales son los siguientes:
= igual
<> distinto
> mayor
< menor
>= mayor o igual
<= menor o igual

Podemos seleccionar los registros cuyo autor sea diferente de 'Asturias', para ello usamos la
condición:
select * from libros where autor <>'Asturias';

Podemos comparar valores numéricos. Por ejemplo, queremos mostrar los libros cuyos
precios sean mayores a 20 quetzales:
select * from libros where precio > 20;

También, los libros cuyo precio sea menor o igual a 30 quetzales:


select * from libros where precio <= 30;

96
Administración de bases de datos con MySQL

Ingresemos al programa PHPMyAdmin o Workbench y ejecutamos los siguientes


comandos SQL donde utilizamos los operadores relacionales:

Create database Libreria


drop table if exists libros;

create table libros(


titulo varchar(20),
autor varchar(30),
editorial varchar(15),
precio float
);

insert into libros values ('Leyendas de


Guatemala’,'Aturias','Salvat',62.50);

insert into libros values ('Martin Fierro','José


Hernandez','Emece',16.00);

insert into libros values ('Aprenda PHP','Mario


Molina','Emece',35.40);

insert into libros values ('El señor


Presidente','Asturias','F&G Editores',100);

select titulo, autor,editorial,precio from libros;

select titulo, autor,editorial,precio from libros


where autor <> 'Asturias';

select titulo, autor,editorial,precio from libros where


precio > 20;

select titulo,autor,editorial,precio from libros


where precio <= 30;

Eliminación de registros con Delete


Para eliminar los registros de una tabla usamos el comando "delete":
delete from usuarios;

La ejecución del comando indicado en la línea anterior borra TODOS los registros de la
tabla.

97
Administración de bases de datos con MySQL

Si queremos eliminar uno o varios registros debemos indicar cuál o cuáles, para ello
utilizamos el comando "delete" junto con la clausula "where" con la cual establecemos la
condición que deben cumplir los registros a borrar. Por ejemplo, queremos eliminar aquel
registro cuyo nombre de usuario es 'Marco':
delete from usuarios where nombre='Marco';

Si solicitamos el borrado de un registro que no existe, es decir, ningún registro cumple con
la condición especificada, no se borrarán registros, pues no encontró registros con ese dato.
El comando delete hay que tener mucho cuidado en su uso, una vez eliminado un registro
no hay forma de recuperarlo. Si por ejemplo ejecutamos el comando:
delete from usuarios;

Si la tabla tiene 1000000 de filas, todas ellas serán eliminadas.

Evitar borrados masivos


En MySQL hay una variable de configuración llamada SQL_SAFE_UPDATES que puede
almacenar los valores 1 (activa) y 0 (desactiva). Cuando tiene el valor 1 no permite ejecutar
comandos delete sin indicar un where y que dicho where se relacione a una clave primaria,
tema que veremos más adelante.

Ingresemos al programa "Workbench" y ejecutamos los siguientes comandos SQL donde


utilizamos entre otros el comando delete:
Create database sistema;
drop table if exists usuarios;
create table usuarios (
nombre varchar(30),
clave varchar(10)
);

insert into usuarios values ('Marco','marcocid');


insert into usuarios values ('Mario Pérez','Marito');
insert into usuarios values ('Marcelo','municipal');
insert into usuarios values ('Gustavo','municipal');

delete from usuarios;

delete from usuarios where nombre='Marco';

select nombre,clave from usuarios;

98
Administración de bases de datos con MySQL

delete from usuarios where clave='municipal';

select nombre,clave from usuarios;

Si ejecutamos este conjunto de comandos SQL se produce un error en el primer comando


'delete' debido a que la variable 'SQL_SAFE_UPDATES' tiene el valor 1 (es decir está
activa), en MySQL 8.0 se instala por defecto para la variable 'SQL_SAFE_UPDATES' con
el valor 1.

La idea de que no se puedan ejecutar ciertos comandos 'delete' es para evitar borrados
masivos de datos que luego no podemos recuperar.

Tenemos dos soluciones para resolver el problema de los 'delete', la primera es encerrar
todo el bloque donde ejecutamos los comandos delete cambiando el esta de la variable
'SQL_SAFE_UPDATES':

Método 1:

El primer método es cambiar el estado de la variable SQL_SAFE_UPDATES en forma


temporal:

Create database sistema;


drop table if exists usuarios;

create table usuarios (


nombre varchar(30),
clave varchar(10)
);

insert into usuarios values ('Marco','marcocid');


insert into usuarios values ('Mario Pérez','Marito');
insert into usuarios values ('Marcelo','municipal');
insert into usuarios values ('Gustavo','municipal');

set SQL_SAFE_UPDATES=0;

delete from usuarios;

delete from usuarios where nombre='Marco';

select nombre,clave from usuarios;

delete from usuarios where clave='municipal';

select nombre,clave from usuarios;

99
Administración de bases de datos con MySQL

set SQL_SAFE_UPDATES=1;

Tengamos en cuenta que disponer la variable SQL_SAFE_UPDATES para que los borrados
sean solo seguros es muy conveniente cuando hay programadores que recién están
comenzando en SQL y hay datos valiosos ya almacenados.

Podemos saber el estado global de la variable 'SQL_SAFE_UPDATES' mediante la


consulta:

select @@sql_safe_updates;

Método 2:

El segundo método es cambiar el estado de la variable SQL_SAFE_UPDATES a nivel


general, para ello desde el programa "Workbench" ingresamos a la opción Edit ->
Preferences...:

Clic en Ok.

100
Administración de bases de datos con MySQL

Debemos cerrar y volver a entrar al programa "Workbench" para que el cambio se haga
efectivo.
Si prueba en el servidor tutorialesprogramacionya.com el comando SQL 'delete' verá que
no hay restricciones en el borrado de filas, es decir que la variable SQL_SAFE_UPDATES
se encuentra en '0'.
Seguramente cambiará el estado de la variable 'SQL_SAFE_UPDATES' a '0' en su servidor,
pero es bueno tener cuidado cada vez que ejecutamos un comando SQL 'delete':

Actualización de registros con Update


Para modificar uno o varios datos de uno o varios registros utilizamos "update"
(actualizar).
Por ejemplo, en nuestra tabla "usuarios", queremos cambiar los valores de todas las claves,
por "Comunicaciones":
update usuarios set clave='Comunicaciones';

Utilizamos "update" junto al nombre de la tabla y "set" junto con el campo a modificar y su
nuevo valor. El cambio afectará a todos los registros.
Podemos modificar algunos registros, para ello debemos establecer condiciones de
selección con "where".
Por ejemplo, queremos cambiar el valor correspondiente a la clave de nuestro usuario
llamado 'Mario Pérez', queremos como nueva clave 'Boca', necesitamos una condición
"where" que afecte solamente a este registro:

update usuarios set clave='Comunicaciones' where


nombre='Mario Pérez';

Si no encuentra registros que cumplan con la condición del "where", ningún registro es
afectado. Las condiciones no son obligatorias, pero si omitimos la cláusula "where", la
actualización afectará a todos los registros.
También se puede actualizar varios campos en una sola instrucción:
update usuarios set nombre='Marcela Duarte', clave='Marce'
where nombre='Marcela';

101
Administración de bases de datos con MySQL

Para ello colocamos "update", el nombre de la tabla, "set" junto al nombre del campo y el
nuevo valor y separado por coma, el otro nombre del campo con su nuevo valor.

Igual al concepto anterior cuando utilizamos el comando 'update' si la variable


'SQL_SAFE_UPDATES' se encuentra con un 1 (activa) luego solo se pueden ejecutar
actualizaciones de una única fila disponiendo en el where la clave primaria (tema que no
hemos visto)

Por el momento es aconsejable cambiar 'SQL_SAFE_UPDATES' al valor cero si no lo hizo


en el concepto anterior.
Luego de cambiar 'SQL_SAFE_UPDATES' a cero puede ejecutar este conjunto de
sentencias SQL en el "Workbench":
create database empleados;
drop table if exists usuarios;

create table usuarios (


nombre varchar(30),
clave varchar(10)
);

insert into usuarios values ('Marco','marcocid');


insert into usuarios values ('Mario Pérez','Marito');
insert into usuarios values ('Marcela','Comunicaciones');
insert into usuarios values ('Gustavo','Comunicaciones');

select * from usuarios;

update usuarios set clave='Comunicaciones';


select nombre,clave from usuarios;

update usuarios set nombre='Gustavo García'


where nombre='Gustavo';

update usuarios set nombre='Marcela Duarte', clave='Marce'


where nombre='Marcela';

select nombre,clave from usuarios;

102
Administración de bases de datos con MySQL

Actividad

Cree o abra una base de datos llamada: Contactos. Trabaje con la tabla "agenda" que
almacena los datos de sus amigos.

1- Elimine la tabla si existe.

2- Cree la tabla:
create table agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);

3- Visualice la estructura de la tabla "agenda" (describe).

4- Ingrese los siguientes registros (insert into):

Mores,Alberto,zona 4,4234567,
Torres,Juan,zona 3,4458787,
Lopez,Mariana,zona 6,4545454,
Lopez,Jose,zona 7,4545454,
Peralta,Susana,zona 18,4123456.

5- Modifique el registro cuyo nombre sea "Juan" por "Juan Jose"(update- where):

update agenda set nombre='Juan Jose' where nombre='Juan';

6- Actualice los registros cuyo número telefónico sea igual a '4545454' por '4445566':

update agenda set telefono='4445566' where


telefono='4545454';

7- Actualice los registros que tengan en el campo "nombre" el valor "Juan" por "Juan Jose"
(ningún registro afectado porque ninguno cumple con la condición del "where"):

update agenda set nombre='Juan Jose' where nombre='Juan';

103
Administración de bases de datos con MySQL

Clave Primaria (primary key)


Una clave primaria es un campo (o varios) que identifica 1 solo registro (fila) en una
tabla.
Para un valor del campo clave existe solamente 1 registro. Los valores no se repiten ni
pueden ser nulos.
Veamos un ejemplo, si tenemos una tabla con datos de personas, el número de documento
puede establecerse como clave primaria, es un valor que no se repite; puede haber personas
con igual apellido y nombre, incluso el mismo domicilio (padre e hijo por ejemplo), pero su
documento será siempre distinto.
Si tenemos la tabla "usuarios", el nombre de cada usuario puede establecerse como clave
primaria, es un valor que no se repite; puede haber usuarios con igual clave, pero su nombre
de usuario será siempre distinto.
Establecemos que un campo sea clave primaria al momento de creación de la tabla:
create table usuarios (
codigo int primary key,
nombre varchar(20),
clave varchar(10),

);

Para definir un campo como clave primaria agregamos "primary key" luego de la definición
de todos los campos y entre paréntesis colocamos el nombre del campo que queremos como
clave.
Si visualizamos la estructura de la tabla con "describe" vemos que el campo "nombre" es
clave primaria y no acepta valores nulos(más adelante explicaremos esto detalladamente).
Ingresamos algunos registros:
insert into usuarios values (1,'Marco','marcocid');
insert into usuarios values (2,'Mario Perez','Marito');
insert into usuarios values (3,'Marcela','Comunicaciones');
insert into usuarios values (4,'Gustavo','Comunicaciones');

Si intentamos ingresar un valor para el campo clave que ya existe, aparece un mensaje de
error indicando que el registro no se cargó pues el dato clave existe. Esto sucede porque los
campos definidos como clave primaria no pueden repetirse.
Ingresamos un registro con un nombre de usuario repetido, por ejemplo:

104
Administración de bases de datos con MySQL

insert into usuarios values ('Gustavo','Boca');

Una tabla sólo puede tener una clave primaria. Cualquier campo (de cualquier tipo) puede
ser clave primaria, debe cumplir como requisito, que sus valores no se repitan.
Al establecer una clave primaria estamos indexando la tabla, es decir, creando un índice
para dicha tabla; a este tema lo veremos más adelante.

drop table if exists usuarios;

create table usuarios (


codigo int primary key,
nombre varchar(20),
clave varchar(10)
);

describe usuarios;

insert into usuarios values (1 ,'Marco','marcocid');


insert into usuarios values (2, 'MarioPerez','Marito');
insert into usuarios values (3, 'Marcela','Comunicaciones');
insert into usuarios values (4, 'Gustavo','Comunicaciones');

insert into usuarios values (1, 'Gustavo','Municipal');

Este registro no se almacenaría,


generaría un error porque el registro
con código 1 ya existe

105
Administración de bases de datos con MySQL

Clave primaria entera con auto incremento


Un campo de tipo entero puede tener otro atributo extra 'auto_increment'. Los valores de
un campo 'auto_increment', se inician en 1 y se incrementan en 1 automáticamente.
Se utiliza generalmente en campos correspondientes a códigos de identificación para
generar valores únicos para cada nuevo registro que se inserta.
Sólo puede haber un campo "auto_increment" y debe ser clave primaria (o estar
indexado).
Para establecer que un campo auto incremente sus valores automáticamente, éste debe ser
entero (integer) y debe ser clave primaria:
create table libros(
codigo int primary key auto_increment,
titulo varchar(50),
autor varchar(50),
editorial varchar(25),

);

Para definir un campo auto incrementable colocamos "auto_increment" luego de la


definición del campo al crear la tabla.
Hasta ahora, al ingresar registros, colocamos el nombre de todos los campos antes de los
valores; es posible ingresar valores para algunos de los campos de la tabla, pero recuerde
que al ingresar los valores debemos tener en cuenta los campos que detallamos y el orden
en que lo hacemos.
Cuando un campo tiene el atributo "auto_increment" no es necesario ingresar valor para él,
porque se inserta automáticamente tomando el último valor como referencia, o 1 si es el
primero.
Para ingresar registros digitamos null el campo definido como "auto_increment", por
ejemplo:
insert into libros values( null, 'El señor
Presidente,','Asturias','Salvat');

Este primer registro ingresado guardará el valor 1 en el campo correspondiente al código.


Si continuamos ingresando registros, el código (dato que no ingresamos) se cargará
automáticamente siguiendo la secuencia de auto incremento.

106
Administración de bases de datos con MySQL

Un campo "auto_increment" funciona correctamente sólo cuando contiene únicamente


valores positivos. Más adelante explicaremos cómo definir un campo con sólo valores
positivos.
Está permitido ingresar el valor correspondiente al campo "auto_increment", por ejemplo:
insert into libros values(6,'Martin Fierro','Jose
Hernandez','Paidos');

Pero debemos tener cuidado con la inserción de un dato en campos "auto_increment".


Debemos tener en cuenta que:
- si el valor está repetido aparecerá un mensaje de error y el registro no se
ingresará.

- si el valor dado saltea la secuencia, lo toma igualmente y en las siguientes


inserciones, continuará la secuencia tomando el valor más alto.

- si el valor ingresado es 0, no lo toma y guarda el registro continuando la


secuencia.

- si el valor ingresado es negativo (y el campo no está definido para aceptar sólo


valores positivos), lo ingresa.

Para que este atributo funcione correctamente, el campo debe contener solamente valores
positivos; más adelante trataremos este tema.

Probemos el siguiente bloque de comandos SQL desde "Workbench" para trabajar con un
campo con auto incremento:
create database librería;
drop table if exists libros;

create table libros(


codigo integer auto_increment,
titulo varchar(50),
autor varchar(50),
editorial varchar(25),
primary key (codigo)
);

describe libros;

insert into libros values(null,'El señor


presidente','Asturias','Salvat');

107
Administración de bases de datos con MySQL

select * from libros libros;

insert into libros values(null,'Martin Fierro','Jose


Hernandez','Emece');
insert into libros values(null,'Aprenda PHP','Mario
Molina','Emece');
insert into libros values(null,'Cervantes y el
quijote','Borges','Paidos');
insert into libros values(null,'Matematica estas ahi',
'Paenza', 'Paidos');

select codigo,titulo,autor,editorial from libros;

insert into libros values(6,'Martin Fierro','Jose


Hernandez','Paidos');

insert into libros values(2,'Martin Fierro','Jose


Hernandez','Planeta');

insert into libros values(15,'Harry Potter y la piedra


filosofal','J.K. Rowling','Emece');

insert into libros values(null,'Harry Potter y la camara


secreta','J.K. Rowling','Emece');

insert into libros values(0,'Alicia en el pais de las


maravillas','Lewis Carroll','Planeta');

insert into libros values(-5,'Alicia a traves del


espejo','Lewis Carroll','Planeta');

select * from libros;

Indique el registro que generó error y explique el por qué:

108
Administración de bases de datos con MySQL

Eliminación de registros con truncate table


Aprendimos que para borrar todos los registro de una tabla se usa "delete" sin condición
"where".
También podemos eliminar todos los registros de una tabla con "truncate table". Por
ejemplo, queremos vaciar la tabla "libros", usamos:
truncate table libros;

La sentencia "truncate table" vacía la tabla (elimina todos los registros) y vuelve a crear la
tabla con la misma estructura.
La diferencia con "drop table" es que esta sentencia borra la tabla, "truncate table" la vacía.
La diferencia con "delete" es la velocidad, es más rápido "truncate table" que "delete" (se
nota cuando la cantidad de registros es muy grande) ya que éste borra los registros uno a
uno.
Otra diferencia es la siguiente: cuando la tabla tiene un campo "auto_increment", si
borramos todos los registros con "delete" y luego ingresamos un registro, al cargarse el
valor en el campo autoincrementable, continúa con la secuencia teniendo en cuenta el valor
mayor que se había guardado; si usamos "truncate table" para borrar todos los registros, al
ingresar otra vez un registro, la secuencia del campo autoincrementable vuelve a iniciarse
en 1.
Por ejemplo, tenemos la tabla "libros" con el campo "codigo" definido "auto_increment", y
el valor más alto de ese campo es "5", si borramos todos los registros con "delete" y luego
ingresamos un registro sin valor de código, se guardará el valor "6"; si en cambio, vaciamos
la tabla con "truncate table", al ingresar un nuevo registro sin valor para el código, iniciará
la secuencia en 1 nuevamente.

Probemos ejecutar este conjunto de comandos SQL en nuestro servidor local de MySQL
accediendo al mismo desde el programa "Workbench":
drop table if exists libros;

create table libros(


codigo primary key integer auto_increment,
titulo varchar(50),
autor varchar(50),
editorial varchar(25),
);

109
Administración de bases de datos con MySQL

insert into libros values('Martin Fierro','Jose


Hernandez','Planeta');
insert into libros values('Aprenda PHP','Mario
Molina','Emece');
insert into libros values('Cervantes y el
quijote','Borges','Paidos');
insert into libros values('Matematica estas ahi', 'Paenza',
'Paidos');
insert into libros values('El señor presidente', 'Asturias',
'Salvat');

delete from libros;

select * from libros;

insert into libros (titulo,autor,editorial)


values('Antología poetica', 'Borges', 'Emece');

select * from libros;

truncate table libros;

insert into libros values('Antología poetica', 'Borges',


'Emece');

select * from libros;

Explique los resultados obtenidos

110
Administración de bases de datos con MySQL

Tipos de datos
Ya explicamos que al crear una tabla debemos elegir la estructura adecuada, esto es,
definir los campos y sus tipos más precisos, según el caso. Por ejemplo, si un campo
numérico almacenará solamente valores enteros positivos el tipo "integer" con el atributo
"unsigned" es más adecuado que, por ejemplo un "float".
Hasta ahora hemos visto 3 tipos de datos: varchar, integer (con y sin signo) y float (con y
sin signo). Hay más tipos, incluso, subtipos.
Los valores que podemos guardar son:
A) TEXTO: Para almacenar texto usamos cadenas de caracteres. Las cadenas se colocan
entre comillas simples. Podemos almacenar dígitos con los que no se realizan operaciones
matemáticas, por ejemplo, códigos de identificación, números de documentos, números
telefónicos. Tenemos los siguientes tipos: varchar, char y text.
B) NUMEROS: Existe variedad de tipos numéricos para representar enteros, negativos,
decimales. Para almacenar valores enteros, por ejemplo, en campos que hacen referencia a
cantidades, precios, etc., usamos el tipo integer. Para almacenar valores con decimales
utilizamos: float o decimal.
C) FECHAS Y HORAS: para guardar fechas y horas dispone de varios tipos: date (fecha),
datetime (fecha y hora), time (hora), year (año) y timestamp.
D) OTROS TIPOS: enum y set representan una enumeración y un conjunto
respectivamente. Lo veremos más adelante.
E) Otro valor que podemos almacenar es el valor "null". El valor 'null' significa “valor
desconocido” o "dato inexistente", ya lo estudiamos. No es lo mismo que 0 o una cadena
vacía.

111
Administración de bases de datos con MySQL

Tipos de datos numéricos


Hasta ahora hemos visto 2 tipos de datos para almacenar valores numéricos: integer (con
y sin signo) y float (con y sin signo). Existe variedad de tipos numéricos para representar
enteros, negativos, decimales.
Para almacenar valores enteros, por ejemplo, en campos que hacen referencia a cantidades,
precios, etc., usamos:
1) integer(x) o int(x): su rango es de -2000000000 a 2000000000 aprox. El tipo "int
unsigned" va de 0 a 4000000000. El tipo "integer" tiene subtipos:
- mediumint(x): va de –8000000 a 8000000 aprox. Sin signo va de 0 a 16000000 aprox.
- smallint(x): va de –30000 a 30000 aprox., sin signo, de 0 a 60000 aprox.
- tinyint(x): define un valor entero pequeño, cuyo rango es de -128 a 127. El tipo sin signo
va de 0 a 255.
- bool o boolean: sinónimos de tinyint(1). Un valor cero se considera falso, los valores
distintos de cero, verdadero.
- bigint(x): es un entero largo. Va de –9000000000000000000 a 9000000000000000000
aprox. Sin signo es de 0 a 10000000000000000000.
Para almacenar valores con decimales utilizamos:
2) float (t,d): número de coma flotante. Su rango es de -3.4e+38 a –1.1e-38 (9 cifras).
3) decimal o numeric (t,d): el primer argumento indica el total de dígitos y el segundo, la
cantidad de decimales. El rango depende de los argumentos, también los bytes que ocupa.
Si queremos almacenar valores entre 0.00 y 99.99 debemos definir el campo como tipo
"decimal (4,2)". Si no se indica el valor del segundo argumento, por defecto es 0. Para los
tipos "float" y "decimal" se utiliza el punto como separador de decimales.
Todos los tipos enteros pueden tener el atributo "unsigned", esto permite sólo valores
positivos y duplica el rango. Los tipos de coma flotante también aceptan el atributo
"unsigned", pero el valor del límite superior del rango no se modifica.
Es importante elegir el tipo de dato adecuado según el caso, el más preciso. Por ejemplo, si
un campo numérico almacenará valores positivos menores a 10000, el tipo "int" no es el
más adecuado, porque su rango va de -2000000000 a 2000000000 aprox., conviene el tipo
"smallint unsigned", cuyo rango va de 0 a 60000 aprox. De esta manera usamos el menor
espacio de almacenamiento posible.

112
Administración de bases de datos con MySQL

Tipo Bytes de almacenamiento


_______________________________________
tinyint 1
smallint 2
mediumint 3
int 4
bigint 8
float 4
decimal(t,d) t+2 si d>0, t+1 si d=0 y d+2 si t<d

Probemos en "Workbench" crear una tabla con campos de distinto tipo y luego ejecutar el
comando describe:
drop table if exists libros;

create table libros(


codigo int unsigned primary key auto_increment,
titulo varchar(20) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint unsigned,

);

describe libros;

Tipos de datos para Fechas y horas


Para guardar fechas y horas dispone de varios tipos:
1) date: representa una fecha con formato "YYYY-MM-DD". El rango va de "1000-01-01"
a "9999-12-31".
2) datetime: almacena fecha y hora, su formato es "YYYY-MM-DD HH:MM:SS". El
rango es de "1000-01-01 00:00:00" a "9999-12-31 23:59:59".
3) time: una hora. Su formato es "HH:MM:SS". El rango va de "-838:59:59" a "838:59:59".
4) year(2) y year(4): un año. Su formato es "YYYY" o "YY". Permite valores desde 1901
a 2155 (en formato de 4 dígitos) y desde 1970 a 2069 (en formato de 2 dígitos).
Si ingresamos los valores como cadenas, un valor entre "00" y "69" es convertido a valores
"year" en el rango de 2000 a 2069; si el valor está entre "70" y "99", se convierten a valores
"year" en el rango 1970 a 1999.

113
Administración de bases de datos con MySQL

Si ingresamos un valor numérico 0, se convierte en "0000"; entre 1 y 69, se convierte a


valores "year" entre 2001 a 2069; entre 70 y 99, es convertido a valores "year" de 1970 a
1999.
Para almacenar valores de tipo fecha se permiten como separadores "/", "-" y ".".
• Si ingresamos '06-12-31' (año de 2 dígitos), lo toma como '2006-12-31'.
• Si ingresamos '2006-2-1' (mes y día de 1 dígito), lo toma como '2006-02-01'.
• Si ingresamos '20061231' (cadena sin separador), lo toma como '2006-12-31'.
• Si ingresamos 20061231 (numérico), lo toma como '2006-12-31'.
• Si ingresamos '20061231153021' (cadena sin separadores), lo toma como '2006-12-
31 15:30:21'.
• Si ingresamos '200612311530' (cadena sin separadores con un dato faltante) no lo
reconoce como fechahora y almacena ceros.
• Si ingresamos '2006123' (cadena sin separadores con un dato faltante) no lo
reconoce como fecha y almacena ceros.
• Si ingresamos '2006-12-31 11:30:21' (valor date time) en un campo 'date', toma sólo
la parte de la fecha, la hora se corta, se guarda '2006-12-31'.
Es importante elegir el tipo de dato adecuado según el caso, el más preciso. Por ejemplo, si
sólo necesitamos registrar un año (sin día ni mes), el tipo adecuado es "year" y no "date".

Tipo Bytes de almacenamiento


_______________________________________
date 3
datetime 8
time 3
year 1

Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones


SQL para probar campos de tipo time:
drop table if exists vehiculos;

create table vehiculos(


placa char(6)primary key,
tipo char (4),
horallegada time not null,

114
Administración de bases de datos con MySQL

horasalida time
);

insert into vehiculos values ('ACD123','auto','8:30');


insert into vehiculos values('BGF234','moto','8:35');
insert into vehiculos values('KIU467','auto','9:40');

select * from vehiculos;

update vehiculos set horasalida='11:45'


where patente='ACD123';

insert into vehiculos values('LIO987','auto','10',null);

select * from vehiculos;

Campos calculados

Es posible obtener salidas en las cuales una columna sea el resultado de un cálculo y no
un campo de una tabla.
Si queremos ver los títulos, precio y cantidad de cada libro escribimos la siguiente
sentencia:
select titulo,precio,cantidad from libros;

Si queremos saber el monto total en dinero de un título podemos multiplicar el precio por la
cantidad por cada título, pero también podemos hacer que MySQL realice el cálculo y lo
incluya en una columna extra en la salida:

select titulo, precio,cantidad,precio*cantidad


from libros;

Si queremos saber el precio de cada libro con un 10% de descuento podemos incluir en la
sentencia los siguientes cálculos:
select titulo, precio,precio*0.1,precio-(precio*0.1)
from libros;

Ejecutemos el siguiente bloque de instrucciones SQL donde generamos columnas


calculadas en los comandos select:

115
Administración de bases de datos con MySQL

create database librería;


drop table if exists libros;

create table libros(


codigo int primary key unsigned auto_increment,
titulo varchar(40) not null,
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,
cantidad smallint unsigned,

);

insert into libros values('El señor


presidente','Asturias','Salvat',100,25);
insert into libros values('Martin Fierro','Jose
Hernandez','Emece',22.20,200);

insert into libros values('Antologia


poetica','Borges','Planeta',40,150);

insert into libros values('Aprenda PHP','Mario


Molina','Emece',18.20,200);

insert into libros values('Cervantes y el


quijote','Borges','Paidos',36.40,100);

insert into libros values('Manual de PHP', 'J.C. Paez',


'Paidos',30.80,100);

insert into libros values('Harry Potter y la piedra


filosofal','J.K. Rowling','Paidos',45.00,500);

insert into libros values('Harry Potter y la cámara


secreta','J.K. Rowling','Paidos',46.00,300);

insert into libros values('Alicia en el país de las


maravillas','Lewis Carroll','Paidos',null,50);

select titulo, precio,cantidad,precio*cantidad


from libros;

select titulo, precio,precio*0.1,precio-(precio*0.1)


from libros;

Con qué encabezado se muestran los campos calculados?

116
Administración de bases de datos con MySQL

Uso de Alias con As

Un "alias" se usa como nombre de un campo o de una expresión o para referenciar una
tabla cuando se utilizan más de una tabla (tema que veremos más adelante). En los campos
calculados, es muy conveniente usarlos porque, nos permiten rotular, adecuadamente un
resultado. Los alias se implementan con la palabra: as. Por ejemplo:

En el caso de los campos calculados del ejemplo anterior, podemos utilizar alias para que al
ejecutar la consulta, se muestren con un encabezado de columna que identifique el
resultado. La forma con alias es la siguiente:

select titulo, precio,cantidad,precio*cantidad as total


from libros;

select titulo, precio,precio*0.1 as descuento,precio-


(precio*0.1)as “precio con descuento” from libros;

Un alias puede contener varias


palabras con espacio. En este caso,
debe encerrarse entre comillas.

Actividad

Una empresa almacena los datos de sus empleados en una tabla "empleados".

1- Cree una bd, llamada: Planilla.

2- Cree una tabla llamada "empleados" con la estructura necesaria para almacenar la
siguiente información:
- nombre del empleado,
- documento,
- sexo,
- domicilio,
- sueldo base ,
- hijos a cargo,
- clave primaria: documento.

3- Ingrese algunos registros:

117
Administración de bases de datos con MySQL

• La empresa está pensando en aumentar un 10% el sueldo a los empleados, y quiere


saber a cuánto subiría cada sueldo básico, para ello usamos la siguiente sentencia en
la cual incluimos una columna que hará el cálculo de cada sueldo más el 15%:

• La empresa paga un bono familiar por hijos a cargo, Q200 por cada hijo.
Necesitamos el nombre del empleado, el sueldo base, la cantidad de hijos a cargo, el
total del salario familiar y el sueldo final (incluyendo el bono familiar):

Ordenamientos

Podemos ordenar el resultado de un "select" para que los registros se muestren ordenados
por algún campo, para ello usamos la cláusula "order by".
Por ejemplo, recuperamos los registros de la tabla "libros" ordenados por el título:
select codigo,titulo,autor,editorial,precio from libros order
by titulo;

Aparecen los registros ordenados alfabéticamente por el campo especificado.


También podemos colocar el número de orden del campo por el que queremos que se
ordene en lugar de su nombre. Por ejemplo, queremos el resultado del "select" ordenado
por "precio":
select codigo,titulo,autor,editorial,precio from libros order
by 5;

Por defecto, si no aclaramos en la sentencia, los ordena de manera ascendente (de menor a
mayor). Podemos ordenarlos de mayor a menor, para ello agregamos la palabra clave
"desc":
select codigo,titulo,autor,editorial,precio from libros order
by editorial desc;

También podemos ordenar por varios campos, por ejemplo, por "titulo" y "editorial":
select codigo,titulo,autor,editorial,precio from libros order by titulo, editorial;

Incluso, podemos ordenar en distintos sentidos, por ejemplo, por "titulo" en sentido
ascendente y "editorial" en sentido descendente:
select codigo,titulo,autor,editorial,precio
from libros order by titulo asc, editorial desc;

118
Administración de bases de datos con MySQL

Debe aclararse al lado de cada campo, el tipo de ordenamiento, pues estas palabras claves
afectan al campo inmediatamente anterior.
Ejecutemos el siguiente bloque de instrucciones SQL:

drop table if exists libros;

create table libros(


codigo int unsigned primary key auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal (5,2) unsigned,

);

insert into libros values('El señor


presidente','Asturias','Salvat',100);

insert into libros values('Martin Fierro','Jose


Hernandez','Emece',22.90);

insert into libros values('Martin Fierro','Jose


Hernandez','Planeta',39);

insert into libros values('Aprenda PHP','Mario


Molina','Emece',19.50);

insert into libros values('Cervantes y el


quijote','Borges','Paidos',35.40);

insert into libros values('Matematica estas ahi', 'Paenza',


'Paidos',19);

select codigo,titulo,autor,editorial,precio
from libros
order by titulo;

select * from libros order by 5;

select * from libros order by titulo, editorial;

select codigo,titulo,autor,editorial,precio from libros


order by titulo asc, editorial desc;

119
Administración de bases de datos con MySQL

Actividad

Cree una base de datos denominada Farmacia con una tabla llamada "medicamentos" que
almacena la información de los productos que se venden.

1- Elimine la tabla, si existe.

2- Cree la tabla con la siguiente estructura:

create table medicamentos(


codigo int unsigned primary key auto_increment,
nombre varchar(20),
laboratorio varchar(20),
precio decimal(5,2),
cantidad int unsigned,

);

3- Visualice la estructura de la tabla "medicamentos".

4- Ingrese los siguientes registros (insert into):

5- Ordene los registros por precio, de mayor a menor.

6- Ordene los medicamentos por número del campo "cantidad".

7- Ordene los registros por "laboratorio" (descendente) y cantidad (ascendente).

Condiciones compuestas con and y or


Hasta el momento, hemos aprendido a establecer una condición con "where" utilizando
operadores relacionales. Podemos establecer más de una condición con la cláusula
"where", para ello aprenderemos los operadores lógicos.
Son los siguientes:
- and, significa "y",
- or, significa "y/o",
- xor, significa "o",
- not, significa "no", invierte el resultado
- (), paréntesis

Los operadores lógicos se usan para combinar condiciones.

120
Administración de bases de datos con MySQL

Queremos recuperar todos los registros cuyo autor sea igual a "Borges" y cuyo precio no
supere los 20 pesos, para ello necesitamos 2 condiciones:
select * from libros
where (autor='Aturias') and
(precio<=20);

Los registros recuperados en una sentencia que une 2 condiciones con el operador "and",
cumplen con las 2 condiciones.
Queremos ver los libros cuyo autor sea "Borges" y/o cuya editorial sea "Planeta":
select * from libros
where autor='Asturias' or
editorial='Planeta';

En la sentencia anterior usamos el operador "or", indicamos que recupere los libros en los
cuales el valor del campo "autor" sea "Asturias" y/o el valor del campo "editorial" sea
"Planeta", es decir, seleccionará los registros que cumplan con la primera condición, con la
segunda condición o con ambas condiciones.
Los registros recuperados con una sentencia que une 2 condiciones con el operador "or",
cumplen 1 de las condiciones o ambas.
Queremos ver los libros cuyo autor sea "Asturias" o cuya editorial sea "Planeta":
select * from libros
where (autor='Borges') xor
(editorial='Planeta');

En la sentencia anterior usamos el operador "xor", indicamos que recupere los libros en los
cuales el valor del campo "autor" sea "Borges" o el valor del campo "editorial" sea
"Planeta", es decir, seleccionará los registros que cumplan con la primera condición o con
la segunda condición pero no los que cumplan con ambas condiciones. Los registros
recuperados con una sentencia que une 2 condiciones con el operador "xor", cumplen 1 de
las condiciones, no ambas.
Queremos recuperar los libros que no cumplan la condición dada, por ejemplo, aquellos
cuya editorial NO sea "Planeta":
select * from libros
where not (editorial='Planeta');

El operador "not" invierte el resultado de la condición a la cual antecede.


Los registros recuperados en una sentencia en la cual aparece el operador "not", no
cumplen con la condición a la cual afecta el "NO".

121
Administración de bases de datos con MySQL

Los paréntesis se usan para encerrar condiciones, para que se evalúen como una sola
expresión.
Cuando explicitamos varias condiciones con diferentes operadores lógicos (combinamos
"and", "or") permite establecer el orden de prioridad de la evaluación; además permite
diferenciar las expresiones más claramente.
Por ejemplo, las siguientes expresiones devuelven un resultado diferente:
select * from libros
where (autor='Asturias') or
(editorial='Paidos' and precio<20);

select*from libros
where (autor='Borges' or editorial='Paidos') and
(precio<20);

Si bien los paréntesis no son obligatorios en todos los casos, se recomienda utilizarlos para
evitar confusiones.
El orden de prioridad de los operadores lógicos es el siguiente: "not" se aplica antes que
"and" y "and" antes que "or", si no se especifica un orden de evaluación mediante el uso de
paréntesis.
El orden en el que se evalúan los operadores con igual nivel de precedencia es indefinido,
por ello se recomienda usar los paréntesis.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones
SQL donde probamos los operadores lógicos and, or, not y xor:
create database biblioteca2;
drop table if exists libros;

create table libros(


codigo int unsigned primary key auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2),
);

insert into libros values('El señor


presidente','Asturias','Salvat',100);

insert into libros values('Martin Fierro','José


Hernandez','Emece',22.90);

insert into libros values('Martin Fierro','José


Hernandez','Planeta',39);

122
Administración de bases de datos con MySQL

insert into libros values('Aprenda PHP','Mario


Molina','Emece',19.50);
insert into libros values('Cervantes y el
quijote','Borges','Paidos',35.40);

insert into libros values('Matemática estas ahí', 'Paenza',


'Paidos',19);

select * from libros


where autor='Asturias' and
precio<=20;

select * from libros


where autor='Paenza' or
editorial='Planeta';

select * from libros


where (autor='Asturias') xor
(editorial='Planeta');

select * from libros


where not (editorial='Planeta');

select * from libros


where (autor='Asturias') or
(editorial='Paidos' and precio<20);

select * from libros


where (autor='Asturias' or editorial='Paidos')
and (precio<20);

123
Administración de bases de datos con MySQL

Actividad

Trabaje con la tabla llamada "medicamentos" de una farmacia.

1- Elimine la tabla, si existe.

2- Cree la tabla con la siguiente estructura:


create table medicamentos(
codigo int unsigned primary key auto_increment,
nombre varchar(20),
laboratorio varchar(20),
precio decimal(5,2) unsigned,
cantidad int unsigned,
primary key(codigo)
);

3- Visualice la estructura de la tabla "medicamentos".

4- Ingrese los siguientes registros (insert into):


insert into medicamentos values('Sertal','Roche',5.2,100);

insert into medicamentos


values('Buscapina','Roche',4.10,200);

insert into medicamentos values('Amoxidal


500','Bayer',15.60,100);

insert into medicamentos values('Paracetamol


500','Bago',1.90,200);

insert into medicamentos


values('Bayaspirina','Bayer',2.10,150);

insert into medicamentos values('Amoxidal


jarabe','Bayer',5.10,250);

5- Recupere los códigos y nombres de los medicamentos cuyo laboratorio sea 'Roche' y
cuyo precio sea menor a 5

Quedó seleccionado 1 registro, es el único que cumple con ambas condiciones.

6- Recupere los medicamentos cuyo laboratorio sea 'Roche' o cuyo precio sea menor a 5:

Note que la salida es diferente, hemos cambiado el operador de la sentencia anterior. Ahora
se recuperaron todos los registros cuyo laboratorio es igual a 'Roche' y todos los registros

124
Administración de bases de datos con MySQL

cuyo precio es menor a 5. Aquellos registros que no cumplieron con la condición 1 (no son
de "Roche") ni con la condicion2 (no cuestan menos de 5) no aparecen.

7- Muestre todos los registros que no sean de "Bayer" usando el operador "not".

8- Muestre todos los medicamentos cuyo laboratorio NO sea "Bayer" y cuya cantidad
9- Muestre todos los medicamentos cuyo laboratorio sea "Bayer" y cuya cantidad NO
sea=100:

10- Elimine todos los registros cuyo laboratorio sea igual a "Bayer" y su precio sea mayor a
10:

11- Cambie la cantidad por 200, a todos los medicamentos de "Roche" cuyo precio sea
mayor a 5:

12- Borre los medicamentos cuyo laboratorio sea "Bayer" o cuyo precio sea menor a 3.
Antes veamos cuáles cumplen con la condición, los registros 5 y 6 son de "Bayer, cumplen
con la primera condición, los registros 4 y 5 cumplen con la segunda condición, es decir, se
borrarán 3 registros:

el 4 porque cumple con la segunda condición, el 5 porque cumple con ambas y el 6 porque
cumple con la primera.

Operadores relacionales Between - in

Hemos visto los operadores relacionales:


= (igual), <> (distinto), > (mayor), < (menor), >= (mayor o igual), <= (menor o igual), is
null/is not null (si un valor es NULL o no).
Existen otros que simplifican algunas consultas:
Para recuperar de nuestra tabla "libros" los registros que tienen precio mayor o igual a 20 y
menor o igual a 40, usamos 2 condiciones unidas por el operador lógico "and":
select * from libros
where precio>=20 and precio<=40;

Podemos usar "between":


select * from libros
where precio between 20 and 40;

125
Administración de bases de datos con MySQL

"between" significa "entre". Averiguamos si el valor de un campo dado (precio) está entre
los valores mínimo y máximo especificados (20 y 40 respectivamente).
Si agregamos el operador "not" antes de "between" el resultado se invierte.
Para recuperar los libros cuyo autor sea 'Paenza' o 'Asturias' usamos 2 condiciones:
select * from libros
where autor='Asturias' or autor='Paenza';

Podemos usar "in":


select * from libros
where autor in('Asturias','Paenza');

Con "in" averiguamos si el valor de un campo dado (autor) está incluido en la lista de
valores especificada (en este caso, 2 cadenas).
Para recuperar los libros cuyo autor no sea 'Paenza' ni 'Asturias' usamos:
select * from libros where autor<>'Asturias' and
autor<>'Paenza';

También podemos usar "in" :


select * from libros
where autor not in ('Asturias','Paenza');

Con "in" averiguamos si el valor del campo está incluido en la lista, con "not" antecediendo
la condición, invertimos el resultado.
Ejecutemos el siguiente bloque de instrucciones SQL para utilizar los operadores
relacionales 'between' y 'in'.
Create database librería;
drop table if exists libros;

create table libros(


codigo int unsigned primary key auto_increment,
titulo varchar(40),
autor varchar(30),
editorial varchar(15),
precio decimal(5,2) unsigned,

);

insert into libros values('El señor


presidente','Asturias','Salvat',100);

126
Administración de bases de datos con MySQL

insert into libros values('Martin Fierro','José


Hernandez','Emece',22.90);

insert into libros values('Martin Fierro','José


Hernandez','Planeta',39);
insert into libros values('Aprenda PHP','Mario
Molina','Emece',19.50);
insert into libros values('Cervantes y el
quijote','Borges','Paidos',35.40);

insert into libros values('Matemática estas ahí', 'Paenza',


'Paidos',19);

select * from libros


where precio>=20 and
precio<=40;

select * from libros


where precio between 20 and 40;

select * from libros


where autor='Borges' or
autor='Paenza';

select * from libros


where autor in('Asturias','Paenza');

select * from libros


where autor<>'Asturias' and
autor<>'Paenza';

select * from libros


where autor not in ('Asturias','Paenza');

Actividad

1.Trabaje con la tabla llamada "medicamentos" de una farmacia. Abra la base de datos
Farmacia, con Use.

3- Visualice la estructura de la tabla "medicamentos".

4- Ingrese los siguientes registros:


insert into medicamentos values('Sertal','Roche',5.2,100);
insert into medicamentos
values('Buscapina','Roche',4.10,200);

127
Administración de bases de datos con MySQL

insert into medicamentos values('Amoxidal


500','Bayer',15.60,100);
insert into medicamentos values('Paracetamol
500','Bago',1.90,200);
insert into medicamentos
values('Bayaspirina','Bayer',2.10,150);
insert into medicamentos values('Amoxidal
jarabe','Bayer',5.10,250);

5- Recupere los nombres y precios de los medicamentos cuyo precio esté entre 5 y 15:

6- Seleccione los registros cuyo laboratorio sea "Bayer" o "Bago":

7- Elimine los registros cuya cantidad esté entre 100 y 200:


delete from medicamentos
where cantidad between 100 and 200;

Tanto between como in,


pueden usarse con select,
delete y update

128

También podría gustarte