7 - Guía MySQL
7 - Guía MySQL
BASE DE DATOS
Una base de datos es una colección organizada de información estructurada, o datos, típicamente
almacenados electrónicamente en un sistema de computadora. Una base de datos es usualmente
controlada por un sistema de gestión de base de datos (DBMS). En conjunto, los datos y el DBMS,
junto con las aplicaciones que están asociados con ellos, se conocen como un sistema de base de datos,
que a menudo se reducen a solo base de datos.
Los datos dentro de los tipos más comunes de bases de datos en funcionamiento hoy en día se modelan
típicamente en filas y columnas en una serie de tablas para que el procesamiento y la consulta de datos
sean eficientes. Luego se puede acceder, administrar, modificar, actualizar, controlar y organizar fácilmente
los datos. La mayoría de las bases de datos utilizan lenguaje de consulta estructurado (SQL) para escribir y
consultar datos.
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 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. Los datos sobre los productos se almacenarán en su propia tabla y los datos sobre las sucursales
se almacenarán en otra tabla. Este proceso se denomina normalización.
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, 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. Vamos a ver una tabla de Empleado:
Nombre de la tabla.
Fila / Registro:
Cada una de las
Filas tiene un empleado distinto.
1
• Cómo se almacenan y manipulan los datos
Las hojas de cálculo se diseñaron originalmente para un usuario, y sus características lo reflejan. Son muy
buenas para un solo usuario o un pequeño número de usuarios que no necesitan manipular una gran
cantidad de datos complicados. Las bases de datos, por otro lado, están diseñadas para contener
colecciones mucho más grandes de información organizada, cantidades masivas en ocasiones. 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.
• 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.
• Menor redundancia. Un mismo dato no se encuentra almacenado en múltiples archivos o con múltiples
esquemas distintos, sino en una única instancia en la base de datos. Esto redunda en menor volumen
de datos y mayor rapidez de acceso.
• 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 orientadas a objetos: La información en una base de datos orientada a objetos se
representa en forma de objetos, como en la programación orientada a objetos.
• Bases de datos NoSQL: Una NoSQL, 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 más complejas.
2
BASE DE DATOS RELACIONALES
Las bases de datos relacionales se basan en el modelo relacional, una forma intuitiva y directa de
representar datos en tablas. En una base de datos relacional, cada fila de la tabla es un registro con un ID
único llamado clave. Las columnas de la tabla contienen atributos de los datos, y cada registro
generalmente tiene un valor para cada atributo, lo que facilita el establecimiento de las relaciones entre
los puntos de datos.
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 entrada veremos algunos).
MODELO RELACIONAL
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.
Su idea fundamental es el uso de relaciones. Estas relaciones podrían considerarse en forma lógica como
conjuntos de datos llamados 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 si fuese 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 esta basado en que todos los datos están almacenados en tablas (entidades/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.
3
• No hay dos atributos que se llamen igual.
• El orden de los atributos no importa: los atributos no están ordenados.
Nombre de la tabla.
Atributos
Tuplas
Un Atributo en el Modelo Relacional representa una propiedad que posee esa tabla y equivale al atributo
del Modelo E-R.
En el caso de que sean varios los atributos de una misma tabla, definidos sobre el mismo dominio, habrá
que darles nombres distintos, ya que una tabla no puede tener dos atributos con el mismo nombre.
Por ejemplo, la información de los estudiantes de un curso se representa mediante la tabla Estudiantes,
que tiene columnas para los atributos id_estudiantes, 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.
4
• Un domino es un conjunto finito de valores del mismo tipo. Distintos tipos de dominios son:
enteros, cadenas de texto, fecha, etc.
TUPLAS
Filas de una tabla que contiene valores para cada uno de los atributos (equivale a los registros). Ejemplo:
34563, José, Martinez, 19, Masculino. Representa un objeto único de datos implícitamente estructurados
en una tabla. Un registro es un conjunto de campos que contienen los datos que pertenecen a una misma
entidad.
CLAVES
Campo cuyo valor es único para cada registro. Primaria, identifica una tabla, y Foránea. Ejemplo: id
estudiante.
CLAVE PRIMARIA
Se denomina clave primaria o identificador único o llave principal a uno o más atributos que identifican
unívocamente cada instancia de un registro; es conocido también como "clave candidata".
Una base de datos relacional está diseñada para imponer la exclusividad de las claves primarias
permitiendo que haya sólo una fila con un valor de clave primaria específico en una tabla. Es decir, nunca
puede existir dos instancias de un registro con el mismo valor de su atributo primario .
El o los atributos identificadores se señalan con el símbolo "@"(arroba), o de lo contrario con la sigla PK
(clave primaria).
Para mejorar el desempeño de la base de datos se recomienda utilizar claves primarias numéricas; por lo
tanto, si una tabla no posee un atributo identificador numérico, se debería agregar un atributo,
comúnmente llamado id (abreviación de identificador) seguido por el nombre de la tabla. Por ejemplo:
id_estudiante o si existe un atributo propio de una tabla que no se va a repetir puede ser ese, como
documento.
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.
5
CLAVE FORANEA
Una clave foránea o llave foránea es una columna o un conjunto de columnas en 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 poder añadir una fila con un valor de clave foránea específico, debe existir una fila
en la tabla relacionada con el mismo tipo de valor de clave primaria.
La relación entre 2 tablas coincide con la clave primaria en una de las tablas con una clave foránea en la
segunda tabla. Por ejemplo, si tenemos las tablas profesor y curso, para relacionarlas, tendríamos una
clave foránea de la clave primaria de un profesor como columna en la tabla curso. De esta manera se dice
que ese profesor pertenece a ese curso.
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, tiene el id 1 del profesor Agustín, por lo que, seria correcto decir que
Agustín es el Profesor del Curso de Programación.
RELACIONES
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ículas) y PaisDeOrigen (tabla PaisesDeOrigen).
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.
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).
6
Relaciones uno a uno
Se presentan cuando un registro de una tabla sólo está relacionado con un registro de otra tabla, y
viceversa.
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.
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.
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. El ticket de las compras del supermercado, un cliente
puede comprar varios productos y al mismo tiempo un producto puede ser comprado por varios clientes.
Las tablas se verían así:
7
Tabla Intermedia:
DIAGRAMAS EER
Los diagramas de relación de entidades (EER) 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í:
8
Teniendo en cuenta estas líneas vamos a mostrar como serían las relaciones previamente vistas:
9
¿QUÉ ES EL SOFTWARE DE BASE DE DATOS?
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 software de base de datos simplifica la gestión de la información al permitirles a los usuarios almacenar
datos en una forma estructurada y luego, acceder a ellos. Por lo general, tiene una interfaz gráfica para
ayudar a crear y administrar los datos y, en algunos casos, los usuarios pueden crear sus propias bases
de datos mediante el software de base de datos.
Algunos ejemplos de software de bases de datos o DBMS populares incluyen MySQL, Microsoft Access,
Microsoft SQL Server, FileMaker Pro, Oracle Database y dBASE.
Tiene capacidad de hacer cálculos avanzados y álgebra. Es utilizado en la mayoría de empresas que
almacenan datos en una base de datos. Ha sido y sigue siendo el lenguaje de programación más usado para
bases de datos relacionales.
10
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.
• ALTER: Modifica las tablas agregando campos o cambiando la definición de los campos.
2. Lenguaje de Manipulación de Datos (DML): permiten generar consultas para ordenar, filtrar y extraer
datos de la base de datos.
Insertar en las filas los datos a las diferentes tablas, sin violar la
3 integridad de los datos. Sentencia SQL →
INSERT INTO
11
Dar nombre a las consultas, elaboradas en el paso No.6 cuando
se requiera ocultar el diseño y columnas de las tablas a través
7 de la creación de vistas lógicas. Sentencia SQL → CREATE VIEW
CONSULTAS SQL
Estas son las consultas que vamos a escribir en nuestro software de base de datos para crear, actualizar,
borrar, acceder y manipular información de nuestra base de datos.
CONSULTAS DE CREACIÓN
1. CREATE DATABASE
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] nombre_base_datos
• 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
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] nombre_de_tabla ( campo1
tipo dato [NULL/NOT NULL] | CHECK (expresiónLógica) | [ DEFAULT
expresiónConstante],
campo2 tipo dato [NULL/NOT NULL] | CHECK (expresiónLógica) | [
DEFAULT expresiónConstante ], campo-N,
PRIMARY KEY(campo_llave),
FOREIGN KEY (campo_llave) REFERENCES tabla2 (campo_llave-tabla2))
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: Especifica los valores de datos que son aceptables para actualizar una columna y que
están basados en valores de datos localizados en una columna de otra tabla.
12
Tipo: Integridad de Entidad o Tabla
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.
• UNIQUE: Con esta restricción se previene la duplicación de valores en columnas que tienen valor
único y que no son llave primaria pero que pueden ser una llave alternativa o candidata para el
futuro. Asegura que se cree (Por parte del DBMS) un índice para mejorar el desempeño. Y al igual
que las llaves primarias, no se le está permitido que se introduzcan valores nulos.
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
Modificación de Tablas
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
• RENAME TO nuevo_nombre
13
• DROP [COLUMN] nombre_atributo
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.
• Eliminar la definición de: llave primaria, foránea o restricciones de ligaduras de integridad (check),
existentes para una tabla. Esta acción no elimina a la columna con sus valores, ella permanece tal cual
como está, solo se elimina su definición.
• 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.
3. 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.
4. UPDATE
El comando UPDATE se utiliza para modificar los valores de atributo de una o más filas seleccionadas.
Una cláusula WHERE en el comando UPDATE selecciona las filas de una tabla que se van a modificar.
La sentencia UPDATE tiene la siguiente forma:
UPDATE nombre_tabla
SET nombre_columna1 = valor1,
nombre_columna2 = valor2, [ORDER
BY ...] [WHERE condicion]
5. 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.
14
• 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.
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.
1 Agustín Cocco 24
2 Martin Bullón 21
Nombre Apellido
Agustín Cocco
Martin Bullón
15
Para mostrar todos los datos de una tabla usamos el símbolo (*). Esto nos mostraría la primera tabla.
También en las consultas SELECT podemos hacer operaciones matemáticas entre los datos numéricos
de las tablas que elijamos. Usualmente ponemos estas operaciones entre paréntesis para separar la
operación del resto de la consulta.
Nombre (salario+comision)
Agustín 5300
Martin 2250
En este ejemplo hacemos una suma pero podemos hacer una resta (-), una multiplicación (*) y una
división (/), también podemos poner agregarle números a nuestras operaciones.
Nombre (salario+comisión-200)
Agustín 5100
Martin 2050
A la consulta SELECT le podemos sumar clausulas 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:
7. SELECT DISTINCT
El SELECT DISTINCT se utiliza cuando queremos traer solo registros diferentes. En las tablas a veces
pueden haber valor repetidos, para evitarlos usamos esta sentencia.
16
SELECT DISTINCT nombres de las columnas FROM tablaOrigen;
Alumnos
1 Agustín Cocco 24
2 Martin Bullón 21
3 Agustín Cocco 1
Nombre Apellido
Agustín Cocco
Martin Bullón
8. 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.
En este ejemplo traerá todos los alumnos con nombre Agustín. Nótese que el nombre está en comillas
dobles, esto es porque si vamos a poner una cadena en la condición debe estar entre comillas dobles,
si fuese un numero no seria necesario.
1 Agustín Cocco 24
2 Martin Bullón 21
17
El resultado que mostraría sería:
Alumnos
Nombre Apellido
Agustín Cocco
En las condiciones WHERE podemos utilizar operadores lógicos, operadores relaciones operadores
propios de SQL.
18
Operadores Relacionales
Operador Significado Ejemplo
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
Operador Significado Ejemplo
Los operadores lógicos sirven para filtrar resultados basados en más de una condición. Operadores
propios de SQL
a) BETWEEN
El operador BETWEEN selecciona valores dentro de un rango determinado. Los valores pueden ser números,
texto o fechas.
19
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:
Id Nombre Apellido Edad
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 clausula WHERE. Es un atajo
para no escribir varias condiciones OR.
Usamos nombre pero puede ser cualquier valor numérico o valor de tipo cadena.
2 Martin Bullon 15
20
3 Mariela Lima 20
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 guion bajo (_) para representar un
carácter. Estos signos se pueden utilizar por separado o juntos.
Esa consulta, lo que hace es traer todos los alumnos donde el nombre empiece con el carácter s.
1 Sebastián Gómez 24
2 Sabrina Martínez 15
3 Mariela Lima 20
El resultado que mostraría sería:
Id Nombre Apellido Edad
1 Sebastián Gómez 24
2 Sabrina Martínez 15
21
WHERE nombre LIKE Encuentra cualquier nombre que
‘%ar%’ tenga “ar” en cualquier posición.
9. ORDER BY
La clausula 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.
En este caso mostraría los resultados ordenados de manera ascendiente, según el nombre de los
alumnos.
Alumnos
1 Jerónimo Wiunkhaus 24
2 Ana Gadea 15
3 Mariela Lima 20
Alumnos
22
2 Ana Gadea 15
1 Jerónimo Wiunkhaus 24
3 Mariela Lima 20
10. 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 enunciado 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 repetidas. Esta cláusula puede
omitirse.
23
¿QUE SON LAS FUNCIONES DE AGREGACIÓN?
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.
Existen 5 tipos de funciones de agregación, MAX(), MIN(), COUNT(), SUM(), AVG(). a) MAX
MAX(Salario)
2000
b) MIN
24
Teniendo la siguiente tabla de empleados:
Id Nombre Apellido Salario
MIN(Salario)
1000
c) AVG
AVG(Salario)
1325
d) COUNT
25
Teniendo la siguiente tabla de empleados:
Id Nombre Apellido Salario
En este caso ponemos el id, para saber cuantos 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.
Id Nombre Apellido Salario
COUNT(Id)
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.
26
4 Mariela 2000 350
El resultado de la consulta, muestra que agrupa todos los nombre repetidos bajo un solo nombre y el
salario es la suma de los salarios de las filas que fueron agrupadas.
Id Nombre País
1 Franco Argentina
2 Juliana Alemania
3 Agustín Argentina
COUNT(Id) País
2 Argentina
1 Alemania
En la consulta hacemos un count del id de personas para saber cuantos hay, pero al agrupar el resultado
por países, nos muestra cuantas personas hay en cada país.
11. HAVING
Esta clausula 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.
27
HAVING COUNT(ID) > 1;
Teniendo la siguiente tabla de personas:
Personas
Id Nombre País
1 Franco Argentina
2 Juliana Alemania
3 Agustín Argentina
4 Gastón Alemania
5 Mariela Uruguay
COUNT(Id) País
2 Argentina
2 Alemania
En la consulta hacemos un COUNT del ID de personas para saber cuantos 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.
12. 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.
1 Jerónimo Wiunkhaus 24
2 Ana Gadea 15
3 Mariela Lima 20
28
El resultado que mostraría sería:
Alumnos
Ana Gadea
Jerónimo Wiunkhaus
Mariela Lima
Todas estas clausulas / sentencias pueden ser usadas juntas, no es necesario que las usen separadas.
13. ROUND
Las sentencia round sirve para redondear los decimales de un numero que se pida en un select.
AVG(Salario)
1325,55
SELECT ROUND(AVG(salario)) FROM Empleados;
Empleados
AVG(Salario)
1326
14. LIMIT
La cláusula LIMIT se utiliza para establecer un límite al número de resultados devueltos por SQL.
29
Alumnos
1 Jerónimo Wiunkhaus 24
2 Ana Gadea 15
3 Mariela Lima 20
Nombre Apellido
Jerónimo Wiunkhaus
CONSULTAS MULTITABLAS
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, ¿como 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.
30
Teniendo la siguiente tabla de profesores:
Profesores
1 Agustín Oviedo 24
2 Ana Gadea 15
3 Mariela Lima 20
4 Francisco Chirino 30
Curso de Programación
1 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.
31
SELECT nombre/s de la/s columna/s FROM tabla1 LEFT JOIN tabla2 ON
tabla1.nombre_columna = tabla2.nombre_columna;
1 Agustín Oviedo 24
2 Ana Gadea 15
3 Mariela Lima 20
4 Francisco Chirino 30
Curso de Programación
1 1000 1
Nombre Nombre_curso
Mariela NULL
32
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.
3. RIGHT JOIN
Esta sentencia es parecida a la anterior pero le da prioridad al tabla de la derecha.
1 Agustín Oviedo 24
2 Ana Gadea 15
3 Mariela Lima 20
4 Francisco Chirino 30
Curso de Programación
1 1000 1
Nombre Nombre_curso
33
NULL Curso de Natación
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.
SUBCONSULTAS
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.
256666,67
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 cuales 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
34
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.
EJERCICIOS DE APRENDIZAJE
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 como 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 “superhéroes” y ejecutarlo de modo tal que se cree la base de datos y todas sus
tablas. Posteriormente, crear las tablas que se muestran en el siguiente modelo de entidad relación:
Tabla creador
Tabla personajes
35
Una vez insertados todos los registros realizar una selección de todos los atributos para corroborar que
la tablas se encuentren completas.
b) Cambiar en la tabla personajes el año de aparición a 1938 del personaje Superman. A continuación,
realizar un listado de toda la tabla para verificar que el personaje haya sido actualizado.
c) El registro que contiene al personaje Flash. A continuación, mostrar toda la tabla para verificar que
el registro haya sido eliminado.
2. Abrir el script llamado “personal-inserts” 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:
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.
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.
36
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.
3. 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:
2. Lista los nombres y los precios de todos los productos de la tabla producto.
37
4. Lista los nombres y los precios de todos los productos de la tabla producto, redondeando el valor
del precio.
10. Lista el código de los fabricantes que tienen productos en la tabla producto, sin mostrar los
repetidos.
12. 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.
13. Devuelve una lista con las 5 primeras filas de la tabla fabricante.
14. Lista el nombre y el precio del producto más barato. (Utilice solamente las cláusulas ORDER BY y
LIMIT)
15. Lista el nombre y el precio del producto más caro. (Utilice solamente las cláusulas ORDER BY y
LIMIT)
16. Lista el nombre de los productos que tienen un precio menor o igual a $120.
17. Lista todos los productos que tengan un precio entre $60 y $200. Utilizando el operador BETWEEN.
18. Lista todos los productos donde el código de fabricante sea 1, 3 o 5. Utilizando el operador IN.
23. 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.
3. Devuelve el nombre del producto, su precio y el nombre de su fabricante, del producto más barato.
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, HewlettPackard. Utilizando el
operador IN.
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.
38
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 un listado con todos los nombres de los fabricantes que tienen el mismo número de
productos que el fabricante Lenovo.
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:
39
A continuación, se deben realizar las siguientes consultas sobre la base de datos:
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′.
13. Mostrar el nombre del equipo, conferencia y división del jugador más alto de la NBA.
15. Mostrar el partido o partidos (equipo_local, equipo_visitante y diferencia) con mayor diferencia de
puntos.
17. Mostrar los puntos de cada equipo en los partidos, tanto de local como de visitante.
18. Mostrar quien gana en cada partido (codigo, equipo_local, equipo_visitante, equipo_ganador), en
caso de empate sera null.
40
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.
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.
41
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: o Utilizando la función YEAR de MySQL. o Utilizando la función
DATE_FORMAT de MySQL. o Sin utilizar ninguna de las funciones anteriores.
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.
42
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.
Consultas multitabla (Composición externa)
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?
9. Devuelve el nombre de los representantes de ventas y el número de clientes al que atiende cada
uno.
43
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).
5. Devuelve el producto que más unidades tiene en stock.
6. Devuelve el producto que menos unidades tiene en stock.
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.
1. Devuelve el nombre, apellido1 y cargo de los empleados que no representen a ningún cliente.
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.
44
5. Devuelve el nombre, apellidos, puesto y teléfono de la oficina de aquellos empleados que no sean
representante de ventas de ningún cliente.
Subconsultas con EXISTS y NOT EXISTS
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:
45
8. Mostrar aquellos pokemon que evolucionan por intercambio.
9. Mostrar el nombre del movimiento con más prioridad.
10. Mostrar el pokemon más pesado.
11. Mostrar el nombre y tipo del ataque con más potencia.
12. Mostrar el número de movimientos de cada tipo.
13. Mostrar todos los movimientos que puedan envenenar.
14. Mostrar todos los movimientos que causan daño, ordenados alfabéticamente por nombre.
15. Mostrar todos los movimientos que aprende pikachu.
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%.
19. Mostrar todos los pokemon que evolucionan por piedra. 20. Mostrar todos los pokemon que no
pueden evolucionar.
21. Mostrar la cantidad de los pokemon de cada tipo.
46
Bibliografía
Información sacada de las paginas:
- 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://bookdown.org/paranedagarcia/database/modelo-relacional.html
- https://styde.net/relaciones-entre-tablas-de-bases-de-datos/
47