Consultas SQL
Listar todos los empleados registrados en la base de datos.
Select firstName, lastName
From employees
____________________________________________________________________________
Listar la ciudad, teléfono y código postal de las oficinas ubicadas en
“USA”.
select phone, city, postalCode
from offices
Where country = 'USA';
____________________________________________________________________________
Listar los pedidos con estado enviado (Shipped) cuya fecha de pedido
fue posterior al 1 de enero de 2005.
select status, shippedDate
from orders
Where status = 'Shipped'and shippedDate > '01-01-2003';
___________________________________________________________________________
Listar los pedidos con estado enviado (Shipped) cuya fecha de
pedido fue posterior al 1 de enero de 2005 y de los pedidos con
estado cancelado cuya fecha de pedido fue anterior al 2004.
select status, shippedDate
from orders
Where (status = 'Shipped' and shippedDate > '01-01-2005') or (status = 'Cancelled' and shippedDate < '01-01-2004')
__________________________________________________________________________
Listar id y apellido de los empleados que tienen el cargo de
vendedor (Sales Rep), pero que pertenecen a las oficinas 2 o 5.
FROM employees
WHERE (jobtitle = 'Sales Rep' AND (officecode = '2' OR officecode = '5'))
_________________________________________________________________________
Listar los diferentes cargos existentes en la base de datos
SELECT distinct jobTitle
FROM employees
_________________________________________________________________________
Listar los diferentes nombres registrados en la base de datos como
contactos del cliente.
SELECT distinct contactFirstName, contactLastName
FROM customers
_________________________________________________________________________
Listar número y fecha de los pedidos de las que no se conoce su
descripción.
SELECT orderNumber, orderDate
FROM orders
where orderNumber isNull and orderDate isNull
_________________________________________________________________________
Listar los empleados que no tienen un jefe asignado
select firstName, lastName, reportsTo
from employees
where reportsTo isNull
_________________________________________________________________________
Obtener un listado con los códigos de pedidos que tienen
descripción.
select orderNumber, comments
from orders
where comments notnull
________________________________________________________________________
Obtener un listado de los pagos registrados durante el año 2004
select paymentDate, amount
from payments
where paymentDate between '01-01-2004' and '31-12-2004'
________________________________________________________________________
Obtener un listado con el numero de pedidos, código de productos
y precio cuyo precio de venta fue superior 130 USD pero que no
excedieron los 140 USD.
select orderNumber, productCode, priceEach
from orderdetails
where priceeach between '130' and '140'
_______________________________________________________________________
Listar los diferentes apellidos de registrados inicien con la letra S
select distinct lastName
from employees
where lastName like 'S%'
_______________________________________________________________________
Listar los nombres de los clientes que contengan alguna x en su
nombre
select contactFirstName
from customers
where contactFirstName like '%x%'
_______________________________________________________________________
Listar los nombres de los empleados cuyo nombre tenga una t como
segundo o tercer caracter
select firstName
from employees
where firstName like '_t%' or firstName like '__t%'
_______________________________________________________________________
Listar el nombre completo de los empleados que tienen como jefe
inmediato a los empleados 1102, 1108 o 1002
select firstName, lastName, reportsTo
from employees
where reportsTo in (1102, 1108, 1002)
_______________________________________________________________________
Generar un listado con los nombres y apellidos de los empleados
que han sido vendedores de los clientes de Japón, Hong Kong o Sur
Africa.
SELECT firstname,lastname
FROM employees
WHERE employeenumber in (
SELECT salesrepemployeenumber
FROM customers
WHERE country = 'Hong Kong' OR country = 'South Africa' OR country = 'Japan')
_______________________________________________________________________
Listar nombres de los clientes que han hecho pagos por un monto
superior a 90000 USD
select contactFirstName, contactLastName, customerNumber
from customers
where customernumber in (select customerNumber
from payments
where amount > '90000');
_______________________________________________________________________
Listar alfabéticamente los clientes registrados en la base de datos.
select contactFirstName, contactLastName
from customers
order by contactLastName, contactFirstName
_______________________________________________________________________
Generar un listado de los pedidos, ordenado alfabéticamente por
estado, mostrando los más recientes primero.
select status, orderDate
from orders
order by status, orderDate desc
_______________________________________________________________________
Calcular la cantidad de clientes registrados en la base de datos.
select count(contactFirstName)
from customers
_______________________________________________________________________
Calcular la cantidad de pagos que ha hecho el cliente 237
select count(amount)
from payments
where customerNumber = '237'
_______________________________________________________________________
Calcular la cantidad de pagos que ha hecho el cliente ANG Resellers
select count(amount)
from payments
where customerNumber in(
select customerNumber
from customers
where customerName = 'ANG Resellers')
________________________________________________________________________
Calcular el valor pagado por clientes en el segundo semestre de
2004.
SELECT SUM(amount)
FROM Payments
WHERE customerNumber IN (
SELECT customerNumber
FROM Orders
WHERE orderDate >= '2004-07-01' AND orderDate <= '2004-12-31')
________________________________________________________________________
Encontrar la fecha del pedido más reciente registrado.
select max(orderDate)
from orders
________________________________________________________________________
Encontrar la fecha del pedido más reciente registrado que ha sido
incluido productos de la línea de aviones (planes).
select max(orderDate)
from orders
where orderNumber in(
select orderNumber
from orderdetails
where productCode in(
select productCode
from products
where productLine = 'Planes'))
________________________________________________________________________
Calcular el valor promedio de los pagos que ha hecho el cliente 311
select avg(amount)
from payments
where customerNumber = '311'
________________________________________________________________________
Calcular la cantidad de empleados que tiene cada oficina
SELECT officeCode, COUNT(employeeNumber)
FROM Employees
GROUP BY officeCode
________________________________________________________________________
Encontrar la fecha de pedido más antiguo por cada estado de pedido.
select status, min(orderDate)
from orders
Group by status
Calcular el valor promedio de los pagos de cada cliente de USA, Francia
y Canadá.
SELECT customerNumber, AVG(amount)
FROM Payments
WHERE customerNumber IN (
SELECT customerNumber
FROM Customers
WHERE country IN ('USA', 'France', 'Canada'))
GROUP BY customerNumber
________________________________________________________________________
Listar, en orden descendente, la cantidad de pedidos que ha hecho
cada cliente.
SELECT customerNumber, COUNT(orderNumber) as cantidad
FROM Orders
GROUP BY customerNumber
ORDER BY cantidad DESC
_________________________________________________________________________
Calcular la cantidad de productos por cada línea de producto,
siempre y cuando esta cantidad sea inferior a 12.
select productline, count(*) as productos
from products
group by productline
having count (*)< 12
Generar un listado descendente con el valor promedio de los pagos
de cada cliente siempre y cuando este valor sea superior a 60 mil
dólares.
select customerNumber, avg(amount)
from payments
group by customerNumber
having avg(amount) > '60000'
order by avg(amount) desc
___________________________________________________________________________
Generar un listado con el nombre del cliente junto con Número,
Apellidos y Nombres de su vendedor asignado.
select firstName, lastName, employeeNumber, customerName
from employees, customers
where employeeNumber = SalesRepEmployeeNumber
___________________________________________________________________________
Generar una lista alfabética con los empleados y los datos de la
oficina a la que están asignados.
select firstName, lastName, [Link], [Link] city, phone, [Link], country
from employees, offices
where [Link] = [Link]
order by lastName, firstName desc
___________________________________________________________________________
Generar un listado con el nombre y ciudad del cliente, junto con la
ciudad en la que se encuentra ubicado su vendedor asignado.
select customerName, [Link], employeeNumber, SalesRepEmployeeNumber, [Link], [Link], [Link]
from customers, employees, offices
where salesRepEmployeeNumber = employeeNumber and [Link] = [Link]
___________________________________________________________________________
Generar un listado con el nombre del cliente junto con Número,
Apellidos y Nombres de su vendedor asignado.
select customerName, salesRepEmployeeNumber, employeeNumber, firstName, lastName
from customers inner join employees on
salesRepEmployeeNumber = employeeNumber
___________________________________________________________________________
Generar una lista alfabética con los empleados y los datos de la
oficina a la que están asignados.
select [Link], [Link], [Link], [Link], [Link], [Link], [Link],
[Link]
from employees inner join offices on
[Link] = [Link]
order by [Link], [Link] desc
___________________________________________________________________________
Generar un listado con el nombre y ciudad del cliente, junto con la
ciudad en la que se encuentra ubicado su vendedor asignado.
select customerName, [Link], [Link] as salesRepCity
from customers inner join employees on
salesRepEmployeeNumber = employeeNumber inner join offices
on [Link] = [Link]
___________________________________________________________________________
Obtener para cada oficina (ciudad), la cantidad de clientes que ha
tenido.
select [Link], count(*) as cantidadClientes
from customers right join employees e on
salesRepEmployeeNumber = employeeNumber right join offices on
[Link] = [Link]
group by [Link]
___________________________________________________________________________
Calcular la cantidad de pedidos cancelados que han incluido
productos de la línea de aviones (Plane)
select productLine, count(*) as cancelados
from products p inner join orderdetails od on
[Link] = [Link]
inner join orders o on
[Link] = [Link]
where status = 'Cancelled' and productLine = 'Planes'
group by productLine
__________________________________________________________________________
Sabiendo que a los productos de la línea de carros se les descuenta
el 17% de su precio, calcular el valor de dicho descuento en cada
producto, mostrando también su valor real.
SELECT
productCode, productName, productLine, buyPrice AS precio_real,
CAST(buyPrice * 0.17 AS NUMERIC(10, 2)) AS valor_descuento,
CAST(buyPrice - (buyPrice * 0.17) AS NUMERIC(10, 2)) AS precio_con_descuento
FROM Products
WHERE productLine = 'Classic Cars';
Sabiendo que a los productos de la línea de carros se les descuenta
el 17% de su precio, calcular el valor de total de descuentos en tales
productos.
SELECT
SUM(buyPrice * 0.17) AS total_descuentos
FROM Products
WHERE productLine = 'Classic Cars'
_________________________________________________________________
Sabiendo que al cliente 148 se le incrementa en el 10% sus pagos,
calcular el valor de dicho incremento en cada pago.
select amount as monto_incial, (amount * 1.1) as nuevo_monto, ((amount * 1.1) - amount) as total_aumento, [Link]
from payments inner join customers on
[Link] = [Link]
where [Link] = '148'
____________________________________________________________________
Incrementar en el 10% el precio actual del producto ingresado por
usted.
UPDATE PRODUCTS
SET BUYPRICE = BUYPRICE*1.1
WHERE PRODUCTLINE = ‘ryzerzon’
________________________________________________________________________
Cambiar el nombre del producto.
UPTADE products
SET productLine = ‘polaris’
WHERE productLine = ‘ryzerzon’
Insert Sintaxis:
insert into nombreTabla (nombreCampo1, nombreCampo2,…
nombreCampoN) values (valorCampo1, valorCampo2, valorCampoN);
► Cuando se insertan datos en todos los campos:
insert into nombreTabla values (valorCampo1, valorCampo2, …
valorCampoN)
Uptade:
Esta cláusula permite modificar el valor de uno (o un conjunto) de
atributos en una tabla.
► Sintaxis: Update nombreTabla
Set nombreAtributo = expresión
Where Condición;
► La expresión puede involucrar el valor actual del atributo.
Delete:
Esta cláusula permite eliminar uno (o varios) registros de una tabla.
► Sintaxis: Delete
From nombreTabla
Where Condición;
► Tener cuidado con la expresión condicional porque podría eliminar
toda la información de la tabla
__________________________________________________________________________
vistas
Sintaxis:
create view nombreVista as
(Select listaCampos
From tablas
Where expresion
Condicional
…)
Indices:
Tipos de índice: • Primary: es el que definimos como clave primaria. • “Index": crea un indice común, los valores no necesariamente son únicos
y aceptan valores "null". • “Unique": crea un indice para los cuales los valores deben ser únicos y diferentes, permite valores NULL Índices Sede
Tuluá ►
Sintaxis: CREATE [unique] INDEX [nombre_del_indice] ON [nombre_de_tabla] ([nombre_columna]);
► Ejemplos: create unique index I_libros_tituloeditorial on libros(titulo,editorial); create unique index I_libros_tituloeditorial on
libros(titulo,editorial);
___________________________________________________________________
Usando el esquema de base de datos “Classic Models”, crear una vista
que permita calcular la cantidad de productos por cada línea de
producto, siempre y cuando esta cantidad sea inferior a 12.
create view cantidadProductos as
(select productLine, count(productCode) as cantidad
from products
group by productLine
having count(productCode)<12)
_____________________________________________________________________
Usar la vista creada, para listar las líneas que tienen entre 1 y 5 productos
select *
from cantidadProductos
where cantidad between '1' and '5'
______________________________________________________________________
Crear una vista que permita generar un listado con la cantidad de pedidos por cada estado, mostrando código y nombre de producto.
create view TotalPedidos as (select status, [Link], productName, count(*) as cantidad
from orders inner join orderdetails on
[Link] = [Link] inner join products on
[Link] = [Link]
group by status, [Link], productName)
Usar la vista creada para obtener la cantidad promedio productos en órdenes en espera.
select avg(cantidad)
from TotalPedidos
where status = 'On Hold'
• Crear una vista que permita obtener el número, nombre y precio del producto de mayor valor entre los que tienen más de dos
cancelaciones de pedido.
Créate view CanceladosCaros as (select count(*) as cantidad, [Link], [Link], [Link]
from products p inner join orderdetails od on
[Link] = [Link] inner join orders o on
[Link] = [Link] where status = 'Cancelled'
group by [Link], [Link], [Link]
having count(*) > 2)
select buyPrice, productName
from CanceladosCaros
where buyPrice = (select max(buyPrice)
from CanceladosCaros)
Crear una vista que permita listar el total de unidades vendidas por cada
producto de la línea de automóviles (código y nombre), de los que se
hayan vendido menos de 900 unidades.
CREATE VIEW CarProductSales AS
SELECT
[Link],
[Link],
SUM([Link]) AS totalUnidadesVendidas
FROM
Products p
JOIN
OrderDetails od ON [Link] = [Link]
WHERE
[Link] = 'Classic Cars' -- Filtrar por la línea de producto "Classic Cars"
GROUP BY
[Link], [Link]
HAVING
SUM([Link]) < 900
ORDER BY
[Link]; ________________________________________________
Crear una vista que permita obtener un listado de los productos (número
y nombre) que tienen el mismo precio de compra de algún producto de
una línea diferente a la suya.
CREATE VIEW SamePriceDifferentLine AS
SELECT
[Link] AS productNumber,
[Link],
[Link]
FROM
Products p1
JOIN
Products p2 ON [Link] = [Link]
WHERE
[Link] <> [Link] and [Link] = [Link] -- Filtrar por líneas de producto diferentes
ORDER BY
[Link];
• Listar la cantidad disponible en stock de los productos generados por la
vista del Ejercicio 3
SELECT
[Link],
[Link],
[Link],
[Link]
FROM
SamePriceDifferentLine spd
JOIN
Products p ON [Link] = [Link];
• Listar los nombres de los vendedores que no han generado pedidos que
contienen productos de los generados por el Ejercicio 2.
-- Listar nombres de vendedores que no han generado pedidos con productos de CarProductSales
SELECT
[Link],
[Link]
FROM
Employees e
WHERE
NOT EXISTS (
-- Subconsulta para verificar si el vendedor ha generado pedidos con productos de CarProductSales
SELECT 1
FROM
Orders o
JOIN
OrderDetails od ON [Link] = [Link]
JOIN
CarProductSales cps ON [Link] = [Link]
WHERE
[Link] = [Link]
);
__________________________________________________________________
Consultas correlacionadas
Obtener una lista con código y nombre de los productos cuyo precio es mayor al precio promedio de los productos de su misma
línea.
SELECT
[Link],
[Link]
FROM
Products p
WHERE
[Link] > (
SELECT AVG([Link])
FROM Products p2
WHERE [Link] = [Link]
);
Ejercicio 6:
• Obtener una lista con el código de los productos incluidos en
pedidos en los que se solicitaron, en promedio, más del 50% de
las unidades disponibles.
SELECT
[Link]
FROM
OrderDetails od
JOIN
Products p ON [Link] = [Link]
WHERE
[Link] > 0.5 * [Link];
----------------------------------------------------------------------------------------------
Exists – Not Exists
► Obtener nombre de los empleados que nunca han atendido
clientes de una ciudad diferente de la suya.
SELECT
[Link],
[Link]
FROM
Employees e
WHERE
NOT EXISTS (
SELECT 1
FROM
Customers c
WHERE
[Link] = [Link]
AND [Link] <> [Link]
);
____________________________________________________________________________
• Ejercicio 1: Obtener un listado alfabético de las formas de gobierno que contienen la palabra “Republic”, determinando la cantidad de países
por cada una de dichas forma de gobierno.
SELECT formagobierno as Forma_de_gobierno, count(*) as Cantidad_de_paises
FROM pais
WHERE formagobierno ilike '%Republic%'
GROUP by formagobierno
ORDER by formagobierno asc
• Ejercicio 2: Obtener un listado alfabético de los países donde se habla tanto inglés como español (ambas).
SELECT distinct([Link]) as nombre_pais
FROM pais p
JOIN idiomapais i1 ON [Link] = [Link] AND [Link] = 'English'
JOIN idiomapais i2 ON [Link] = [Link] AND [Link] = 'Spanish'
ORDER BY [Link] asc
• Ejercicio 3: Obtener un listado alfabético de las ciudades que pertenecen a los países donde se habla francés como idioma oficial, pero que no
tuvieron año de independencia.
SELECT distinct ([Link])
FROM ciudad
JOIN pais ON [Link] = [Link]
JOIN idiomapais ON [Link] = [Link]
WHERE [Link] = 'French' AND [Link] = true AND [Link] IS NULL
ORDER by [Link]
• Ejercicio 4: Obtener un listado de las diferentes ciudades de América (Norte, Centro y Sur), cuya población está entre 2 y 6 millones de
personas. (No usar operadores relacionales).
SELECT distinct([Link]) as nombre_ciudad
FROM Ciudad
JOIN pais ON [Link] = [Link]
WHERE [Link] IN ('North America', 'South America', 'Central America')
AND [Link] between cast('2000000' as INT) AND cast('6000000' as INT)
• Ejercicio 5: Obtener un listado de los países donde la población promedio de sus ciudades es inferior a 100000.
SELECT [Link], round(avg([Link]):: numeric, 2) as Poblacion_Promedio
FROM pais p
JOIN ciudad c ON [Link] = [Link]
GROUP by [Link]
HAVING avg([Link]) < '100000'
ORDER by [Link]
• Ejercicio 6: Listar las diferentes formas de gobierno existentes en la base de datos (Ojo: Solo debe aparecer una vez cada una).
SELECT distinct(formagobierno) as Forma_de_gobierno
FROM pais
ORDER by formagobierno
• Ejercicio 8: Modificar el nombre del jefe de Estado de Estados Unidos por Joe Biden.
UPDATE pais
SET jefedeestado = 'Joe Biden'
WHERE codigo = 'USA'
• Ejercicio 9: Obtener un listado del nombre de los países, y su continente, donde la expectativa de vida está entre 40 y 60 años (OJO: no usar
operadores < o > para resolverlo.
SELECT nombre, continente
FROM pais
WHERE expectativadevida between '40' AND '60'
Ejercicio 1: Obtener un listado alfabético de los periodistas, que nacieron en el segundo semestre de 1988, y que escriben sobre alguna de las
siguientes áreas de conocimiento: Salud, Deporte o Educación. El listado debe mostrar: Apellido, Nombre, Cédula y Fecha de Nacimiento. (No
usar el operador or). [13 pts]
SELECT Apellido, Nombre, Cedula, Fecha_Nto
FROM periodista
WHERE Fecha_Nto = '1988-07-01'
AND areaconocimiento in (
SELECT Codigo
FROM areaconocimiento
WHERE Nombre in ('Salud', 'Deporte', 'Educación'))
ORDER by Apellido, Nombre
Ejercicio 2: Generar un listado con la cantidad de periodistas Activos, Retirados y Suspendidos (se calcula por cada uno). El listado debe mostrar
la descripción del estado. [13 pts]
SELECT [Link] as Estado, count(*) as Cantidad
FROM periodista p
WHERE estado in ('Activos', 'Retirados', 'Suspendidos')
INNER Join estado e on [Link] = [Link]
Group by [Link]
Ejercicio 3: Para aquellos periodistas de los que no se conoce su fecha de nacimiento, asignar la fecha: 1 de Enero de 1900. [13 pts]
UPDATE periodista
SET Fecha_Nto = '1900-01-01'
WHERE Fecha_Nto is null
Ejercicio 4: Obtener los apellidos y nombres de los periodistas asociados a áreas de conocimiento incluidas en las revistas Ingenium o
Humanitas. El listado debe mostrar además Nombre de la revista y Nombre del área de conocimiento, debe ordenarse por estos campos y luego
alfabético. (No usar el operador or). [13 pts]
SELECT [Link] as Revista, [Link] as Apellido_periodista, [Link] as Nombre_periodista, [Link] as Area_Conocimiento
FROM periodista p
INNER Join areaconocimiento ac on [Link] = [Link]
INNER Join revista r on [Link] = [Link]
WHERE [Link] in ('Ingenium', 'Humanitas')
ORDER by [Link], [Link], [Link], [Link]
Ejercicio 5: Generar un listado de con el número de cédula, fecha de nacimiento y descripción del estado de cada uno de los periodistas. El
listado debe estar ordenado de tal forma que muestre desde el más joven hasta el mayor. [13 pts]
SELECT [Link], p.Fecha_Nto, [Link] as Estado
FROM periodista p
INNER Join estado e on [Link] = [Link]
ORDER by p.Fecha_Nto asc
Ejercicio 6: Mostrar la información completa de los periodistas cuyo apellido contenga la letra K. [13 pts]
SELECT *
FROM periodista
WHERE Apellido ilike '%k%'
Ejercicio 7: Crear una vista que permita obtener el nombre, apellido y nombre del área de conocimiento del periodista de menor edad que se
encuentra como suspendido. (Usar consultas anidadas). [22 pts]
CREATE view periodista_menor_de_edad (
SELECT [Link], [Link], [Link]
FROM periodista p
INNER Join areaconocimiento ac on [Link] = [Link]
WHERE [Link] in(
SELECT Codigo
FROM Estado
WHERE Descripcion = 'Suspendido')
AND p.Fecha_Nto = (
SELECT min(Fecha_Nto)
FROM periodista
WHERE estado = (
SELECT Codigo
FROM Estado
WHERE Descripcion = 'Suspendido')
__________________________________________________________________________
/1: Buscar aquellos espectáculos contiene la palabra "festival", cuya fecha de inicio esté entre el 1 de julio de 2023 hasta el 31 de agosto de
2023. (No usar operadores al aplicar la condición sobre la fecha > , < , >= , <= , =) [10 pts]/
Select [Link]
from espectaculos e
where e.fecha_inicio between '2023-07-01' and '2023-08-31' and [Link] ilike 'festival%';
/*2: Generar un listado con la cantidad de espectáculos por cada ciudad (se espera que el listado incluya el nombre de la ciudad). [10 pts] */
select [Link], count(*)
from ciudades c inner join lugares l on c.ciudad_id=l.ciudad_id
inner join espectaculos_artistas ea on l.lugar_id=ea.lugar_id
group by [Link];
/3: Mostrar el id y nombre de los artistas que se han presentado en dos o más espectáculos. [15 pts]/
select a.artista_id, [Link]
from artistas a inner join espectaculos_artistas ea on a.artista_id = ea.artista_id
group by a.artista_id, [Link]
having count(*) >=2;
/*4: Obtener un listado alfabético con el nombre de los lugares se presentaron artistas de Folk. [10 pts] */
select distinct [Link]
from artistas a inner join espectaculos_artistas ea on a.artista_id = ea.artista_id
inner join lugares l on ea.lugar_id = l.lugar_id
where [Link] ilike 'folk'
order by [Link];
/*5: Generar un listado con el nombre de los artistas que se han presentado en las ciudades B y C.[15 pts] */
select [Link]
from artistas a inner join espectaculos_artistas ea on a.artista_id = ea.artista_id
inner join lugares l on ea.lugar_id = l.lugar_id
inner join ciudades c on l.ciudad_id =c.ciudad_id
where [Link]='B' and a.artista_id in (select a1.artista_id
from artistas a1 inner join espectaculos_artistas ea1 on a1.artista_id = ea1.artista_id
inner join lugares l1 on ea1.lugar_id = l1.lugar_id
inner join ciudades c1 on l1.ciudad_id =c1.ciudad_id
where [Link]='C');
/*6: Asignar “Parque local” como ubicación de los espectáculos que sean conciertos (que tengan esta palabra en el nombre). [10 pts] */
/7: Mostrar el nombre de las ciudades en las que nunca se ha presentado el artista cuyo nombre es “Grupo C”/
select nombre
from ciudades
where ciudad_id not in ( select c.ciudad_id
from artistas a inner join espectaculos_artistas ea on a.artista_id = ea.artista_id
inner join lugares l on ea.lugar_id = l.lugar_id
inner join ciudades c on l.ciudad_id =c.ciudad_id
where [Link]='Grupo C');
Consulta 1: Obtener la suma total de puntuaciones por desarrollador:
SELECT [Link] AS desarrollador, SUM([Link]) AS suma_puntuacion
FROM Desarrolladores d
INNER JOIN Juegos j ON d.desarrollador_id = j.desarrollador_id INNER JOIN Resenas r ON
j.juego_id = r.juego_id
GROUP BY [Link];
Consulta 2: Calcular el promedio de puntuaciones por género de juego:
SELECT [Link] AS genero, AVG([Link]) AS promedio_puntuacion
FROM Generos g LEFT JOIN Juegos j ON g.genero_id = j.genero_id LEFT JOIN Resenas r ON j.juego_id = r.juego_id
GROUP BY [Link];
Consulta 3: Encontrar la fecha de lanzamiento más reciente y antigua por plataforma: sql Copy code SELECT [Link] AS plataforma,
MAX(j.lanzamiento_fecha) AS lanzamiento_mas_reciente, MIN(j.lanzamiento_fecha) AS lanzamiento_mas_antiguo
FROM Plataformas p LEFT JOIN Juegos j ON p.plataforma_id = j.plataforma_id GROUP BY [Link];