Académique Documents
Professionnel Documents
Culture Documents
Se parte de una base de datos BD2.mdb, con las tablas, campos y relaciones de la hoja 3ª :
En la intrucción SELECT los nombres de los campos que se pueden seleccionar no son
únicamente los de tablas, también se pueden coger nombres de consultas ( obtenidas
previamente mediante SELECT y almacenadas en la BD, o escritas directamente en la
instrucción)
Ejemplo 1º
Si se creó una consulta llamada conHoja3_3 ( la consulta que tenía todos los campos de las tres tablas relacionados), se puede
crear una consulta que obtenga para cada señor la ciudad donde tiene casas de las dos formas siguientes:
1ª conHoja4_0
FROM conHoja3_3;
2ª(conHoja4_1
FROM (SELECT *
Ejemplo 2 º
El ejercicio hoja3_4, para obtener el nombre y el número de casas habíamos agrupado
por dos campos DNI, Nombre para poder obtener lo pedido, resaltando que agrupar por
Nombre sólo para poder sacar el Nombre era una solución poco eficiente. La instrucción
SQL escrita era:
ConHoja3_4
SELECT tblNombres.Nombre, Count(*) AS Ncasas
FROM tblNombres INNER JOIN tblTienePisoEn ON tblNombres.DNI=tblTienePisoEn.DNI
GROUP BY tblNombres.DNI, tblNombres.Nombre;
Nombre Ncasas
uno 2
dos 3
tres 3
cuatro 1
Ejemplo 3.: ( conHoja4_3) Supongamos que deseamos hacer una consulta que obtenga
los nombres de aquellos señores que no tienen ninguna casa.
(en tblTienePisoen , el señor con DNI=55555, no tiene piso )
Una forma distinta a la obtenida mediante LEFT JOIN ( ej. 7 de hoja3) utilizando subconsultas
sería:
Ejercicio 4º- Visualizar el (los) nombre(s) y el número de casas que tiene el (los) que
más. . Los pasos podrían ser:
• obtener el número de pisos que tiene cada señor.
( contar –count()- las casas agrupadas por señor)
• obtener el número máximo de los obtenidos anteriormente – función
agregada MAX()-
• seleccionar el nombre de aquellos señores que el número de casas
que tiene ( obtenido en el punto 1º) coincida con el máximo ( obtenido en el
punto 2º).
Nombre TOTAL
dos 3
tres 3
Ejercicio 5º- Visualizar el(los) nombre(s) del (los) que tienen el mayor número de casas
junto a las ciudades donde las poseen.
nombre NombreCiuda
dos d
Salamanca
dos Zamora
dos Zamora
tres Salamanca
tres Salamanca
tres Salamanca
Ejercicio 6º - Obtener el (los) nombre(s) de ciudade(s) donde más casas hay, y el número
de ellas.
NombreCiudad PisosEnCiudad
Salamanca 4
Zamora 4
Ejercicio 7º - Nombre (s) de ciudad(es) donde más casas hay, y el nombre de sus
propietarios.
NombreCiudad nombre
Salamanca dos
Salamanca tres
Salamanca tres
Salamanca tres
Zamora dos
Zamora dos
Zamora uno
Zamora uno
Ejercicios de SQL (hoja 6ª)
1ª - conAutoresDelCuadroCombinado
FROM tblAutores;
2ª - conLibrosDelCuadroCombinado
FROM tblLibros
3ª - cEjempAlgúnLibro
4ª - cEjempAutorYNumeroDeLibros
Nombres de autores y número de libros que han escrito ordenados de mayor a menor
nº de libros
SELECT nombre, apellidos, nlibros FROM tblautores INNER JOIN [SELECT idautor,count(*)
as nlibros
FROM tblAutorlibro
5ª - cEjempAutorSinLibro.
SELECT *
FROM TBLAUTORES
FROM TBLAUTORLIBRO);
SELECT *
FROM TBLAUTORES
Consulta que informe acerca de los libros y sus autores con todos los campos de
tblLibros (tblLibros.*) y todos los campos de tblAutores.
SELECT *
7ª - conAutoresLibros
8ª - conAutoresOrdenados
Consulta con todos los campos de tblAutores, ordenados por Apellidos.
9ª - conLibrosAutor
Consulta con ISBN, IDAutor, NumSeq, Título del libro y Número de Edición
Ordenada por número ISBN.
10ª conLibrosOrdenados
1º - conCategorías
2 º - conCategoríasDelCuadroCombinado
3º - conCategoríasAutor
Cada Autor tiene varios libros, cada libro puede ser de varias categorías. Se quiere una
consulta que obtenga para cada autor las categorías de libros que tiene. Basta con
IDAutor y IDCategoria.
SELECT tblAutores.IDAutor, tblAutores.Nombre, tblCategorías.IDCategoría
4º - conEjempCategoríasAutor
Igual que la 3º, pero con nombre de autor, título del libro, nombre de la categoría
y de la clase de libro; ordenado por autores y por categoría.
5º - conCategoríasLibro
6º - cEjempCategoríasLibroMS-DOS
Consulta que obtenga ISBN y Título de los libros catalogados como IDCategoría= 25
(”MS-DOS”)
SELECT tblLibros.NúmeroISBN, tblLibros.Título
WHERE tblCategorías.IDCategoría=25
7º - cEjempClasesLibrosS-O
Consulta que obtenga ISBN y Título de los libros catalogados con IDClase=1 (”Sistema
operativo”)
FROM tblClases INNER JOIN (tblCategorías INNER JOIN (tblLibros INNER JOIN
tblCategoríasLibro ON tblLibros.NúmeroISBN = tblCategoríasLibro.NúmeroISBN) ON
tblCategorías.IDCategoría = tblCategoríasLibro.IDCategoría) ON tblClases.IDClase =
tblCategorías.IDClase
WHERE tblClases.IDClase=1
8º - cEjempCategoríasLibroACCESS
Consulta que obtenga ISBN , Título y Autor (es) de los libros catalogados como
IDCategoría=4 (”Microsoft Access”).
WHERE tblCategorías.IDCategoría=4
9º - cEjempCategoríasLibroVisualBasic
Consulta que obtenga Títulos de libros catalogados como IDCategoría= 8 (”Visual Basic”)
WHERE tblCategorías.IDCategoría=8
10º - CejempTodasCategoríasLibrosVisualBasic
Para cada libro catalogado con categoría “Visual Basic”, visualizar las demás categorías
que tiene el libro.
1º - conClientesdelCuadroCombinado
FROM tblClientes
ORDER BY ciudad
2º - conLibreríasdelCuadroCombinado
FROM tblLibrerías
3º - conClientesOrdenados
4º - conLibreríasOrdenadas
5º - cEjempLibrosPedidos
Por cada línea de detalle de tblDetallesPedidos, obtener una línea de consulta con
el contenido como el siguiente: ( debe estar ordenado por IdPedido)
ID Cliente Título Cantidad
Pedido1 7 Running Microsoft® PowerPoint® 11
1 7 for Windows®
Microsoft® 95 97 Step by Step
Excel 9
1 7 Understanding Groupware in the 8
1 7 Enterprise
Field Guide to Microsoft® Access 2
2 1 2 for Windows®
Running Microsoft® Windows® 4
98
7 º - cEjempImportesporPedido
ID Fecha Pedido Cliente Ciudad Envío TOTAL
Pedido1 01/01/99 7 London 676
2 01/01/99 1 Seattle 656
3 01/01/99 8 Bellevue 436,25
con el total del importe de cada pedido
GROUP BY tblPedidos.IDPedido
GROUP BY tblPedidos.CódigoPostalEnvío
2º cEjempPromedioCiudades
GROUP BY tblPedidos.CiudadEnvío
3º cEjempPromedioCiudadesMenosDeMedia
WHERE MEDIACIUDAD<MEDIATOTAL;
4º cEjempPedidosenMes=6
Para cada día del mes 6 ( las facturas están entre 1/6/99 y 1/7/99) visualizar la suma de
los pedidos de esos días. ( consultar ayuda de funciones de fechas: date(), year(),month(),
day() )
SELECT DAY(tblPedidos.FechaPedido) AS DiaMes_6, SUM(TOTAL) AS TotalDia
WHERE MONTH(tblPedidos.FechaPedido)=6
GROUP BY DAY(tblPedidos.FechaPedido)
5º cEjempMaxPedidosWA<2200
Obtener la media y el importe del pedido con cantidad máxima de cada uno de los
meses , de los clientes del estado de Washington EstadoOProvincia=”WA”, con la
condición de que la cantidad máxima del pedido se encuentre por debajo de 2200.
WHERE tblPedidos.EstadoOProvinciaEnvío="WA"
GROUP BY MONTH(tblPedidos.FechaPedido)
HAVING (MAX(TOTAL)<2200)
6º -Nombre del Cliente, ciudad del Cliente, ciudad del Destino y cantidad del pedido con
máximo importe.
SELECT TOP 1 *
FROM subCejemImportesporPedido;
FROM [MAYOR PEDIDO] INNER JOIN (tblClientes INNER JOIN tblPedidos ON tblClientes.IDCliente
= tblPedidos.IDCliente) ON [MAYOR PEDIDO].IDPedido = tblPedidos.IDPedido;
7º - De cada mes el nº de pedidos realizados y el importe total de los pedidos realizados en ese
mes.
FROM SUBHOJA9_7
GROUP BY MONTH(FECHAPEDIDO)
8º - De cada mes, el nombre del cliente que más: