Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Bases de Datos Public PDF
Bases de Datos Public PDF
1
Administración de bases de datos con LibreOffice Base
Cuando se crea una base de datos con Base, se genera un archivo con extensión: .odb
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.
CodigoEstudiante NombreEstudiante
10-2020 Marco del Cid
11-2020 Vilma Pérez
2
Administración de bases de datos con LibreOffice Base
Clave primaria
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.
3
Administración de bases de datos con LibreOffice Base
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)
La base de datos servirá para llevar registros de los productos, proveedores y pedidos.
4
Administración de bases de datos con LibreOffice Base
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.
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
6
Administración de bases de datos con LibreOffice Base
Actividad
A) 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
B) 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
7
Administración de bases de datos con LibreOffice Base
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.
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
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:
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á.
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
Big Integer [BIGINT]: Números enteros hasta 19 dígitos. Acepta valor automático.
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.
11
Administración de bases de datos con LibreOffice Base
Actividad
A) 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.
B) 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.
12
Administración de bases de datos con LibreOffice Base
13
Administración de bases de datos con LibreOffice Base
4) Clic en Finalizar
14
Administración de bases de datos con LibreOffice Base
15
Administración de bases de datos con LibreOffice Base
Siguiendo con el ejemplo anterior, estableceremos el campo Codigo como clave principal.
Para ello, hacer lo siguiente:
16
Administración de bases de datos con LibreOffice Base
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:
Editar tablas
17
Administración de bases de datos con LibreOffice Base
18
Administración de bases de datos con LibreOffice Base
19
Administración de bases de datos con LibreOffice Base
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
2
3
21
Administración de bases de datos con LibreOffice Base
Clave foránea
22
Administración de bases de datos con LibreOffice Base
23
Administración de bases de datos con LibreOffice Base
6
5
Tabla secundaria
7
24
Administración de bases de datos con LibreOffice Base
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.
Línea de relación
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
27
Administración de bases de datos con LibreOffice Base
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) .
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.
28
Administración de bases de datos con LibreOffice Base
Actividad
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 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
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):
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.
31
Administración de bases de datos con LibreOffice Base
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>
33
Administración de bases de datos con LibreOffice Base
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
35
Administración de bases de datos con LibreOffice Base
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)
36
Administración de bases de datos con LibreOffice Base
3
4
37
Administración de bases de datos con LibreOffice Base
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
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
39
Administración de bases de datos con LibreOffice Base
13
14
40
Administración de bases de datos con LibreOffice Base
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:
41
Administración de bases de datos con LibreOffice Base
42
Administración de bases de datos con LibreOffice Base
43
Administración de bases de datos con LibreOffice Base
9
7
10
44
Administración de bases de datos con LibreOffice Base
11
13
45
Administración de bases de datos con LibreOffice Base
Incorporar etiquetas
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.
47
Administración de bases de datos con LibreOffice Base
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>
10
49
Administración de bases de datos con LibreOffice Base
Concatenación de campos
1
2
50
Administración de bases de datos con LibreOffice Base
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.
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.
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
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>
54
Administración de bases de datos con LibreOffice Base
8) Clic en Siguiente>
55
Administración de bases de datos con LibreOffice Base
56
Administración de bases de datos con LibreOffice Base
Se pueden crear consultas sin recurrir al asistente y con ello poder personalizarla. Seguir
los siguientes pasos:
57
Administración de bases de datos con LibreOffice Base
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
59
Administración de bases de datos con LibreOffice Base
10) Se mostrarán los registros con los campos que fueron seleccionados para la
consulta
60
Administración de bases de datos con LibreOffice Base
Estos operadores son necesarios para construir condiciones (criterios) que deberán
cumplir los registros que deseamos consultar. Dichos operadores se listan a continuación:
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.
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 tablas de referencias cruzadas.
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:
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
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:
A los empleados del departamento de Programación, se les dará un aumento del Q500.00
67
Administración de bases de datos con LibreOffice Base
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
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.
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:
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:
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:
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:
Puede ocultar la
visualización de un
campo, desmarcando
esta opción
3
4
71
Administración de bases de datos con LibreOffice Base
Su sintaxis es:
Ejemplo:
72
Administración de bases de datos con LibreOffice Base
73
Administración de bases de datos con LibreOffice Base
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:
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
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.
75
Administración de bases de datos con LibreOffice Base
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
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.
Ejemplo:
77
Administración de bases de datos con LibreOffice Base
Observaciones:
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:
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
Tabla: Vendedor
Tabla: Venta
Establecer la relación:
80
Administración de bases de datos con LibreOffice Base
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 MariaDB (MySQL)
82
Administración de bases de datos con MariaDB (MySQL)
MariaDB permite crear base de datos y tablas, insertar datos, modificarlos, eliminarlos,
ordenarlos, hacer consultas y realizar muchas operaciones, etc., resumiendo: administrar
bases de datos.
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:
83
Administración de bases de datos con MariaDB (MySQL)
show databases;
Nos mostrará los nombres de las bases de datos, debería aparecer, otras, "administracion".
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.
84
Administración de bases de datos con MariaDB (MySQL)
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:
show tables;
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:
Cada usuario ocupará un registro de esta tabla, con su respectivo nombre y clave.
Para ver la estructura de una tabla usamos el comando "describe" junto al nombre de la
tabla:
describe usuarios;
Aparece lo siguiente:
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.
Si digitamos nuevamente:
85
Administración de bases de datos con MariaDB (MySQL)
Aparece un mensaje de error, indicando que no existe, ya que intentamos borrar una tabla
inexistente.
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
2- Cree una tabla llamada "agenda", debe tener los siguientes campos:
86
Administración de bases de datos con MariaDB (MySQL)
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;
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
87
Administración de bases de datos con MariaDB (MySQL)
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:
88
Administración de bases de datos con MariaDB (MySQL)
Actividad
describe peliculas;
B) Una empresa almacena los datos de sus empleados en una tabla "empleados" que
guarda los siguientes datos: nombre, documento, sexo, domicilio, sueldobase.
89
Administración de bases de datos con MariaDB (MySQL)
1- Crear la base de datos con nombre: Empresa y habitarla para poder usarla.
Create database Empresa;
Use Empresa;
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:
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:
90
Administración de bases de datos con MariaDB (MySQL)
Procedamos a crear una tabla, insertar algunas filas y mostrar solo algunas columnas de
dicha tabla:
Actividad
2- Cree la tabla:
91
Administración de bases de datos con MariaDB (MySQL)
cantidad integer
);
describe peliculas;
B) Una empresa almacena los datos de sus empleados en una tabla llamada
"empleados".
2- Cree la tabla:
create table empleados(
nombre varchar(20),
documento varchar(8),
sexo varchar(1),
domicilio varchar(30),
sueldobase float
);
92
Administración de bases de datos con MariaDB (MySQL)
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,
93
Administración de bases de datos con MariaDB (MySQL)
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:
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':
describe usuarios;
94
Administración de bases de datos con MariaDB (MySQL)
Actividad
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).
95
Administración de bases de datos con MariaDB (MySQL)
5- Seleccione todos los datos de los registros cuyo nombre sea "impresora".
Operadores relacionales
96
Administración de bases de datos con MariaDB (MySQL)
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;
97
Administración de bases de datos con MariaDB (MySQL)
La ejecución del comando indicado en la línea anterior borra TODOS los registros de la
tabla.
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;
98
Administración de bases de datos con MariaDB (MySQL)
clave varchar(10)
);
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:
99
Administración de bases de datos con MariaDB (MySQL)
set SQL_SAFE_UPDATES=0;
delete from usuarios;
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.
select @@sql_safe_updates;
Método 2:
100
Administración de bases de datos con MariaDB (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':
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:
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 MariaDB (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.
102
Administración de bases de datos con MariaDB (MySQL)
Actividad
Cree o abra una base de datos llamada: Contactos. Trabaje con la tabla "agenda" que
almacena los datos de sus amigos.
2- Cree la tabla:
create table agenda(
apellido varchar(30),
nombre varchar(20),
domicilio varchar(30),
telefono varchar(11)
);
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):
6- Actualice los registros cuyo número telefónico sea igual a '4545454' por '4445566':
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"):
103
Administración de bases de datos con MariaDB (MySQL)
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 clave de usuario repetida, por ejemplo:
104
Administración de bases de datos con MariaDB (MySQL)
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.
describe usuarios;
105
Administración de bases de datos con MariaDB (MySQL)
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),
);
106
Administración de bases de datos con MariaDB (MySQL)
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;
use libreria;
describe libros;
insert into libros values(null,'El señor
presidente','Asturias','Salvat');
107
Administración de bases de datos con MariaDB (MySQL)
108
Administración de bases de datos con MariaDB (MySQL)
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":
create database libreria2020;
use libreria2020;
109
Administración de bases de datos con MariaDB (MySQL)
Tipos de datos
110
Administración de bases de datos con MariaDB (MySQL)
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 MariaDB (MySQL)
112
Administración de bases de datos con MariaDB (MySQL)
Probemos en "Workbench" crear una tabla con campos de distinto tipo y luego ejecutar el
comando describe:
drop table if exists libros;
);
describe libros;
113
Administración de bases de datos con MariaDB (MySQL)
114
Administración de bases de datos con MariaDB (MySQL)
horasalida time
);
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:
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;
115
Administración de bases de datos con MariaDB (MySQL)
116
Administración de bases de datos con MariaDB (MySQL)
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:
Actividad
Una empresa almacena los datos de sus empleados en una tabla "empleados".
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.
117
Administración de bases de datos con MariaDB (MySQL)
• 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;
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 MariaDB (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:
119
Administración de bases de datos con MariaDB (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.
);
120
Administración de bases de datos con MariaDB (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');
121
Administración de bases de datos con MariaDB (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;
use biblioteca2;
122
Administración de bases de datos con MariaDB (MySQL)
123
Administración de bases de datos con MariaDB (MySQL)
Actividad
Trabaje con la tabla llamada "medicamentos" de una base de datos denominada: farmacia.
5- Recupere los códigos y nombres de los medicamentos cuyo laboratorio sea 'Roche' y
cuyo precio sea menor a 5
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 MariaDB (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.
125
Administración de bases de datos con MariaDB (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';
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';
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 libreria;
use libreria;
);
126
Administración de bases de datos con MariaDB (MySQL)
Actividad
1.Trabaje con la tabla llamada "medicamentos" de una farmacia. Abra la base de datos
Farmacia, con Use.
127
Administración de bases de datos con MariaDB (MySQL)
5- Recupere los nombres y precios de los medicamentos cuyo precio esté entre 5 y 15:
Se han realizado consultas utilizando operadores relacionales para comparar cadenas. Por
ejemplo, sabemos recuperar los libros cuyo autor sea igual a la cadena "Asturias":
select * from libros
where autor='Asturias';
128
Administración de bases de datos con MariaDB (MySQL)
Si queremos recuperar todos los libros cuyo autor sea "Asturias", y especificamos la
siguiente condición:
select * from libros
where autor='Asturias';
sólo aparecerá el primer registro, ya que la cadena "Asturias" no es igual a la cadena "M.A.
Asturias".
Esto sucede porque el operador "=" (igual), también el operador "<>" (distinto) comparan
cadenas de caracteres completas. Para comparar porciones de cadenas utilizamos los
operadores "like" y "not like".
Entonces, podemos comparar trozos de cadenas de caracteres para realizar consultas. Para
recuperar todos los registros cuyo autor contenga la cadena "Asturias" debemos digitar:
select * from libros
where autor like "%Asturias%";
Note que el símbolo "%" ya no está al comienzo, con esto indicamos que el título debe
tener como primera letra la "A" y luego, cualquier cantidad de caracteres.
Para seleccionar todos los libros que no comiencen con "A":
select * from libros
where titulo not like 'A%';
Así como "%" reemplaza cualquier cantidad de caracteres, el guión bajo "_" reemplaza un
caracter, es el otro caracter comodín. Por ejemplo, queremos ver los libros de "Lewis
Carroll" pero no recordamos si se escribe "Carroll" o "Carrolt", entonces tipeamos esta
condición:
select * from libros
where autor like "%Carrol_";
Si necesitamos buscar un patrón en el que aparezcan los caracteres comodines, por ejemplo,
queremos ver todos los registros que comiencen con un guión bajo, si utilizamos '_%',
mostrará todos los registros porque lo interpreta como "patrón que comienza con un
129
Administración de bases de datos con MariaDB (MySQL)
carácter cualquiera y sigue con cualquier cantidad de caracteres". Debemos utilizar "\_%",
esto se interpreta como 'patrón que comienza con guión bajo y continúa con cualquier
cantidad de caracteres". Es decir, si queremos incluir en una búsqueda de patrones los
caracteres comodines, debemos anteponer al carácter comodín, la barra invertida "\", así lo
tomará como carácter de búsqueda literal y no como comodín para la búsqueda. Para buscar
el carácter literal "%" se debe colocar "\%".
130
Administración de bases de datos con MariaDB (MySQL)
Existen en MySQL funciones que nos permiten contar registros, calcular sumas,
promedios, obtener valores máximos y mínimos. Veamos algunas de ellas.
Imaginemos que nuestra tabla "libros" contiene muchos registros. Para averiguar la
cantidad sin necesidad de contarlos manualmente usamos la función "count()":
select count(*) from libros;
La función "count()" cuenta la cantidad de registros de una tabla, incluyendo los que tienen
valor nulo.
Para saber la cantidad de libros de la editorial "Planeta" tipeamos:
select count(*) from libros
where editorial='Planeta';
131
Administración de bases de datos con MariaDB (MySQL)
También podemos utilizar esta función junto con la clausula "where" para una consulta más
específica. Por ejemplo, solicitamos la cantidad de libros que contienen la cadena
"Asturias":
select count(*) from libros
where autor like '%Asturias%';
Para contar los registros que tienen precio (sin tener en cuenta los que tienen valor nulo),
usamos la función "count()" y en los paréntesis colocamos el nombre del campo que
necesitamos contar:
select count(precio) from libros;
Note que "count(*)" retorna la cantidad de registros de una tabla (incluyendo los que tienen
valor "null") mientras que "count(precio)" retorna la cantidad de registros en los cuales el
campo "precio" no es nulo. No es lo mismo. "count(*)" cuenta registros, si en lugar de un
asterisco colocamos como argumento el nombre de un campo, se contabilizan los registros
cuyo valor en ese campo no es nulo.
Observación: Tenga en cuenta que no debe haber espacio entre el nombre de la función y
el paréntesis, porque puede confundirse con una referencia a una tabla o campo. Las
siguientes sentencias son distintas:
select count(*) from libros;
select count (*) from libros;
132
Administración de bases de datos con MariaDB (MySQL)
Funciones de grupo
Existen en MySQL funciones que nos permiten contar registros, calcular sumas,
promedios, obtener valores máximos y mínimos. Ya hemos aprendido "count()", veamos
otras.
La función "sum()" retorna la suma de los valores que contiene el campo especificado. Por
ejemplo, queremos saber la cantidad de libros que tenemos disponibles para la venta:
select sum(cantidad) from libros;
133
Administración de bases de datos con MariaDB (MySQL)
También podemos combinarla con "where". Por ejemplo, queremos saber cuántos libros
tenemos de la editorial "Planeta":
select sum(cantidad) from libros
where editorial ='Paidos';
Para averiguar el valor máximo o mínimo de un campo usamos las funciones "max()" y
"min()" respectivamente. Ejemplo, queremos saber cuál es el mayor precio de todos los
libros:
select max(precio) from libros;
La función avg() retorna el valor promedio de los valores del campo especificado. Por
ejemplo, queremos saber el promedio del precio de los libros referentes a "PHP":
select avg(precio) from libros
where titulo like '%PHP%';
134
Administración de bases de datos con MariaDB (MySQL)
Agrupamiento de registros
135
Administración de bases de datos con MariaDB (MySQL)
Hemos aprendido que las funciones de agrupamiento permiten contar registros, calcular
sumas y promedios, obtener valores máximos y mínimos. También dijimos que dichas
funciones operan sobre conjuntos de registros, no con datos individuales.
Generalmente esta funciones se combinan con la sentencia "group by", que agrupa registros
para consultas detalladas.
Queremos saber la cantidad de visitantes de cada departamento, podemos tipear la siguiente
sentencia:
select count(*) from visitantes
where departamento='Guatemala';
Entonces, para saber la cantidad de visitantes que tenemos en cada departamento utilizamos
la función "count()", agregamos "group by" y el campo por el que deseamos que se realice
el agrupamiento, también colocamos el nombre del campo a recuperar.
La instrucción anterior solicita que muestre el nombre de la departamento y cuente la
cantidad agrupando los registros por el campo "departamento". Como resultado aparecen
los nombres de las departamentoes y la cantidad de registros para cada valor del campo.
Para obtener la cantidad visitantes con teléfono no nulo, de cada departamento utilizamos la
función "count()" enviándole como argumento el campo "telefono", agregamos "group by"
y el campo por el que deseamos que se realice el agrupamiento (departamento):
select departamento, count(telefono)
from visitantes
group by departamento;
136
Administración de bases de datos con MariaDB (MySQL)
un campo: en el primer caso cuenta todos los registros incluyendo los que tienen valor nulo,
en el segundo, los registros en los cuales el campo especificado es no nulo.
Para conocer el total de las compras agrupadas por sexo:
select sexo, sum(montocompra)
from visitantes
group by sexo;
Se pueden simplificar las 2 sentencias anteriores en una sola sentencia, ya que usan el
mismo "group by":
select sexo, max(montocompra),
min(montocompra)
from visitantes
group by sexo;
Podemos agrupar por más de un campo, por ejemplo, vamos a hacerlo por "departamento"
y "sexo":
select departamento, sexo, count(*) from visitantes
group by departamento,sexo;
Podemos usar las palabras claves "asc" y "desc" para una salida ordenada:
select departamento, count(*) from visitantes
group by departamento desc;
137
Administración de bases de datos con MariaDB (MySQL)
138
Administración de bases de datos con MariaDB (MySQL)
139
Administración de bases de datos con MariaDB (MySQL)
Si queremos saber la cantidad de libros agrupados por editorial pero considerando sólo
algunos grupos, por ejemplo, los que devuelvan un valor mayor a 2, usamos la siguiente
instrucción:
select editorial, count(*) from libros
group by editorial
having count(*)>2;
En algunos casos es posible confundir las cláusulas "where" y "having". Queremos contar
los registros agrupados por editorial sin tener en cuenta a la editorial "Planeta".
Analicemos las siguientes sentencias:
select editorial, count(*) from libros
where editorial<>'Planeta'
group by editorial;
select editorial, count(*) from libros
group by editorial
having editorial<>'Planeta';
140
Administración de bases de datos con MariaDB (MySQL)
La primera, selecciona todos los registros rechazando los de editorial "Planeta" y luego los
agrupa para contarlos. La segunda, selecciona todos los registros, los agrupa para contarlos
y finalmente rechaza la cuenta correspondiente a la editorial "Planeta".
No debemos confundir la cláusula "where" con la cláusula "having"; la primera establece
condiciones para la selección de registros de un "select"; la segunda establece condiciones
para la selección de registros de una salida "group by".
Aquí, selecciona los registros rechazando los que no cumplan con la condición dada en
"where", luego los agrupa por "editorial" y finalmente rechaza los grupos que no cumplan
con la condición dada en el "having".
Generalmente se usa la cláusula "having" con funciones de agrupamiento, esto no puede
hacerlo la cláusula "where". Por ejemplo queremos el promedio de los precios agrupados
por editorial, de aquellas editoriales que tienen más de 2 libros:
select editorial, avg(precio) from libros
group by editorial
having count(*) > 2;
Podemos encontrar el mayor valor de los libros agrupados por editorial y luego seleccionar
las filas que tengan un valor mayor o igual a 30:
select editorial, max(precio) from libros
group by editorial
having max(precio)>=30;
Esta misma sentencia puede usarse empleando un "alias", para hacer referencia a la
columna de la expresión:
select editorial, max(precio) as 'mayor' from libros
group by editorial
having mayor>=30;
141
Administración de bases de datos con MariaDB (MySQL)
);
insert into libros values(null,'El señor
presidente','Asturias','Salvat',100);
insert into libros values(null,'Martin Fierro','José
Hernandez','Emece',22.20);
insert into libros values(null,'Antologia
poetica','Borges','Planeta',40);
insert into libros values(null,'Aprenda PHP','Mario
Molina','Emece',18.20);
insert into libros values('Cervantes y el
quijote','Borges','Paidos',36.40);
142
Administración de bases de datos con MariaDB (MySQL)
143
Administración de bases de datos con MariaDB (MySQL)
group by editorial
having max(precio)>=30;
Con la cláusula "distinct" se especifica que los registros con ciertos datos duplicados sean
obviadas en el resultado. Por ejemplo, queremos conocer todos los autores de los cuales
tenemos libros, si utilizamos esta sentencia:
Note que en los tres casos anteriores aparece "null" como un valor para "autor"· Si sólo
queremos la lista de autores conocidos, es decir, no queremos incluir "null" en la lista,
podemos utilizar la sentencia siguiente:
Para contar los distintos autores, sin considerar el valor "null" usamos:
Note que si contamos los autores sin "distinct", no incluirá los valores "null" pero si los
repetidos:
select count(autor)
from libros;
144
Administración de bases de datos con MariaDB (MySQL)
Podemos combinarla con "where". Por ejemplo, queremos conocer los distintos autores de
la editorial "Planeta":
Para mostrar los títulos de los libros sin repetir títulos, usamos:
La cláusula "distinct" afecta a todos los campos presentados. Para mostrar los títulos y
editoriales de los libros sin repetir títulos ni editoriales, usamos:
Note que los registros no están duplicados, aparecen títulos iguales pero con editorial
diferente, cada registro es diferente.
145
Administración de bases de datos con MariaDB (MySQL)
);
146
Administración de bases de datos con MariaDB (MySQL)
select count(autor)
from libros;
147
Administración de bases de datos con MariaDB (MySQL)
Las claves primarias pueden ser simples, formadas por un solo campo o compuestas, más
de un campo.
Recordemos que una clave primaria identifica 1 solo registro en una tabla. Para un valor del
campo clave existe solamente 1 registro. Los valores no se repiten ni pueden ser nulos.
Retomemos el ejemplo de la playa de estacionamiento que almacena cada día los datos de
los vehículos que ingresan en la tabla llamada "vehiculos" con los siguientes campos:
Necesitamos definir una clave primaria para una tabla con los datos descriptos arriba. No
podemos usar la patente porque un mismo auto puede ingresar más de una vez en el día a la
playa; tampoco podemos usar la hora de entrada porque varios autos pueden ingresar a una
misma hora. Tampoco sirven los otros campos.
Como ningún campo, por si solo cumple con la condición para ser clave, es decir, debe
identificar un solo registro, el valor no puede repetirse, debemos usar 2 campos.
Definimos una clave compuesta cuando ningún campo por si solo cumple con la condición
para ser clave.
En este ejemplo, un auto puede ingresar varias veces en un día a la playa, pero siempre será
a distinta hora.
Usamos 2 campos como clave, la patente junto con la hora de llegada, así identificamos
unívocamente cada registro.
148
Administración de bases de datos con MariaDB (MySQL)
Para establecer más de un campo como clave primaria usamos la siguiente sintaxis:
Nombramos los campos que formarán parte de la clave separados por comas.
Si vemos la estructura de la tabla con "describe" vemos que en la columna "key", en ambos
campos aparece "PRI", porque ambos son clave primaria.
Un campo que es parte de una clave primaria puede ser autoincrementable sólo si es el
primer campo que compone la clave, si es secundario no se permite.
Es posible eliminar un campo que es parte de una clave primaria, la clave queda con los
campos restantes. Esto, siempre que no queden registros con clave repetida. Por ejemplo,
podemos eliminar el campo "horallegada":
siempre que no haya registros con "patente" duplicada, en ese caso aparece un mensaje de
error y la eliminación del campo no se realiza.
En caso de ejecutarse la sentencia anterior, la clave queda formada sólo por el campo
"patente".
Ejecutemos el siguiente bloque de instrucciones SQL donde creamos una tabla con clave
primaria compuesta:
describe vehiculos;
149
Administración de bases de datos con MariaDB (MySQL)
describe vehiculos;
insert into vehiculos values('ACD123','auto','16:00',null);
describe vehiculos;
150
Administración de bases de datos con MariaDB (MySQL)
151
Relacionando tablas
Hasta ahora hemos trabajado con una sola tabla, pero en general, se trabaja con varias
tablas.
Por ejemplo, los datos de nuestra tabla "libros" podrían separarse en 2 tablas, una "libros"
y otra "editoriales" que guardará la información de las editoriales. En nuestra tabla "libros"
haremos referencia a la editorial colocando un código que la identifique. Veamos:
);
);
De este modo, evitamos almacenar tantas veces los nombres de las editoriales en la tabla
"libros" y guardamos el nombre en la tabla "editoriales"; para indicar la editorial de cada
libro agregamos un campo referente al código de la editorial en la tabla "libros" y en
"editoriales".
152
Relacionando tablas
Cuando obtenemos información de más de una tabla decimos que hacemos un "join"
(unión). Veamos un ejemplo:
Indicamos el nombre de la tabla luego del "from" ("libros"), unimos esa tabla con "join" y
el nombre de la otra tabla ("editoriales"), luego especificamos la condición para enlazarlas
con "on", es decir, el campo por el cual se combinarán. "on" hace coincidir registros de las
dos tablas basándose en el valor de algún campo, en este ejemplo, los códigos de las
editoriales de ambas tablas, el campo "codigoeditorial" de "libros" y el campo "codigo" de
"editoriales" son los que enlazarán ambas tablas.
Cuando se combina (join, unión) información de varias tablas, es necesario indicar qué
registro de una tabla se combinará con qué registro de la otra tabla.
153
Relacionando tablas
Si omitimos la referencia a las tablas al nombrar el campo "codigo" (nombre de campo que
contienen ambas tablas):
Entonces, si en las tablas, los campos tienen el mismo nombre, debemos especificar a cuál
tabla pertenece el campo al hacer referencia a él, para ello se antepone el nombre de la
tabla al nombre del campo, separado por un punto (.).
Entonces, se nombra la primer tabla, se coloca "join" junto al nombre de la segunda tabla
de la cual obtendremos información y se asocian los registros de ambas tablas usando un
"on" que haga coincidir los valores de un campo en común en ambas tablas, que será el
enlace.
Cada tabla tiene un alias y se referencian los campos usando el alias correspondiente. En
este ejemplo, el uso de alias es para fines de simplificación, pero en algunas consultas es
absolutamente necesario.
En la consulta anterior vemos que el código de la editorial aparece 2 veces, desde la tabla
"libros" y "editoriales". Podemos solicitar que nos muestre algunos campos:
Al presentar los campos, en este caso, no es necesario aclarar a qué tabla pertenecen
porque los campos solicitados no se repiten en ambas tablas, pero si solicitáramos el
código del libro, debemos especificar de qué tabla porque el campo "codigo" se repite en
ambas tablas ("libros" y "editoriales"):
154
Relacionando tablas
join editoriales as e
on l.codigoeditorial=e.codigo;
155
Relacionando tablas
-- el codigo es ambiguo
select * from libros
join editoriales
on codigoeditorial=codigo;
-- el codigo es ambiguo
select codigo,titulo,autor,nombre from libros as l
join editoriales as e
on l.codigoeditorial=e.codigo;
Un campo que se usa para establecer un "join" (unión) con otra tabla en la cual es clave
primaria, se denomina "clave ajena o foránea".
En el ejemplo de la librería en que utilizamos las tablas "libros" y "editoriales" con los
campos:
el campo "codigoeditorial" de "libros" es una clave foránea, se emplea para enlazar la tabla
"libros" con "editoriales" y es clave primaria en "editoriales" con el nombre "codigo".
156
Relacionando tablas
Cuando alteramos una tabla, debemos tener cuidado con las claves foráneas. Si
modificamos el tipo, longitud o atributos de una clave foránea, ésta puede quedar
inhabilitada para hacer los enlaces.
Las claves foráneas y las claves primarias deben ser del mismo tipo para poder enlazarse. Si
modificamos una, debemos modificar la otra para que los valores se correspondan.
Una clave foránea se identifica con las palabras reservadas: foreign key. La sintaxis es:
Para establecer una relación, además de indicar la(s) clave(s) foránea(s), se debe hacer la
referencia a la tabla y el campo con el que se une la llave foránea. Esto se logra con la
palabra: references. La sintaxis es:
);
);
Junto a la clave foránea,
se hace la referencia a la
tabla principal
157
Relacionando tablas
Definir las claves foráneas, nos permite generar diagramas relacionales correctos. El
diagrama del ejemplo anterior se muestra a continuación:
158
Relacionando tablas
1) Clic en Database
2) Clic en Reverse Engineer…
3) Seguir las indicaciones del asistente
159