7 - Guía Mysql
7 - Guía Mysql
7 - Guía Mysql
BASES DE DATOS
CON MYSQL
Objetivos de la Guía
En esta guía aprenderás:
Las bases de datos requieren de un lenguaje de consulta para recibir instrucciones sobre cómo
operar. Un lenguaje de consulta no es un lenguaje de programación. Es importante que
distingamos las diferencias entre ambos, seguramente al avanzar sobre la guía lo comprendas
mejor. La mayoría de las bases de datos utilizan lenguaje de consulta estructurado (SQL) para
operar sobre bases de datos.
1
¿CUÁL ES LA IMPORTANCIA DEL USO DE UNA BASE DE DATOS?
Las bases de datos se consideran uno de los mayores aportes que ha dado la informática a las
empresas. En una empresa, la administración de muchos datos e información es parte del día a
día. Por lo que, lograr una gestión de bases de datos adecuada, resulta en una mayor eficacia y
productividad.
Esto se debe a las principales utilidades que ofrece una base de datos a una empresa:
Además, también, desde su creación, las bases de datos han significado un gran soporte para la
organización en el desarrollo de software. La base de datos es la estructura fundamental para la
administración eficiente de datos en el mundo de la informática.
La correcta gestión de estas bases de datos brinda a los sistemas una eficacia palpable. Es una
mejoría que se traduce en rapidez de procesamiento, seguridad de datos y calidad de uso de los
recursos.
Como método común de almacenamiento, es vital el manejo integral del área, pasando por la
administración del sistema gestor, hasta llegar al desarrollo de softwares, los conceptos y
tecnología asociados. Es por esto que existen ramas de la Programación especializadas en la
ciencia de datos como, por ejemplo: Data Analytics y Data Science.
Algunos ejemplos de software de bases de datos o DBMS populares incluyen MySQL, Microsoft
Access, Microsoft SQL Server, FileMaker Pro, Oracle Database y dBASE.
2
¿QUÉ ES UNA TABLA DE BASE DE DATOS?
Una tabla de base de datos es similar en apariencia a una hoja de cálculo en cuanto a que los
datos se almacenan en filas y columnas.
Para aprovechar al máximo la flexibilidad de una base de datos, los datos deben organizarse en
tablas para que no se produzcan redundancias. Por ejemplo, si se quiere almacenar información
sobre los empleados, cada empleado debe especificarse solo una vez en la tabla que está
configurada para los datos de los empleados. En tanto que, los datos sobre los productos se
almacenarán en su propia tabla y, finalmente, los datos sobre las sucursales se almacenarán en
otra tabla aparte. Este proceso se denomina normalización y lo abordaremos en más profundidad
durante esta guía.
Cada fila de una tabla se denomina registro. En los registros se almacena información. Cada
registro está formado por uno o varios campos. Los campos equivalen a las columnas de la tabla.
Por ejemplo, se puede tener una tabla llamada "Empleados" donde cada registro (fila) contiene
información sobre un empleado distinto y cada campo (columna) contiene otro tipo de información
como nombre, apellido, dirección, etc. Los campos deben designarse como un determinado tipo
de datos, ya sea texto, fecha u hora, número o algún otro tipo. Veamos una tabla de Empleado:
Nombre de la tabla.
Fila / Registro:
Cada una de las
Filas tiene un empleado
distinto.
• Cómo se almacenan y manipulan los datos. Las bases de datos emplean una unidad
lógica que relaciona los datos de manera que hace más eficiente su uso y
almacenamiento.
• Quién puede acceder a los datos. Las bases de datos permiten a múltiples usuarios al
mismo tiempo acceder y consultar los datos de forma rápida y segura utilizando una lógica
y un lenguaje altamente complejos.
3
¿POR QUÉ INTERESA USAR UNA BASE DE DATOS EN LUGAR DE UNA HOJA
DE CÁLCULO ?
• Mayor independencia. Los datos son independientes de las aplicaciones que los usan, así
como de los usuarios.
• Mayor disponibilidad. Se facilita el acceso a los datos desde contextos, aplicaciones y medios
distintos, haciéndolos útiles para un mayor número de usuarios.
• Mayor seguridad (protección de los datos). Por ejemplo, resulta más fácil replicar una base de
datos para mantener una copia de seguridad que hacerlo con un conjunto de ficheros
almacenados de forma no estructurada. Además, al estar centralizado el acceso a los datos,
existe una verdadera sincronización de todo el trabajo que se haya podido hacer sobre estos
(modificaciones), con lo que esa copia de seguridad servirá a todos los usuarios.
• Bases de datos relacionales: Los elementos de una base de datos relacional se organizan
como un conjunto de tablas con columnas y filas. La tecnología de base de datos
relacional proporciona la manera más eficiente y flexible de acceder a información
estructurada. En la actualidad se usa de forma mayoritaria las bases de datos relacionales.
• Nota: este es el tipo de base de datos que vamos a trabajar y sobre el que vamos a
profundizar.
• Bases de datos NoSQL: Una NoSQL (Not Only SQL), o una base de datos no relacional,
permite que los datos no estructurados y semiestructurados se almacenen y manipulen, a
diferencia de una base de datos relacional, que define cómo deben componerse todos los
datos insertados en la base de datos. Las bases de datos NoSQL se hicieron populares a
medida que las aplicaciones web se hacían más comunes y complejas.
Las columnas de una tabla se corresponden con los atributos de los datos, y cada registro o fila,
generalmente, tiene un valor para cada atributo, lo que facilita el establecimiento de las relaciones
entre los datos.
4
¿QUÉ ES UN MODELO DE BASE DE DATOS?
Un modelo de base de datos es la estructura lógica que adopta la base de base datos, incluyendo
las relaciones y limitaciones que determinan cómo se almacenan y organizan y cómo se accede a
los datos. Asimismo, un modelo de base de datos también define qué tipo de operaciones se
pueden realizar con los datos, es decir, que también determina cómo se manipulan los mismos,
proporcionando también la base sobre la que se diseña el lenguaje de consultas.
En general, prácticamente todos los modelos de base de datos pueden representarse a través de
un diagrama de base de datos (en esta guía veremos algunos).
pActividad 1p
Hemos abordado temas centrales y pensamos que es oportuno analizar algunas definiciones. Por
ello, te proponemos respondas las siguientes preguntas a fin de asentar mejor algunos conceptos
clave:
4) ¿Cuál de estas SI es una ventaja al trabajar el almacenamiento de los datos con bases de
datos en lugar de hojas de cálculo?
5
5) En las bases de datos relacionales existe un elemento clave que identifica a cada registro
o fila y la hace única, ¿cómo se llama ese elemento?
a. Clave única
b. Clave foránea
c. Llave primaria
d. Llave maestra
PMODELO RELACIONALP
El modelo relacional, para el modelado y la gestión de bases de datos, es un modelo de datos
basado en la lógica de predicados y en la teoría de conjuntos. Este modelo de bases de datos fue
creado por un científico informático inglés llamado Edgar Frank "Ted" Codd a finales de los 60’. Su
idea fundamental es el uso de relaciones.
Estas relaciones podrían considerarse en forma lógica como conjuntos de datos. Estos conjuntos
de datos, se denominan tuplas. Pese a que esta es la teoría de las bases de datos relacionales
creadas por Codd, la mayoría de las veces se conceptualiza de una manera más fácil de imaginar,
pensando en cada relación como una tabla que está compuesta por registros (cada fila de la tabla
sería un registro o “tupla”) y columnas (también llamadas “campos”).
Es el modelo más utilizado en la actualidad para modelar problemas reales y administrar datos
dinámicamente.
Este modelo está basado en que todos los datos están almacenados en tablas (también llamadas
entidades o relaciones) y cada una de estas es un conjunto de datos, por tanto una base de datos
es un conjunto de relaciones.
Las tablas están formadas por filas, también llamadas tuplas, donde se describen los elementos
que configuran la tabla (es decir, los elementos de la relación establecida por la tabla), columnas o
campos, con los atributos y valores correspondientes, y el dominio, concepto que agrupa a todos
los valores que pueden figurar en cada columna.
6
• Minimizar la redundancia de los datos.
• Disminuir problemas de actualización de los datos en las tablas.
• Proteger la integridad de datos.
Nombre de la tabla.
Clave
Primaria Atributos
Tuplas
ATRIBUTOS
Un atributo en el Modelo Relacional representa una propiedad que posee esa tabla y equivale al
atributo del Modelo E-R (Entidad-Relación). Es decir, un atributo de una relación (tabla) es análogo
al atributo de una clase entidad.
Es necesario volver a mencionar que los atributos de una misma tabla no pueden nombrarse de
igual manera. Cada atributo debe poseer un nombre único.
7
Por ejemplo, la información de los estudiantes de un curso se representa mediante la tabla
Estudiantes, y posee cuatro atributos (representadas en columnas) id_estudiante, nombre,
apellido y edad.
DOMINIO
El dominio dentro de la estructura del Modelo Relacional es el conjunto de valores que puede
tomar un atributo.
Estudiantes
• Un dominio contiene todos los posibles valores que puede tomar un determinado atributo.
Dos atributos distintos pueden tener el mismo dominio.
• Un domino es un conjunto finito de valores del mismo tipo. Distintos tipos de dominios son:
enteros, cadenas de texto, fecha, etc.
TUPLAS
Las tuplas son las filas de una tabla que contiene valores para cada uno de los atributos (equivale
a los registros). Siguiendo la misma ejemplificación de la tabla Estudiantes, un ejemplo podría ser:
34563, José, Martínez, 19.
Una tupla representa un objeto único. Los datos que posee dicha tupla se encuentran
estructurados en una tabla. Esto resulta en que, cada tupla (o registro), esté compuesta por
campos que contienen los datos y representan a una entidad.
CLAVES
Las claves son campos cuyo valor es único para cada tupla o registro. Identificamos dos tipos:
primaria y foránea
Clave primaria
Se denomina clave primaria o identificador único o llave principal al atributo que identifica a
cada instancia de un registro.
Una base de datos relacional está diseñada para imponer la exclusividad de las claves primarias.
Esto permite que haya sólo una columna con un valor de clave primaria en una tabla. Resultando
en que no pueden existir dos instancias de un registro con el mismo valor de llave primaria.
8
Para mejorar el desempeño de la base de datos se recomienda utilizar claves primarias numéricas.
Idealmente, se nombran “id” (abreviación de identificador) seguido por un guión bajo (_) y el
nombre de la tabla. Por ejemplo: id_estudiante.
Estudiantes
En esta tabla Estudiantes, tendremos dos estudiantes con el mismo nombre y apellido, pero con
distintos identificadores y distintas edades, por lo que no se consideran datos duplicados. Si
nosotros nos basáramos en el nombre para evitar datos duplicados, no podríamos ingresar dos
alumnos con el mismo nombre, esta es otra de las ventajas del identificador único o clave primaria.
CLAVE FORÁNEA
Una clave foránea o llave foránea es una columna de una tabla cuyos valores corresponden a los
valores de la clave primaria de otra tabla. A veces, esto también se denomina clave de referencia.
Para asignarle un valor a un campo de llave foránea, se requiere de la existencia de una llave
primaria con el mismo valor. Asimismo, la relación entre dos tablas coincide con la clave primaria
en una de las tablas y con una clave foránea en la segunda tabla. Por ejemplo, si tenemos las
tablas profesor y curso, para relacionarlas, tendríamos, en la tabla curso, una columna de clave
foránea cuyo campo será el valor de la clave primaria de la tabla profesor. De esta manera se dice
que un profesor específico pertenece a un curso específico.
9
En este ejemplo la tabla Curso (tabla de la derecha), tiene una columna llamada id_profesor, esta
columna es la que va a tener las claves foráneas y la que va mostrar que hay una relación entre
las dos tablas. En este ejemplo, la columna id_profesor de la tabla curso, tiene el valor “1” que se
corresponde con la llave primaria (id_profesor) de un registro de la tabla Profesor. Esto nos
indicaría que Agustín es el Profesor del Curso de Programación.
pActividad 2p
Hemos abordado un montón de conceptos nuevos que te serán de mucha ayuda y utilidad para
seguir avanzando en esta guía, ¿te parece si repasamos un poco con una actividad?
Para esta actividad deberás responder cada pregunta en base a las siguientes tablas creadas en
Workbench:
Tabla casa
Tabla usuario
a. Llaves primarias
b. Llave foránea
c. Un campo que almacena datos de tipo carácter
d. Los atributos de cada tabla
e. Una tupla
2) Compara tus respuestas con las de tus compañeros: recuerda abordar cada duda que
tengas, a partir de ellas es que fortalecemos el aprendizaje.
10
Revisemos lo aprendido hasta aquí
PRELACIONESP
Uno de los aspectos fundamentales de las bases de datos relacionales son precisamente
las relaciones. En pocas palabras, una “relación” es una asociación que se crea entre tablas, con el
fin de vincularlas y garantizar la integridad referencial de sus datos.
Una relación es la abstracción de un conjunto de asociaciones que existen entre las tablas de dos
tuplas, por ejemplo, existe una relación entre Película (tabla Película) y Director (tabla Director).
Para que una relación entre dos tablas exista, la tabla que deseas relacionar debe poseer una
clave primaria o identificador único, mientras que la tabla donde estará el lado dependiente de la
relación debe poseer una clave foránea o llave foránea de esa clave primaria.
• Las relaciones existen ya que las entidades representan aspectos del mundo real y en
este mundo los componentes no están aislados, sino que se relacionan entre sí; es por
esto es necesario que existan las relaciones entre las entidades.
TIPOS DE RELACIONES
Las bases de datos relacionales tienen diversos tipos de relaciones que podemos utilizar para
vincular nuestras tablas.
Este vínculo va a depender de la cantidad de ocurrencias que tiene un registro o fila de una tabla
dentro de otra tabla (esto se conoce como cardinalidad).
Se presentan cuando un registro de una tabla sólo está relacionado con un registro de otra tabla,
y viceversa.
Por ejemplo, supongamos que nuestros empleados deben almacenar su información de contacto.
Para este caso, pudiésemos leer la relación de esta manera:
11
Dado que la información de contacto es la que depende principalmente del empleado, es en ella
donde existirá la clave foránea para representar el vínculo.
Esta relación es un poco más compleja que la anterior, así que vamos a usar las tablas A y B para
explicarla.
Una relación de uno a muchos se presenta cuando un registro de la tabla A está relacionado con
ninguno o muchos registros de tabla B, pero este registro en la tabla B solo está relacionado con
un registro de la tabla A. Veamos un ejemplo de esto.
Supongamos que tenemos ciudades en las cuales viven nuestras personas, pero cada persona
solo puede pertenecer a una ciudad. Para este caso, pudiésemos leer la relación de esta manera:
Dado que la persona es el que necesita de la ciudad, es en él donde existirá la clave foránea para
representar el vínculo.
Estas son las relaciones más complejas, se presentan cuando muchos registros de una tabla se
relacionan con muchos registros de otra tabla. Vamos a verlo en un ejemplo.
Supongamos que nuestros empleados trabajan turnos. Por ejemplo, Juan trabaja en el turno
mañana y de la noche, pero en el turno de la mañana trabajan Juan, Pedro y María.
Para este tipo de relación se crea una tabla intermedia conocida como tabla asociativa. Por
convención, el nombre de esta tabla debe estar formado por el nombre de las tablas participantes
(en singular y en orden alfabético) separados por un guion bajo (_). Esta tabla está compuesta por
las claves primarias de las tablas que se relacionan con ella, así se logra que la relación sea de
uno a muchos, en los extremos, de modo tal que la relación se lea:
Supongamos que tenemos la siguiente relación. Tenemos dos tablas: ticket y producto. En un
registro Ticket se verá reflejado el ticket de las compras del supermercado donde un cliente
puede comprar varios productos. Los productos cargados en el ticket podrán ser visualizados a
través de la tabla intermedia. Donde podemos ver que tenemos dos productos asociados al
id_ticket de valor 915. Por lo tanto, el ticket 915 tiene registro de compra de Pan (6714) y Agua
(3452). Sin embargo, al mismo tiempo un producto puede ser comprado por varios clientes. Esta
es una relación muchos a muchos. Las tablas se verían así:
12
Producto
ID Nombre Ticket
Tabla intermedia
Producto_Ticket
ID_Producto ID_Ticket
3452 915
6714 915
7811 624
PDIAGRAMAS ERDP
Los diagramas de relación de entidades (ERD) son representaciones visuales de bases de datos
que muestran cómo los elementos dentro de una base de datos están relacionados entre sí. Un
ERD se compone de dos tipos de objetos: entidades y relaciones. Las entidades van a ser lo que
nosotros conocemos como tablas, y las relaciones tienen finales de línea especiales llamados
cardinalidades que describen cómo dos elementos de la base de datos interactúan entre sí.
Estos diagramas nos van a servir para representar las relaciones previamente mencionadas, para
ello existen las siguientes líneas que unen las tablas entre sí:
13
Teniendo en cuenta las líneas que se usan para cada tipo de relación vamos a ver cómo serían
cada una de las relaciones:
14
Relaciones muchos a muchos
pActividad 3p
Marca verdadero o falso. Justifica tus respuestas. Luego, compara tus respuestas con tus
compañeros de mesa.
15
P¿QUÉ ES EL SOFTWARE DE BASE DE DATOS?P
Para poder trabajar con base de datos, tablas, sus columnas, filas, relaciones, con el modelo
relacional, etc. Tenemos que utilizar un software de base de datos.
El software de base de datos se utiliza para crear, editar y mantener archivos y registros de bases
de datos, lo que facilita la creación de archivos y registros, la entrada de datos, la edición de
datos, las actualizaciones y los informes. El software también se encarga del almacenamiento de
datos, las copias de seguridad y los informes, el control de acceso múltiple y la seguridad. La
sólida seguridad de las bases de datos es especialmente importante hoy en día, ya que el robo de
información se vuelve más frecuente. En ocasiones, el software de base de datos también se
denomina "sistema de administración de bases de datos" (DBMS).
El lenguaje SQL también se usa para controlar el acceso a datos y para la creación y modificación
de esquemas de Base de datos. SQL utiliza los términos tabla, fila y columna para los términos
relación, tupla y atributo del modelo relacional formal, respectivamente. Por lo tanto, es posible
utilizar todos estos términos indistintamente.
1. Lenguaje de Definición de Datos (DDL): permite crear y definir nuevas bases de datos,
campos e índices.
16
SCRIPTS
Los scripts son fragmentos de código. Podremos encontrar scripts de distintos lenguajes y con
distintos objetivos. Cuando hablamos de scripts de bases de datos, éstos contienen consultas
específicas a la base de datos. Se utilizan para compartir consultas con otras personas. En general
encontraremos dos funciones principales:
Scripts para compartir bases de datos. Al ejecutar este tipo de scripts podremos obtener una
misma base de datos que otra persona.
Scripts para compartir consultas a una base de datos específica. Al ejecutar este tipo de scripts
podremos obtener consultas. Pueden ser utilizadas para guardar en nuestros ordenadores
consultas complejas que se utilizan a diario.
• Esta sentencia sirve para crear una base de datos con un nombre específico.
• Para poder crear una base de datos, el usuario que la crea debe tener privilegios de
creación asignados.
• IF NOT EXISTS significa: SI NO EXISTE, por lo tanto, esto es útil para validar que la base de
datos sea creada en caso de que no exista, si la base de datos existe y se ejecuta esta
sentencia, se genera un error.
2. CREATE TABLE
17
Ligaduras
Especifica un conjunto de valores que son válidos a ingresar sobre una columna específica
para una tabla de la base de datos. Esta integridad se verifica a través de una la validación de
los valores de datos que se ingresan y el tipo de los datos a introducir (numérico,
alfanumérico, alfabético, etc.).
• DEFAULT: Esta restricción asigna un valor específico a una columna cuando el valor para
ello no haya sido explícitamente proporcionado para tal columna en una sentencia
"INSERT" o de adición de un nuevo registro en la tabla.
• CHECK: Específica los valores de datos que el DBMS acepta le sean ingresados para una
columna.
• REFERENCES: Específica los valores de datos que el DBMS acepta le sean ingresados
para una columna.
Específica que, en una tabla o entidad, todas sus filas tengan un identificador único que
diferencie a una fila de otra y también que se establezcan columnas cuyo contenido es un
valor único que las hace llaves candidatas para un futuro como, por ejemplo: número de
cédula, número de seguro social o cuenta de email.
• PRIMARY KEY: Este tipo de restricción se aplica a todas las filas permitiendo que exista un
identificador, que se conoce como llave primaria y que se asegura que los usuarios no
introduzcan valores duplicados. Además, asegura que se cree un índice para mejorar el
desempeño. Los valores nulos no están permitidos para este tipo de restricción.
La Integridad Referencial asegura que las relaciones que existe entre llave primaria (en la tabla
referenciada) y la llave foránea (en las tablas referenciantes) serán siempre mantenidas. Una
fila o registro en la tabla referenciada (tabla donde reside la llave primaria) no puede ser
borrada o su llave primaria cambiada si existe una fila o registro con una llave foránea (en la
tabla referenciante) que se refiere a esa llave primaria.
• FOREIGN KEY: En esta restricción se define una llave foránea, una columna o combinación
de columnas en las cuales su valor debe corresponder al valor de la llave primaria en la
misma u en otra tabla.
La sentencia para eliminar una tabla y por ende todos los objetos asociados con esa tabla es
DROP TABLE, donde r es el nombre de una tabla existente.
DROP TABLE r
18
4. ALTER TABLE
Después que una tabla ha sido utilizada durante algún tiempo, los usuarios suelen descubrir
que desean almacenar información adicional con respecto a las tablas. La sentencia ALTER
TABLE se utiliza sobre tablas que ya poseen desde cientos a miles de filas por ser tablas de
un sistema de software.
• RENAME TO nuevo_nombre
Los cambios que se pueden realizar con la sentencia SQL ALTER TABLE son:
• Añadir una definición de columna a una tabla. Puede crearse con valores nulos o con
valores.
• Eliminar una columna de la tabla. Pero antes de su eliminación deben ser eliminados por
ALTER TABLE todas las restricciones que estén definidas sobre esta columna.
• Definir una llave primaria para una tabla. La columna(s) a la cual se le dará esta
responsabilidad debe contener previamente valores únicos por fila.
• Definir una nueva llave foránea para una tabla. La columna a definir como llave foránea
debe contener previamente valores que corresponden a la llave primaria de otra tabla.
pActividad 4p
1. ¡Ahora ejecutaremos un script y crearemos una base de datos por primera vez! Primero,
deberemos abrir el script llamado “superhéroes.sql” y ejecutarlo de modo tal que se cree
la base de datos y todas sus tablas.
19
2. Analiza el script detenidamente, línea por línea, ayudándote con la guía. Intenta
comprender qué pasa en cada sentencia del script. Luego contesta:
a. 0
b. 1
c. 2
d. 3
a. 11
b. 9
c. 10
d. 12
20
CONSULTAS DE MANIPULACIÓN DE DATOS (DML)
1. INSERT INTO
En su formato más sencillo, INSERT se utiliza para añadir una sola fila a una tabla. Debemos
especificar el nombre de la tabla y una lista de valores para la fila. Los valores deben
suministrarse en el mismo orden en el que se especificaron los atributos correspondientes en
el comando CREATE TABLE.
UPDATE nombre_tabla
SET nombre_columna1 = valor1,
nombre_columna2 = valor2,
[ORDER BY ...] [WHERE condicion]
3. DELETE
El comando DELETE elimina filas de una tabla. Incluye una cláusula WHERE, para seleccionar
las filas que se van a eliminar.
Las filas se eliminan explícitamente sólo de una tabla a la vez. Sin embargo, la eliminación se
puede propagar a filas de otras tablas si se han especificado opciones de acciones
referenciales en las restricciones de integridad referencial del DDL.
En función del número de filas seleccionadas por la condición de la cláusula WHERE, ninguna,
una o varias filas pueden ser eliminadas por un solo comando DELETE. La ausencia de una
cláusula WHERE significa que se borrarán todas las filas de la relación; sin embargo, la tabla
permanece en la base de datos, pero vacía. Debemos utilizar el comando DROP TABLE para
eliminar la definición de la tabla.
PASO Descripción
21
Eliminar las filas que ya no se requieran en las
5 diferentes tablas. Sentencia SQL à DELETE
pActividad 5p
Hasta el momento, nuestra base de datos “superhéroe” se encuentra vacía. Sólo tenemos la
estructura (tablas y columnas). Por lo que ahora es el turno de insertar registros en cada tabla.
22
a) Primero insertar en la tabla “creador” los siguientes datos:
Tabla creador
Tabla personaje
pActividad extrap
Vamos a aprovechar que ya estamos trabajando con scripts y vamos a abrir el script llamado
“nba” y ejecutarlo de modo tal que se cree la base de datos y todas sus tablas, Este proceso
puede demorar, es normal y es super importante que lo hagas: ¡ten paciencia!
Esto lo hacemos porque más adelante la vamos a necesitar en el módulo de MySQL, entonces
mejor adelantarnos a ese momento y no perder tiempo cuando tengamos que trabajar sobre
dicha base de datos.
23
CONSULTAS PARA ACCEDER Y MANIPULAR INFORMACIÓN
1. SELECT
La sentencia SELECT es muy poderosa y ampliamente rica en sus cláusulas y variantes
permitiendo la capacidad de atender en poco tiempo a consultas complejas sobre la base de
datos. Está en el especialista desarrollador de aplicaciones conocerlo a profundidad para
explotar las bondades y virtudes.
Se usa para listar las columnas de las tablas que se desean ver en el resultado de una
consulta. Además de las columnas se pueden listar columnas a calcular por el SQL cuando
actué la sentencia. Esta cláusula no puede omitirse.
La sentencia SELECT, obtiene y nos permite mostrar filas de la base de datos, también permite
realizar la selección de una o varias filas o columnas de una o varias tablas. Para seleccionar la
tabla de la que queremos obtener dichas filas vamos a utilizar la sentencia FROM.
La sentencia FROM lista las tablas de donde se listarán las columnas enunciadas en el
SELECT. Esta cláusula no puede omitirse.
Alumnos
1 Agustín Cocco 24
2 Martin Bullón 21
Alumnos
Nombre Apellido
Agustín Cocco
Martin Bullón
Para mostrar todos los datos de una tabla usamos el símbolo (*). Esto nos mostraría la primera
tabla.
24
Teniendo la siguiente tabla de Empleados:
Empleados
Empleados
Nombre (salario+comision)
Agustín 5300
Martin 2250
A la consulta SELECT le podemos sumar cláusulas que van a alterar el resultado de filas que
obtenga el SELECT, esto nos puede servir para traer ciertas filas y evitar algunas que no
queremos mostrar.
CLÁUSULAS
1. SELECT DISTINCT
El SELECT DISTINCT se utiliza cuando queremos traer solo registros diferentes. En las tablas a
veces puede haber valores repetidos, para evitarlos usamos esta sentencia.
Alumnos
1 Agustín Cocco 24
2 Martin Bullón 21
3 Agustín Cocco 1
25
El resultado que mostraría sería:
Alumnos
Nombre Apellido
Agustín Cocco
Martin Bullón
2. WHERE
Establece criterios de selección de ciertas filas en el resultado de la consulta gracias a las
condiciones de búsqueda. Si no se requiere condiciones de búsqueda puede omitirse y el
resultado de la consulta serán todas las filas de las tablas enunciadas en el FROM.
Alumnos
1 Agustín Cocco 24
2 Martin Bullón 21
Alumnos
Nombre Apellido
Agustín Cocco
26
Operadores Relacionales
En todos estos ejemplos estamos buscando las filas donde la edad de un alumno sea mayor,
menor, etc, a x edad. Usamos edad, pero puede ser cualquier valor numérico o valor de tipo
cadena.
Operadores Lógicos
El operador AND
muestra un registro si SELECT * FROM Alumnos WHERE
AND todas las condiciones
separadas por AND son edad = 18 AND edad = 21;
verdaderas
El operador OR muestra
un registro si algunas de SELECT * FROM Alumnos WHERE
OR las condiciones
separadas por OR es edad = 15 OR edad = 20;
verdadera.
El operador NOT muestra
un registro si la/s SELECT * FROM Alumnos WHERE
NOT condición/es no es NOT edad = 20;
verdadera.
Los operadores lógicos sirven para filtrar resultados basados en más de una condición.
a) BETWEEN
27
SELECT nombre/s de la/s columna/s FROM tablaOrigen WHERE condición de
Búsqueda BETWEEN valor1 AND valor2;
Usamos edad, pero puede ser cualquier valor numérico o valor de tipo cadena.
1 Agustín Cocco 24
2 Martin Bullon 39
3 Mariela Lima 60
4 Juliana Martínez 30
5 Gastón Vidal 26
El resultado sería:
1 Agustín Cocco 24
2 Martin Bullon 39
4 Juliana Martínez 30
5 Gastón Vidal 26
b) IN
El operador IN te permite especificar varios valores para una condición de una cláusula
WHERE. Es un atajo para no escribir varias condiciones OR.
1 Agustín Cocco 24
2 Martin Bullon 15
3 Mariela Lima 20
28
El resultado que mostraría sería:
1 Agustín Cocco 24
3 Mariela Lima 20
c) LIKE
El operador LIKE se usa en una cláusula WHERE para buscar un patrón específico en una
columna. También se usa cuando queremos utilizar una cadena en una comparación WHERE
Hay dos símbolos que se utilizan a menudo junto con el operador LIKE:
El signo de porcentaje (%) representa cero, uno o varios caracteres y el guión bajo (_) para
representar un carácter. Estos signos se pueden utilizar por separado o juntos.
1 Sebastián Gómez 24
2 Sabrina Martínez 15
3 Mariela Lima 20
1 Sebastián Gómez 24
2 Sabrina Martínez 15
29
WHERE nombre Encuentra cualquier nombre
LIKE ‘%ar%’ que tenga “ar” en cualquier
posición.
pActividad 6p
a) Ahora veamos cómo ha quedado la tabla “superheroes” que creaste anteriormente. Para ello
necesitarás una consulta de tipo SELECT.
b) Realiza una consulta que devuelva todos los valores de la columna “nombre_real” de la tabla
superhéroe.
c) Realiza una consulta que devuelva todos los nombres reales de los personajes cuyo nombre
empieza con “B”.
30
3. ORDER BY
La cláusula ORDER BY permitirá establecer la columna o columnas sobre las cuales las filas
que se mostrarán de la consulta deberán ser ordenadas. Este orden puede ser ascendiente se
agrega la palabra ASC y descendiente si se agrega la palabra DESC al final.
Alumnos
1 Jerónimo Wiunkhaus 24
2 Ana Gadea 15
3 Mariela Lima 20
Alumnos
2 Ana Gadea 15
1 Jerónimo Wiunkhaus 24
3 Mariela Lima 20
pActividad 7p
Pongamos a prueba esta nueva cláusula: order by. Seguiremos trabajando con la tabla
“superhéroe”. Realiza una consulta que devuelva todos los registros ordenados por “inteligencia”.
31
4. GROUP BY
Especifica una consulta sumaria. En vez de producir una fila de resultados por cada fila de
datos de la base de datos, una consulta sumaria agrupa todas las filas similares y luego
produce una fila sumaria de resultados para cada grupo de los nombres de columnas
enunciados en esta cláusula.
En otras palabras, esta cláusula permitirá agrupar un conjunto de columnas con valores
repetidos y utilizar las funciones de agregación sobre las columnas con valores no repetidos.
Esta cláusula puede omitirse.
En la gestión de bases de datos, una función de agregación es una función en la que los valores de
varias filas se agrupan bajo un criterito para formar un valor único más significativo. Estas funciones se
ponen el SELECT.
a) MAX
MAX(Salario)
2000
b) MIN
32
Teniendo la siguiente tabla de empleados:
MIN(Salario)
1000
c) AVG
AVG(Salario)
1325
33
d) COUNT
COUNT(Id)
En este caso ponemos el id, para saber cuántos empleados tenemos en la tabla empleados.
También podemos usar el COUNT(*), este no requiere que le pasamos una columna concreta y cuenta
todas filas de una tabla, mostrando tanto los valores repetidos como los valores en null.
COUNT(Id)
34
Entonces, volviendo al Group By, vamos a utilizar esta sentencia junto con las funciones de
agregación para agrupar los valores que devuelva dicha función. Existen dos tipos de GROUP
BY.
Empleados
Empleados
Nombre SUM(Salario)
Franco 2000
Mariela 4000
El resultado de la consulta muestra que agrupa todos los nombres repetidos bajo un solo
nombre y el salario es la suma de los salarios de las filas que fueron agrupadas.
Personas
Id Nombre País
1 Franco Argentina
2 Juliana Alemania
3 Agustín Argentina
35
El resultado que mostraría sería:
Personas
COUNT(Id) País
2 Argentina
1 Alemania
En la consulta hacemos un count del id de personas para saber cuántos hay, pero al agrupar
el resultado por países, nos muestra cuantas personas hay en cada país.
5. HAVING
Esta cláusula le dice al SQL que incluya sólo ciertos grupos producidos por la cláusula GROUP
BY en los resultados de la consulta. Al igual que la cláusula WHERE, utiliza una condición de
búsqueda para especificar los grupos deseados. La cláusula HAVING es la encargada de
condicionar la selección de los grupos en base a los valores resultantes en las funciones
agregadas utilizadas debidas que la cláusula WHERE condiciona solo para la selección de filas
individuales. Esta cláusula puede omitirse.
Personas
Id Nombre País
1 Franco Argentina
2 Juliana Alemania
3 Agustín Argentina
4 Gastón Alemania
5 Mariela Uruguay
Personas
COUNT(Id) País
2 Argentina
2 Alemania
36
En la consulta hacemos un COUNT del ID de personas para saber cuántos hay, las agrupamos
por países para que nos muestre cuantas personas hay en cada país. Pero, con el HAVING le
decimos que nos muestre solo los resultados donde el COUNT sea mayor a 1, o en otras
palabras, mostramos los países que tienen más de una persona.
6. AS
La sentencia AS, le da un alias a una o la columna de una tabla, un nombre temporal. El alias
existe solo por la duración de la consulta.
Alumnos
1 Xavier Collado 24
2 Ana Gadea 15
3 Mariela Lima 20
Alumnos
Ana Gadea
Xavier Collado
Mariela Lima
Todas estas cláusulas / sentencias pueden ser usadas juntas, no es necesario que las usen
separadas.
37
7. ROUND
La sentencia round sirve para redondear los decimales de un número que se pida en un
select.
Empleados
AVG(Salario)
1325,55
Empleados
AVG(Salario)
1326
8. LIMIT
La cláusula LIMIT se utiliza para establecer un límite al número de resultados devueltos por
SQL.
Alumnos
1 Jerónimo Wiunkhaus 24
2 Ana Gadea 15
3 Mariela Lima 20
Alumnos
Nombre Apellido
Jerónimo Wiunkhaus
38
PCONSULTAS MULTITABLASP
Como habíamos dicho previamente en la teoría, estamos trabajando con base de datos
relacionales, esto significa que tenemos tablas relacionadas entre sí. Y dentro de esas tablas,
tenemos fila relacionadas con filas de otras tablas.
Pero ¿cómo hacemos para traer la información de una tabla y la información de la tabla con la que
está relacionada? Una sentencia muy útil para unificar información de tablas relacionales es el
JOIN.
SQL JOIN
La sentencia JOIN, se usa para combinar data o filas de dos o más tablas que tengan un campo en
común entre ellas. Usualmente es la llave foránea.
1. INNER JOIN
El INNER JOIN selecciona todas las filas que tengan un valor en común con la/s tabla/s. Si hay
una fila, que no tiene un valor en común con la otra tabla no la trae.
Profesores
1 Agustín Oviedo 24
2 Ana Gadea 15
3 Mariela Lima 20
4 Francisco Chirino 30
39
Teniendo la siguiente tabla de Cursos:
Cursos
Curso de
1 Programación 1000 1
Nombre Nombre_curso
Gracias al INNER JOIN, podemos mostrar todos los nombres de los profesores, junto al curso
que dan, nosotros decimos que son el profesor de ese curso, porque tienen asignado su id en
la tabla curso. Y como usamos el INNER JOIN, solo mostramos los profesores que tenían su id
en la tabla curso. Esto se por la condición que pusimos arriba en el ON, donde decíamos que
el valor a chequear por posible coincidencia era el id en la tabla profesor y el id_profesor en la
tabla curso.
2. LEFT JOIN
La sentencia LEFT JOIN retorna todos los registros de la tabla de la izquierda (tabla1) y todos
los registros con coincidencia de la tabla de la derecha (tabla2). Si no existe ninguna
coincidencia para alguna de las filas de la tabla de la izquierda, de igual forma todos los
resultados de la primera tabla se muestran.
40
Teniendo la siguiente tabla de profesores:
Profesores
1 Agustín Oviedo 24
2 Ana Gadea 15
3 Mariela Lima 20
4 Francisco Chirino 30
Cursos
Curso de
1 Programación 1000 1
Nombre Nombre_curso
Mariela NULL
Si nos fijamos en el resultado de la consulta, podemos ver que trajo todas las filas de la tabla
de la izquierda, in importar si las filas tenían coincidencia o no.
41
3. RIGHT JOIN
Esta sentencia es parecida a la anterior, pero le da prioridad a la tabla de la derecha.
Profesores
1 Agustín Oviedo 24
2 Ana Gadea 15
3 Mariela Lima 20
Cursos
1 Curso de 1000 1
Programación
2 Curso de 2000 2
Mecánica
Nombre Nombre_curso
Si nos fijamos en el resultado de la consulta, podemos ver que trajo todas las filas de la tabla
de la derecha, sin importar si las filas tenían coincidencia o no.
42
PSUBCONSULTASP
Una subconsulta en SQL consiste en utilizar los resultados de una consulta dentro de otra, que
se considera la principal. Esta posibilidad fue la razón original para la palabra “estructurada” en el
nombre Lenguaje de Consultas Estructuradas (Structured Query Language, SQL).
Anteriormente hemos utilizado la cláusula WHERE para seleccionar los datos que deseábamos
comparando un valor de una columna con una constante, o un grupo de ellas. Si los valores de
dichas constantes son desconocidos, normalmente por proceder de la aplicación de funciones a
determinadas columnas de la tabla, tendremos que utilizar subconsultas. Por ejemplo, queremos
saber la lista de empleados cuyo salario supere el salario medio.
Empleados
Salario Medio
256666,67
Empleados
Nombre Salario
Agustín 385000
Ana 608000
Esto estaría bien, pero, es porque primero buscamos el dato en una consulta y una vez que
conseguimos el dato, ahí hicimos la consulta. Pero, lo mejor sería que en vez de hacer dos
consultas usemos una subconsulta, para que al mismo tiempo que averiguamos el salario medio,
se calcule cuáles son los empleados que tienen un sueldo mayor a ese salario medio.
SELECT nombre, salario FROM Empleados WHERE > (SELECT AVG(salario) FROM
Empleados);
Empleados
Nombre Salario
Agustín 385000
Ana 608000
Esto nos daría el mismo resultado, pero sin la necesidad de hacer dos consultas para saber el
dato. Estos son los casos donde usaríamos una subconsulta, donde no sabíamos el salario medio
antes de hacer la consulta.
43
PEJERCICIOS DE APRENDIZAJEP
Para la realización de los ejercicios que se describen a continuación, es necesario descargar el
archivo scriptsBD.zip que contiene algunos scripts con las bases de datos sobre las cuales se va a
trabajar. En cada ejercicio se indica el nombre del script que se debe utilizar. Para abrir y ejecutar
los scripts van a encontrar un pdf de cómo hacerlo en Moodle, con el nombre de Tutorial Scripts
SQL.
VIDEOS: Te sugerimos ver los videos relacionados con este tema, antes de empezar los
ejercicios, los podrás encontrar en tu aula virtual o en nuestro canal de YouTube.
1. Abrir el script llamado “personal” y ejecutarlo de modo tal que se cree la base de datos
“personal”, se creen las tablas y se inserten todos los datos en las tablas para que quede de la
siguiente manera:
8. Obtener el nombre y cargo de todos los empleados, ordenados por salario de menor a
mayor.
9. Elabore un listado donde para cada fila, figure el alias ‘Nombre’ y ‘Cargo’ para las
respectivas tablas de empleados.
10. Listar los salarios y comisiones de los empleados del departamento 2000, ordenado
por comisión de menor a mayor.
44
11. Obtener el valor total a pagar que resulta de sumar el salario y la comisión de los
empleados del departamento 3000 una bonificación de 500, en orden alfabético del
empleado.
13. Listar el salario, la comisión, el salario total (salario + comisión) y nombre, de aquellos
empleados que tienen comisión superior a 1000.
14. Obtener un listado similar al anterior, pero de aquellos empleados que NO tienen
comisión.
15. Obtener la lista de los empleados que ganan una comisión superior a su sueldo.
16. Listar los empleados cuya comisión es menor o igual que el 30% de su sueldo.
18. Obtener los nombres de los departamentos que sean “Ventas” ni “Investigación” ni
‘Mantenimiento.
19. Ahora obtener los nombres de los departamentos que no sean “Ventas” ni
“Investigación” ni ‘Mantenimiento.
21. Mostrar el nombre del último empleado de la lista por orden alfabético.
22. Hallar el salario más alto, el más bajo y la diferencia entre ellos.
24. Hallar los departamentos que tienen más de tres empleados. Mostrar el número de
empleados de esos departamentos.
25. Mostrar el código y nombre de cada jefe, junto al número de empleados que dirige.
Solo los que tengan más de dos empleados (2 incluido).
27. Mostrar la lista de los empleados cuyo salario es mayor o igual que el promedio de la
empresa. Ordenarlo por departamento.
2. Abrir el script de la base de datos llamada “tienda.sql” y ejecutarlo para crear sus tablas e
insertar datos en las mismas. A continuación, generar el modelo de entidad relación. Deberá
obtener un diagrama de entidad relación igual al que se muestra a continuación:
45
A continuación, se deben realizar las siguientes consultas sobre la base de datos:
2. Lista los nombres y los precios de todos los productos de la tabla producto.
4. Lista los nombres y los precios de todos los productos de la tabla producto, redondeando
el valor del precio.
6. Lista el código de los fabricantes que tienen productos en la tabla producto, sin mostrar
los repetidos.
8. Lista los nombres de los productos ordenados en primer lugar por el nombre de forma
ascendente y en segundo lugar por el precio de forma descendente.
10. Lista el nombre y el precio del producto más barato. (Utilice solamente las cláusulas
ORDER BY y LIMIT)
11. Lista el nombre y el precio del producto más caro. (Utilice solamente las cláusulas ORDER
BY y LIMIT)
12. Lista el nombre de los productos que tienen un precio menor o igual a $120.
13. Lista todos los productos que tengan un precio entre $60 y $200. Utilizando el operador
BETWEEN.
14. Lista todos los productos donde el código de fabricante sea 1, 3 o 5. Utilizando el operador
IN.
15. Devuelve una lista con el nombre de todos los productos que contienen la cadena Portátil
en el nombre.
Consultas Multitabla
1. Devuelve una lista con el código del producto, nombre del producto, código del fabricante
y nombre del fabricante, de todos los productos de la base de datos.
2. Devuelve una lista con el nombre del producto, precio y nombre de fabricante de todos
los productos de la base de datos. Ordene el resultado por el nombre del fabricante, por
orden alfabético.
5. Devuelve una lista de todos los productos del fabricante Crucial que tengan un precio
mayor que $200.
6. Devuelve un listado con todos los productos de los fabricantes Asus, Hewlett-Packard.
Utilizando el operador IN.
46
7. Devuelve un listado con el nombre de producto, precio y nombre de fabricante, de todos
los productos que tengan un precio mayor o igual a $180. Ordene el resultado en primer
lugar por el precio (en orden descendente) y en segundo lugar por el nombre (en orden
ascendente)
Consultas Multitabla
Resuelva todas las consultas utilizando las cláusulas LEFT JOIN y RIGHT JOIN.
1. Devuelve un listado de todos los fabricantes que existen en la base de datos, junto con los
productos que tiene cada uno de ellos. El listado deberá mostrar también aquellos
fabricantes que no tienen productos asociados.
2. Devuelve un listado donde sólo aparezcan aquellos fabricantes que no tienen ningún
producto asociado.
1. Devuelve todos los productos del fabricante Lenovo. (Sin utilizar INNER JOIN).
2. Devuelve todos los datos de los productos que tienen el mismo precio que el producto
más caro del fabricante Lenovo. (Sin utilizar INNER JOIN).
4. Lista todos los productos del fabricante Asus que tienen un precio superior al precio
medio de todos sus productos.
1. Devuelve los nombres de los fabricantes que tienen productos asociados. (Utilizando IN o
NOT IN).
2. Devuelve los nombres de los fabricantes que no tienen productos asociados. (Utilizando
IN o NOT IN).
1. Devuelve un listado con todos los nombres de los fabricantes que tienen el mismo número
de productos que el fabricante Lenovo.
47
PEJERCICIOS DE APRENDIZAJE EXTRAP
Estos van a ser ejercicios para reforzar los conocimientos previamente vistos. Estos pueden
realizarse cuando hayas terminado la guía y tengas una buena base sobre lo que venimos
trabajando. Además, si ya terminaste la guía y te queda tiempo libre en las mesas, podes continuar
con estos ejercicios extra, recordando siempre que no es necesario que los termines para
continuar con el tema siguiente. Por último, recordá que la prioridad es ayudar a los compañeros
de la mesa y que cuando tengas que ayudar, lo más valioso es que puedas explicar el ejercicio
con la intención de que tu compañero lo comprenda, y no sólo mostrarlo. ¡Muchas gracias!
1. Abrir el script de la base de datos llamada “nba.sql” y ejecutarlo para crear todas las tablas e
insertar datos en las mismas. A continuación, generar el modelo de entidad relación. Deberá
obtener un diagrama de entidad relación igual al que se muestra a continuación:
2. Mostrar el nombre de los jugadores que sean pivots (‘C’) y que pesen más de 200 libras,
ordenados por nombre alfabéticamente.
5. Mostrar los equipos donde su ciudad empieza con la letra ‘c’, ordenados por nombre.
6. Mostrar todos los jugadores y su equipo ordenados por nombre del equipo.
7. Mostrar todos los jugadores del equipo “Raptors” ordenados por nombre.
9. Mostrar los puntos por partido del jugador ‘Pau Gasol’ en la temporada ’04/05′.
48
12. Mostrar el jugador que más puntos ha realizado en toda su carrera.
13. Mostrar el nombre del equipo, conferencia y división del jugador más alto de la NBA.
17. Mostrar los puntos de cada equipo en los partidos, tanto de local como de visitante.
2. Abrir el script de la base de datos llamada “jardineria.sql” y ejecutarlo para crear todas las
tablas e insertar datos en las mismas. Deberá obtener un diagrama de entidad relación igual al
que se muestra a continuación:
3. Devuelve un listado con el nombre, apellidos y email de los empleados cuyo jefe tiene un
código de jefe igual a 7.
49
4. Devuelve el nombre del puesto, nombre, apellidos y email del jefe de la empresa.
5. Devuelve un listado con el nombre, apellidos y puesto de aquellos empleados que no sean
representantes de ventas.
7. Devuelve un listado con los distintos estados por los que puede pasar un pedido.
8. Devuelve un listado con el código de cliente de aquellos clientes que realizaron algún pago
en 2008. Tenga en cuenta que deberá eliminar aquellos códigos de cliente que aparezcan
repetidos. Resuelva la consulta:
9. Devuelve un listado con el código de pedido, código de cliente, fecha esperada y fecha de
entrega de los pedidos que no han sido entregados a tiempo.
10. Devuelve un listado con el código de pedido, código de cliente, fecha esperada y fecha de
entrega de los pedidos cuya fecha de entrega ha sido al menos dos días antes de la fecha
esperada.
11. Devuelve un listado de todos los pedidos que fueron rechazados en 2009.
12. Devuelve un listado de todos los pedidos que han sido entregados en el mes de enero de
cualquier año.
13. Devuelve un listado con todos los pagos que se realizaron en el año 2008 mediante Paypal.
Ordene el resultado de mayor a menor.
14. Devuelve un listado con todas las formas de pago que aparecen en la tabla pago. Tenga en
cuenta que no deben aparecer formas de pago repetidas.
15. Devuelve un listado con todos los productos que pertenecen a la gama Ornamentales y que
tienen más de 100 unidades en stock. El listado deberá estar ordenado por su precio de
venta, mostrando en primer lugar los de mayor precio.
16. Devuelve un listado con todos los clientes que sean de la ciudad de Madrid y cuyo
representante de ventas tenga el código de empleado 11 o 30.
2. Muestra el nombre de los clientes que hayan realizado pagos junto con el nombre de sus
representantes de ventas.
3. Muestra el nombre de los clientes que no hayan realizado pagos junto con el nombre de
sus representantes de ventas.
4. Devuelve el nombre de los clientes que han hecho pagos y el nombre de sus representantes
junto con la ciudad de la oficina a la que pertenece el representante.
5. Devuelve el nombre de los clientes que no hayan hecho pagos y el nombre de sus
representantes junto con la ciudad de la oficina a la que pertenece el representante.
50
6. Lista la dirección de las oficinas que tengan clientes en Fuenlabrada.
7. Devuelve el nombre de los clientes y el nombre de sus representantes junto con la ciudad
de la oficina a la que pertenece el representante.
8. Devuelve un listado con el nombre de los empleados junto con el nombre de sus jefes.
9. Devuelve el nombre de los clientes a los que no se les ha entregado a tiempo un pedido.
10. Devuelve un listado de las diferentes gamas de producto que ha comprado cada cliente.
Resuelva todas las consultas utilizando las cláusulas LEFT JOIN, RIGHT JOIN, JOIN.
1. Devuelve un listado que muestre solamente los clientes que no han realizado ningún pago.
2. Devuelve un listado que muestre solamente los clientes que no han realizado ningún
pedido.
3. Devuelve un listado que muestre los clientes que no han realizado ningún pago y los que
no han realizado ningún pedido.
4. Devuelve un listado que muestre solamente los empleados que no tienen una oficina
asociada.
5. Devuelve un listado que muestre solamente los empleados que no tienen un cliente
asociado.
6. Devuelve un listado que muestre los empleados que no tienen una oficina asociada y los
que no tienen un cliente asociado.
8. Devuelve las oficinas donde no trabajan ninguno de los empleados que hayan sido los
representantes de ventas de algún cliente que haya realizado la compra de algún producto
de la gama Frutales.
9. Devuelve un listado con los clientes que han realizado algún pedido, pero no han realizado
ningún pago.
10. Devuelve un listado con los datos de los empleados que no tienen clientes asociados y el
nombre de su jefe asociado.
Consultas resumen
4. ¿Cuántos pedidos hay en cada estado? Ordena el resultado de forma descendente por el
número de pedidos.
5. Calcula el precio de venta del producto más caro y más barato en una misma consulta.
8. ¿Calcula cuántos clientes tiene cada una de las ciudades que empiezan por M?
51
10. Calcula el número de clientes que no tiene asignado representante de ventas.
11. Calcula la fecha del primer y último pago realizado por cada uno de los clientes. El listado
deberá mostrar el nombre y los apellidos de cada cliente.
12. Calcula el número de productos diferentes que hay en cada uno de los pedidos.
13. Calcula la suma de la cantidad total de todos los productos que aparecen en cada uno de
los pedidos.
14. Devuelve un listado de los 20 productos más vendidos y el número total de unidades que
se han vendido de cada uno. El listado deberá estar ordenado por el número total de
unidades vendidas.
15. La facturación que ha tenido la empresa en toda la historia, indicando la base imponible, el
IVA y el total facturado. La base imponible se calcula sumando el coste del producto por el
número de unidades vendidas de la tabla detalle_pedido. El IVA es el 21 % de la base
imponible, y el total la suma de los dos campos anteriores.
16. La misma información que en la pregunta anterior, pero agrupada por código de producto.
17. La misma información que en la pregunta anterior, pero agrupada por código de producto
filtrada por los códigos que empiecen por OR.
18. Lista las ventas totales de los productos que hayan facturado más de 3000 euros. Se
mostrará el nombre, unidades vendidas, total facturado y total facturado con impuestos (21%
IVA)
2. Devuelve el nombre del producto que tenga el precio de venta más caro.
3. Devuelve el nombre del producto del que se han vendido más unidades. (Tenga en cuenta
que tendrá que calcular cuál es el número total de unidades que se han vendido de cada
producto a partir de los datos de la tabla detalle_pedido. Una vez que sepa cuál es el código
del producto, puede obtener su nombre fácilmente.)
4. Los clientes cuyo límite de crédito sea mayor que los pagos que haya realizado. (Sin utilizar
INNER JOIN).
7. Devuelve el nombre, los apellidos y el email de los empleados que están a cargo de Alberto
Soria.
2. Devuelve el nombre del producto que tenga el precio de venta más caro.
2. Devuelve un listado que muestre solamente los clientes que no han realizado ningún pago.
3. Devuelve un listado que muestre solamente los clientes que sí han realizado ningún pago.
52
4. Devuelve un listado de los productos que nunca han aparecido en un pedido.
1. Devuelve un listado que muestre solamente los clientes que no han realizado ningún
pago.
2. Devuelve un listado que muestre solamente los clientes que sí han realizado ningún pago.
4. Devuelve un listado de los productos que han aparecido en un pedido alguna vez.
3. Importar el script de la base de datos llamada “pokemondb.sql” y ejecutarlo para crear todas
las tablas e insertar los registros en las mismas. A continuación, generar el modelo de entidad
relación y reorganizar las tablas para mayor claridad de sus relaciones. Deberá obtener un
diagrama de entidad de relación similar al que se muestra a continuación:
4. Mostrar los pokemon de tipo agua, fuego o tierra ordenados por tipo.
6. Mostrar los pokemon con una estadística base de ps mayor que 200.
53
10. Mostrar el pokemon más pesado.
14. Mostrar todos los movimientos que causan daño, ordenados alfabéticamente por nombre.
16. Mostrar todos los movimientos que aprende pikachu por MT (tipo de aprendizaje).
17. Mostrar todos los movimientos de tipo normal que aprende pikachu por nivel.
18. Mostrar todos los movimientos de efecto secundario cuya probabilidad sea mayor al 30%.
54
BIBLIOGRAFÍA
Información sacada de las páginas:
- https://www.oracle.com/ar/database/what-is-a-relational-database/
- https://www.geeksforgeeks.org/sql-tutorial/
- https://count.co/blog/posts/take-your-sql-from-good-to-great-part-3
- https://jorgesanchez.net/
- https://bookdown.org/paranedagarcia/database/modelo-relacional.html
- https://www.datacentric.es/
55