Material de Apoyo Unidad 3 MySQL Básico PDF
Material de Apoyo Unidad 3 MySQL Básico PDF
Material de Apoyo Unidad 3 MySQL Básico PDF
El manejo de una base datos a través de un Sistema de Gestión de Bases de Datos ( SGBD ) implica
el conocimiento de un lenguaje que permita construir la base de datos, y otro que posibilite
diferencias entre los dos lenguajes, pero de igual forma su aspecto complementario.
Es una sentencia SELECT anidada en otra sentencia SQL, que puede ser otro SELECT o bien cualquier
Las subconsultas se pueden anidar unas dentro de otras tanto como sea necesario, ya que no existe
un nivel máximo. Se pueden usar las cláusulas WHERE y HAVING para otorgar mayor potencia a la
realización de restricciones.
1.2.1 Ejemplos.
SELECT *
FROM articulos
SELECT *
FROM facturas
SELECT COUNT(*)
FROM clientes
SELECT *
FROM facturas
FROM facturas );
1.3 Consulta multitabla
Permite realizar consultas que involucran datos de varias tablas utilizando el operador de
concatenación (JOIN).
La concatenación es una de las operaciones más útiles del lenguaje SQL. Esta operación permite
combinar información de varias tablas sin necesidad de utilizar subconsultas para ello.
Los JOIN son usados en una sentencia SQL para recuperar datos de varias tablas al mismo tiempo.
La siguiente sentencia hace una concatenación natural de las tablas FACTURAS y CLIENTES. Ambas
tablas tienen una columna con el mismo nombre, codcli, siendo FACTURAS.codcli una clave ajena a
Cuando se quiere concatenar varias tablas que tienen varios nombres de columnas en común y no
todos han de utilizarse para realizar la concatenación, se puede disponer de la operación INNER
JOIN, que permite especificar las columnas sobre las que hacer la operación mediante la cláusula
USING.
SELECT DISTINCT codcli, clientes.nombre, codpue, pueblos.nombre
FROM facturas
Devuelve todos los resultados que coincidan en la primera tabla, con los datos que tenga de la
segunda. En el caso de que falte algún dato, devolverá un valor null en lugar del dato. Da prioridad
on editoriales.codigo=libros.codigoeditorial;
inverso, es decir, los roles de las tablas se invierten, busca coincidencia de valores desde la tabla de
coincidencia en la tabla de la izquierda, se genera una fila extra (una por cada valor no encontrado)
Select nombre,titulo
from libros as l
on e.codigo=l.codigoeditorial;
1.4 Operadores del algebra relacional
1.4.1 Proyección π
RUTA
Id ruta Fecha Origen Hora salida Destino Hora llegada Id Conductor Id Despachador Id Cliente
1 12/08/2019 Bogotá 10:12 a. m. Cali 10:00 a. m. 1 1 1
2 13/08/2019 Cali 11:12 a. m. Pasto 11:00 a. m. 2 2 2
3 14/08/2019 Bogotá 12:12 p. m. Medellin 12:00 p. m. 3 3 3
4 15/08/2019 Cali 1:12 p. m. Bogota 1:00 p. m. 1 1 1
5 16/08/2019 Medellin 2:12 p. m. Bogota 2:00 p. m. 2 2 2
6 17/08/2019 B/quilla 3:12 p. m. Bogota 3:00 p. m. 3 3 3
7 18/08/2019 Bucaramanga 4:12 p. m. Bogota 4:00 p. m. 1 1 1
π Id_Ruta.Destino(RUTA)
Id ruta Destino
1 Cali
2 Pasto
3 Medellin
4 Bogota
5 Bogota
6 Bogota
7 Bogota
1.4.2 Selección σ
condiciones que deben cumplir los registros recuperados de tal forma que los registros de vueltos
por la selección han de satisfacer todas las condiciones que se hayan establecido, a esto se le
conoce como consulta, el formato de uso u operador de selección esta representado por la letra
Dentro de esto puede estar el subíndice condición o predicado y en estas se pueden realizar
diferentes tipos de operaciones, como, comparación y lógicas, por último, resta la relación que es la
RUTA
Id ruta Fecha Origen Hora salida Destino Hora llegada Id Conductor Id Despachador Id Cliente
1 12/08/2019 Bogotá 10:12 a. m. Cali 10:00 a. m. 1 1 1
2 13/08/2019 Cali 11:12 a. m. Pasto 11:00 a. m. 2 2 2
3 14/08/2019 Bogotá 12:12 p. m. Medellin 12:00 p. m. 3 3 3
4 15/08/2019 Cali 1:12 p. m. Bogota 1:00 p. m. 1 1 1
5 16/08/2019 Medellin 2:12 p. m. Bogota 2:00 p. m. 2 2 2
6 17/08/2019 B/quilla 3:12 p. m. Bogota 3:00 p. m. 3 3 3
7 18/08/2019 Bucaramanga 4:12 p. m. Bogota 4:00 p. m. 1 1 1
σ Destino=”Bogota”(RUTA)
Id ruta Fecha Origen Hora salida Destino Hora llegada Id Conductor Id Despachador Id Cliente
4 15/08/2019 Cali 1:12 p. m. Bogota 1:00 p. m. 1 1 1
5 16/08/2019 Medellin 2:12 p. m. Bogota 2:00 p. m. 2 2 2
6 17/08/2019 B/quilla 3:12 p. m. Bogota 3:00 p. m. 3 3 3
7 18/08/2019 Bucaramanga 4:12 p. m. Bogota 4:00 p. m. 1 1 1
De la siguiente tabla empleados, crear una lista con todos los empleados mayores a 24 años.
σ (condición) R
σ edad > 24
Tabla 6 . Empleados
Id
Apellido Nombre Edad Sexo
Empleados
2 Navarrete Juan Esteban 28 M
3 García Juan David 33 M
4 Monson Andrés 26 M
7 Cantillo Huertas Omar 35 M
8 Venegas Milena 34 F
2 Segunda parte: Caso practico
El diseño físico del esquema de la base de datos se hizo en MySQL Workbench 8.0
Mediante la sentencia CREATE TABLE se construyen las tablas de la base de datos empresa.
USE empresa;
ENGINE = InnoDB;
DESCRIBE PROGRAMA;
);
);
DESCRIBE CLIENTE;
Figura 7. Creación de la tabla Cliente
);
DESCRIBE ALMACENES;
Figura 8. Creación de la tabla Almacenes
);
DESCRIBE `PROG/FAB`;
Figura 9. Creación tabla PROG/FAB
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
DESCRIBE `PROG/ALMA`;
Figura 10. Creación de la tabla Prog/alma
);
DESCRIBE REGISTRO;
La siguiente imagen muestra en forma gráfica las entidades, los atributos, la cardinalidad, llaves
2.3.1 Consulta 1
2.3.2 Consulta 2
2.3.3 Consulta 3
2.3.4 Consulta 4
2.3.5 Consulta 5
Genera un listado de las ciudades con establecimientos donde se venden programas sin que
2.3.6 Consulta 6
Obtén una lista con los nombres de programas, sin que aparezcan valores duplicados (utiliza
DISTINCT).
2.3.7 Consulta 7
2.3.8 Consulta 8
2.3.9 Consulta 9
WHERE CODIGO<=10;
WHERE CODIGO=11;
2.3.11 Consulta 11
2.3.12 Consulta 12
2.3.13 Consulta 13
2.3.14 Consulta 14
¿Qué otros comercios hay, además de El Corte Inglés? Utilizar el operador IN.
SELECT CIUDAD FROM ALMACENES WHERE NOMBRE NOT IN('El corte Inglés');
2.3.16 Consulta 16
Genera una lista con los códigos de las distintas versiones de Windows y Access.
Utilizar el operador IN
SELECT CODIGO FROM PROGRAMA WHERE NOMBRE IN('WINDOWS','ACCESS');
2.3.17 Consulta 17
Obtén un listado que incluya los nombres de los clientes de edades comprendidas entre 10 y 25 y
BETWEEN.
Saca un listado con los comercios de Sevilla y Madrid. No se admiten valores duplicados.
2.3.20 Consulta 20
¿Qué clientes terminan su nombre en la letra “o” y, además, son mayores de30 años?
SELECT NOMBRE FROM CLIENTE WHERE NOMBRE LIKE '%O' AND EDAD>30;
2.3.21 Consulta 21
Obtén un listado en el que aparezcan los programas cuya versión finalice por una letra i, o cuyo
SELECT NOMBRE FROM PROGRAMA WHERE VERSION LIKE '%i' OR NOMBRE LIKE 'A%'OR NOMBRE
LIKE 'W%';
2.3.22 Consulta 22
Obtén un listado en el que aparezcan los programas cuya versión finalice por una letra
Obtén un listado en el que aparezcan los programas cuya versión finalice por una letra i, o cuyo
nombre comience por una A y termine por una S.
Obtén un listado en el que aparezcan los programas cuya versión finalice por una letra i, y cuyo
nombre no comience por una A.
2.3.25 Consulta 25
2.3.26 Consulta 26
2.3.27 Consulta 27
2.3.29 Consulta 29
2.3.30 Consulta 30
Genera un listado de los programas y cantidades que se han distribuido a El Corte Inglés de Madrid.
Consulta regresa vacía por lo cual se agregan dos filas en la tabla prog_alma
INSERT INTO prog_alma (`Cantidad`, `Codigo`, `CIF`) VALUES ('52', '10', '2');
INSERT INTO prog_alma (`Cantidad`, `Codigo`, `CIF`) VALUES ('12', '16', '2');
Figura 50. listado de los programas y cantidades que se han distribuido a El Corte
2.3.31 Consulta 31
2.3.32 Consulta 31
2.3.33 Consulta 33
2.3.34 Consulta 33
2.3.36 Consulta 36
2.3.37 Consulta 37
¿En qué localidades se han vendido productos que se han registrado por Internet?
2.3.38 Consulta 38
Obtén un listado de los nombres de las personas que se han registrado por Internet,
2.3.39 Consulta 39
Genera un listado en el que aparezca cada cliente junto al programa que ha registrado,
Genera un listado con las ciudades en las que se pueden obtener los productos de Oracle.
2.3.41 Consulta 41
INSERT INTO registro (`Medio`, `CIF`, `DNI`, `Codigo`) VALUES ('Internet', '3', '3', '8');
Figura 62. nombre de los usuarios que han registrado Access XP
2.3.42 Consulta 42
2.3.43 Consulta 43
2.3.44 Consulta 44
INSERT INTO prog_alma (`Cantidad`, `Codigo`, `CIF`) VALUES ('23', '16', '1');
INSERT INTO prog_alma (`Cantidad`, `Codigo`, `CIF`) VALUES ('78', '10', '1');
INSERT INTO prog_alma (`Cantidad`, `Codigo`, `CIF`) VALUES ('45', '18', '1');
Figura 66. número de productos que ha vendido el establecimiento cuyo CIF es 1.
2.3.45 Consulta 45
INSERT INTO prog_alma (`Cantidad`, `Codigo`, `CIF`) VALUES ('12', '7', '2');
INSERT INTO prog_alma (`Cantidad`, `Codigo`, `CIF`) VALUES ('23', '7', '5');
INSERT INTO prog_alma (`Cantidad`, `Codigo`, `CIF`) VALUES ('59', '7', '1');
Figura 68. media de programas que se venden cuyo código es 7
2.3.46 Consulta 46
2.3.47 Consulta 47
2.3.48 Consulta 48
2.3.49 Consulta 49
2.3.50 Consulta 50
Se rectifica los valores conociendo que los códigos CIF de las tiendas en Sevilla son 1 y 4.
Figura 74. Consulta códigos CIF 1 y 4
2.3.51 Consulta 51
Calcular el número total de programas que han desarrollado los fabricantes cuyo país es “Estados
Unidos”.
2.3.52 Consulta 52
2.3.53 Consulta 53
Con una consulta concatena los campos nombre y versión de la tabla PROGRAMA.
2.3.54 Consulta 54
2.3.55 Consulta 55
Nombre de aquellos clientes que tienen la misma edad que Pepe Pérez. (Subconsulta).
2.3.56 Consulta 56
Genera un listado con los comercios que tienen su sede en la misma ciudad que tiene
2.3.57 Consulta 57
Nombre de aquellos clientes que han registrado un producto de la misma forma que el
3.1 Subconsulta 1.
Mostrar los datos de los empleados que pertenezcan al mismo departamento que ʻGILʼ.
3.2 Subconsulta 2
Mostrar los datos de los empleados que tengan el mismo oficio que ʻCEREZOʼ. El resultado debe ir
ordenado por apellido.
3.3 Subconsulta 3
Mostrar los empleados (nombre, oficio, salario y fecha de alta) que desempeñen el mismo oficio
que ʻJIMÉNEZʼ o que tengan un salario mayor o igual que ʻFERNÁNDEZ .
Figura 84. Empleados que desempeñen el mismo oficio que ʻJIMÉNEZʼ o que tengan un salario
mayor o igual que ʻFERNÁNDEZ .
3.4 Subconsulta 4
Mostrar en pantalla el apellido, oficio y salario de los empleados del departamento de ʻFERNÁNDEZʼ
que tengan su mismo salario.
3.5 Subconsulta 5.
Mostrar los datos de los empleados que tengan un salario mayor que ʻGILʼ y que pertenezcan al
departamento número 10.
3.6 Subconsulta 6.
Mostrar el apellido, salario y nombre del departamento de los empleados que tengan el mismo
oficio que ʻGILʼ.
3.7 Subconsulta 7.
Mostrar el apellido, salario y nombre del departamento de los empleados que tengan el mismo
oficio que ʻGILʼ y que no tengan comisión.
select emple.apellido, emple.oficio, emple.salario, depart.dnombre as departamento from emple
inner join depart ON emple.depart_dept_no = depart.dept_no
where oficio = (select oficio from emple
where apellido = 'Gil')
and comision is null ;
Figura 88. empleados que tengan el mismo oficio que ʻGILʼ y que no tengan comisión.
3.8 Consulta 8.
Mostrar los datos de los empleados cuyo salario sea mayor que la media de todos los salarios.
select * from emple
where salario > (select avg(salario) from emple);
Figura 89. empleados cuyo salario sea mayor que la media de todos los salarios.
3.9 Subconsulta 9.
Capallo Portilla, J. R., & Nieto Bernal, W. (2017). Diseño de base de datos. Barranquilla: Universidad
del Norte.
Capel Jimenez, M. (2014). Bases de datos relacionales y modelado de datos. Antequera: IC Editorial.
Marques, M. (2011). Bases de datos. Castello de la Plan: Publicaciones campus del Riu.
5 Apendice A. Script consultas parte 2.
SET @OLD_SQL_MODE=@@SQL_MODE,
SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- -----------------------------------------------------
-- Schema Net_Service
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema Net_Service
-- -----------------------------------------------------
USE `Net_Service` ;
-- -----------------------------------------------------
-- Table `Net_Service`.`Programa`
-- -----------------------------------------------------
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Net_Service`.`Fabricante`
-- -----------------------------------------------------
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Net_Service`.`Prog_Fab`
-- -----------------------------------------------------
CONSTRAINT `Fabr_Id`
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `Prog_Cod`
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Net_Service`.`Almacenes`
-- -----------------------------------------------------
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Net_Service`.`Prog_alma`
-- -----------------------------------------------------
CONSTRAINT `Prog_alma`
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `Programa_1`
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Net_Service`.`Cliente`
-- -----------------------------------------------------
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Net_Service`.`Registro`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Net_Service`.`Registro` (
CONSTRAINT `Prog/Reg`
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `Cliente/registro`
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `Alm/Reg`
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
INSERT INTO `net_service`.`fabricante` (`Id_fab`, `Nombre`, `Pais`) VALUES ('1', 'ORACLE', 'Estados
Unidos');
INSERT INTO `net_service`.`fabricante` (`Id_fab`, `Nombre`, `Pais`) VALUES ('3 ', 'IBM', 'Estados
Unidos');
INSERT INTO `net_service`.`fabricante` (`Id_fab`, `Nombre`, `Pais`) VALUES ('4 ', 'DINAMIC',
'España');
INSERT INTO `net_service`.`fabricante` (`Id_fab`, `Nombre`, `Pais`) VALUES ('5 ', 'BORLAND', 'Estados
Unidos');
INSERT INTO `net_service`.`fabricante` (`Id_fab`, `Nombre`, `Pais`) VALUES ('6 ', 'SYMANTEC',
'Estados Unidos');
INSERT INTO `net_service`.`PROGRAMAS` (`Codigo`, `Nombre`, `Version`) VALUES ('16 ', 'C++
BUILDER', '55');
INSERT INTO `net_service`.`PROGRAMAS` (`Codigo`, `Nombre`, `Version`) VALUES ('17', 'DB/2', '0');
INSERT INTO `net_service`.`PROGRAMAS` (`Codigo`, `Nombre`, `Version`) VALUES ('18', 'OS/2', '10');
INSERT INTO `net_service`.`PROGRAMAS` (`Codigo`, `Nombre`, `Version`) VALUES ('20', 'LA PRISION
', '10');
INSERT INTO `net_service`.`ALMACENES` (`CIF`, `Nombre`, `Ciudad`) VALUES ('1', 'El Corte Ingles',
'Sevilla');
INSERT INTO `net_service`.`ALMACENES` (`CIF`, `Nombre`, `Ciudad`) VALUES ('2', 'El Corte Ingles',
'Madrid');
INSERT INTO `net_service`.`ALMACENES` (`CIF`, `Nombre`, `Ciudad`) VALUES ('3', 'Jump', 'Valencia');
INSERT INTO `net_service`.`ALMACENES` (`CIF`, `Nombre`, `Ciudad`) VALUES ('4', 'Centro Mail',
'Sevilla');
INSERT INTO `net_service`.`cliente` (`DNI`, `Nombre`, `Edad`) VALUES ('1', 'Pepito Perez', '38');
INSERT INTO `net_service`.`cliente` (`DNI`, `Nombre`, `Edad`) VALUES ('2', 'Juan Charrasquiado',
'55');
INSERT INTO `net_service`.`cliente` (`DNI`, `Nombre`, `Edad`) VALUES ('3', 'Martin Pescador', '38');
INSERT INTO `net_service`.`cliente` (`DNI`, `Nombre`, `Edad`) VALUES ('4', 'Rosa Cantor', '25');
INSERT INTO `net_service`.`registro` (`Medio`, `CIF`, `DNI`, `Codigo`) VALUES ('Internet', '1', '1', '1');
INSERT INTO `net_service`.`registro` (`Medio`, `CIF`, `DNI`, `Codigo`) VALUES ('Tarjeta Posta', '1', '3',
'4');
INSERT INTO `net_service`.`registro` (`Medio`, `CIF`, `DNI`, `Codigo`) VALUES ('Telefono', '4', '2',
'10');
INSERT INTO `net_service`.`registro` (`Medio`, `CIF`, `DNI`, `Codigo`) VALUES ('Tarjeta Postal', '4', '1',
'10');
INSERT INTO `net_service`.`registro` (`Medio`, `CIF`, `DNI`, `Codigo`) VALUES ('Internet', '5', '2', '12');
INSERT INTO `net_service`.`registro` (`Medio`, `CIF`, `DNI`, `Codigo`) VALUES ('Internet', '2', '4', '15');
INSERT INTO `net_service`.`registro` (`Medio`, `CIF`, `DNI`, `Codigo`) VALUES ('Internet', '1', '1', '1');
INSERT INTO `net_service`.`registro` (`Medio`, `CIF`, `DNI`, `Codigo`) VALUES ('Tarjeta Posta', '1', '3',
'4');
INSERT INTO `net_service`.`registro` (`Medio`, `CIF`, `DNI`, `Codigo`) VALUES ('Telefono', '4', '2',
'10');
INSERT INTO `net_service`.`registro` (`Medio`, `CIF`, `DNI`, `Codigo`) VALUES ('Tarjeta Postal', '4', '1',
'10');
INSERT INTO `net_service`.`registro` (`Medio`, `CIF`, `DNI`, `Codigo`) VALUES ('Internet', '5', '2', '12');
INSERT INTO `net_service`.`registro` (`Medio`, `CIF`, `DNI`, `Codigo`) VALUES ('Internet', '2', '4', '15');
Consultas
where edad >'10' and edad <= '25' or edad > '50';
where nombre like '%i' or nombre like 'a%' or nombre like 'w%';
where version like '%i' or nombre like 'a%' and nombre like '%s';
order by version;
);
;
select nombre from cliente
);
);
);
;
6 Apendice B Script consultas parte 3.
use msql1;
order by apellido;