Diferència entre revisions de la pàgina «SQL consultes II»
m (→Exercici) |
m (→Exercici) |
||
(Hi ha 8 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 1: | Línia 1: | ||
En aquest apartat realitzarem consultes una mica més elaborades i que implicaran més d'una taula. Per dur això a terme, cal que ampliem una mica més la sintaxi del [http://dev.mysql.com/doc/refman/5.0/en/select.html SELECT]. | En aquest apartat realitzarem consultes una mica més elaborades i que implicaran més d'una taula. Per dur això a terme, cal que ampliem una mica més la sintaxi del [http://dev.mysql.com/doc/refman/5.0/en/select.html SELECT]. | ||
− | Per afegir diverses taules necessitarem la | + | Per afegir diverses taules necessitarem la clàusula '''JOIN'''. Però amb això no n'hi ha prou, i ens caldrà la clàusula '''ON''' per relacionar les taules entre sí. Si no les relacionem correctament amb '''ON''' la consulta sortirà errònia. |
MOLT IMPORTANT: a partir d'ara les columnes no es podran posar directament el nom i prou, sinó que caldrà especificar a quina taula pertanyen amb la sintaxi <taula>.<columna> | MOLT IMPORTANT: a partir d'ara les columnes no es podran posar directament el nom i prou, sinó que caldrà especificar a quina taula pertanyen amb la sintaxi <taula>.<columna> | ||
Línia 8: | Línia 8: | ||
'''SELECT''' <nom_taula1>.<nom_columna1>, <nom_taula2>.<nom_columna2>, ... | '''SELECT''' <nom_taula1>.<nom_columna1>, <nom_taula2>.<nom_columna2>, ... | ||
− | '''FROM''' <nom_taula1> ''' | + | '''FROM''' <nom_taula1> '''JOIN''' <nom_taula2>, <nom_taula3>, ... |
'''ON''' <taula1>.<columna1>=<taula2>.<columna2> , etc. | '''ON''' <taula1>.<columna1>=<taula2>.<columna2> , etc. | ||
'''WHERE ...''' ; | '''WHERE ...''' ; | ||
Línia 16: | Línia 16: | ||
Podem saber directament la correspondència entre titulacions i assignatures amb la consulta: | Podem saber directament la correspondència entre titulacions i assignatures amb la consulta: | ||
mysql> SELECT titulacio.titulacio, assignatures.nom, assignatures.id_assignatura | mysql> SELECT titulacio.titulacio, assignatures.nom, assignatures.id_assignatura | ||
− | -> FROM '''titulacio | + | -> FROM '''titulacio JOIN assignatures''' |
-> '''ON titulacio.id_titulacio=assignatures.id_titulacio;''' | -> '''ON titulacio.id_titulacio=assignatures.id_titulacio;''' | ||
− | Fixeu-vos molt bé amb els | + | Fixeu-vos molt bé amb els JOIN i les condicions del ON per relacionar les taules entre sí. |
I si volem saber, a més, filtrar les que corresponen a "SMX" podem fer: | I si volem saber, a més, filtrar les que corresponen a "SMX" podem fer: | ||
mysql> SELECT titulacio.titulacio, assignatures.nom, assignatures.id_assignatura | mysql> SELECT titulacio.titulacio, assignatures.nom, assignatures.id_assignatura | ||
− | -> FROM titulacio | + | -> FROM titulacio JOIN assignatures |
-> ON titulacio.id_titulacio=assignatures.id_titulacio | -> ON titulacio.id_titulacio=assignatures.id_titulacio | ||
-> '''WHERE titulacio.titulacio LIKE "%SMX%"'''; | -> '''WHERE titulacio.titulacio LIKE "%SMX%"'''; | ||
Línia 43: | Línia 43: | ||
##Llistat d'assignatures de la ESO. | ##Llistat d'assignatures de la ESO. | ||
##Llistat d'assignatures amb el nom del professor que les imparteix. | ##Llistat d'assignatures amb el nom del professor que les imparteix. | ||
− | ##Llistat de UFs de l'assignatura " | + | ##Llistat de UFs de l'assignatura "Sistemes Operatius Monolloc". |
##Llistat de UFs de l'assignatura d'ofimàtica. | ##Llistat de UFs de l'assignatura d'ofimàtica. | ||
##Llistat de UFs de l'assignatura FOL. | ##Llistat de UFs de l'assignatura FOL. | ||
##Nombre total de matrícules del curs 2008-2009 | ##Nombre total de matrícules del curs 2008-2009 | ||
##Nombre total de matrícules del curs 2009-2010 | ##Nombre total de matrícules del curs 2009-2010 | ||
− | #Tongada 2 | + | #Tongada 2 (amb 3 taules) |
− | ##... | + | ##Recompte de les UFs de l'assignatura "Muntatge i manteniment d'equips". |
− | ##... | + | ##Recompte de UFs per assignatura. |
+ | ##Llistat de UFs de les assignatures que NO siguin de SMX. | ||
+ | ##Llistat de UFs en què estigui matriculat l'alumne Pere Escribano. | ||
+ | ##Llistat de qualificacions (assignatura i UF) de l'alumne Òscar Tabuada. | ||
+ | ##Mitjana de les qualificacions dels alumnes matriculats el curs 2008-2009. | ||
+ | ##Recompte de qualificacions '''aprovades''' dels alumnes del curs 2009-2010. | ||
+ | ##Mitjana de les qualificacions de l'alumne David Dalmau. | ||
+ | #Tongada 3 (amb 4 taules) | ||
+ | ##Llistat d'alumnes aprovats de les UFs de l'assignatura "Sistemes Operatius Monolloc". | ||
+ | ##Llistat d'alumnes aprovats de la UF "Components d'un sistema informàtic". | ||
+ | #Tongada 4 (amb 5 taules) | ||
+ | ##Llistat d'alumnes aprovats de les assignatures impartides pel professor Enric Mieza. | ||
+ | |||
+ | == Exercici 2 == | ||
+ | Amb la base de dades de pel·lícules [[Fitxer:Videoclub.sql]] realitza les següents consultes. | ||
+ | |||
+ | NOTA: en aquest exercici NO ES PERMET UTILITZAR CAP ID. Totes les condicions de consultes s'han de fer a través de la columna que figura en l'enunciat. Per exemple, si volem les pel·lícules de gènere "MANGA" cal que la condició sigui genere.nom="MANGA", i no pas utilitzant l'ID de gènere. | ||
+ | |||
+ | #Llistat de films amb la seva categoria. | ||
+ | #Llistat de films amb el seu gènere. | ||
+ | #Llistat de films de gènere "manga" (ha d'aparèixer també el nom del gènere per comprovar la consulta). | ||
+ | #Llistat de lloguers (IDs,data de sortida) amb els noms dels clients. | ||
+ | #Llistat de lloguers (IDs,data de sortida) amb els noms dels films. | ||
+ | |||
+ | OJU, amb 3 taules: | ||
+ | <ol start="6"> | ||
+ | <li>Llistat de lloguers amb la ID de lloguer, la data de sortida, el nom del client i el nom del film.</li> | ||
+ | <li>Llistat de lloguers (igual que l'anterior més la població) però només dels clients de Manresa.</li> | ||
+ | </ol> | ||
+ | |||
+ | A sako, amb 4 taules: | ||
+ | <ol start="8"> | ||
+ | <li>Llistat de lloguers amb ID, data, nom de client, nom del film i nom del gènere del film.</li> | ||
+ | <li>Llistat de lloguers (igual que l'anterior) però només dels que tinguin gènere ACCIÓ.</li> | ||
+ | </ol> |
Revisió de 15:39, 21 abr 2010
En aquest apartat realitzarem consultes una mica més elaborades i que implicaran més d'una taula. Per dur això a terme, cal que ampliem una mica més la sintaxi del SELECT.
Per afegir diverses taules necessitarem la clàusula JOIN. Però amb això no n'hi ha prou, i ens caldrà la clàusula ON per relacionar les taules entre sí. Si no les relacionem correctament amb ON la consulta sortirà errònia.
MOLT IMPORTANT: a partir d'ara les columnes no es podran posar directament el nom i prou, sinó que caldrà especificar a quina taula pertanyen amb la sintaxi <taula>.<columna>
La sintaxi més complerta ens quedarà:
SELECT <nom_taula1>.<nom_columna1>, <nom_taula2>.<nom_columna2>, ... FROM <nom_taula1> JOIN <nom_taula2>, <nom_taula3>, ... ON <taula1>.<columna1>=<taula2>.<columna2> , etc. WHERE ... ;
A l'exemple de la base de dades de UFs podem realitzar algunes consultes. Aquesta ens permet fer un llistat d'assignatures amb la seva titulació.
Podem saber directament la correspondència entre titulacions i assignatures amb la consulta:
mysql> SELECT titulacio.titulacio, assignatures.nom, assignatures.id_assignatura -> FROM titulacio JOIN assignatures -> ON titulacio.id_titulacio=assignatures.id_titulacio;
Fixeu-vos molt bé amb els JOIN i les condicions del ON per relacionar les taules entre sí.
I si volem saber, a més, filtrar les que corresponen a "SMX" podem fer:
mysql> SELECT titulacio.titulacio, assignatures.nom, assignatures.id_assignatura -> FROM titulacio JOIN assignatures -> ON titulacio.id_titulacio=assignatures.id_titulacio -> WHERE titulacio.titulacio LIKE "%SMX%";
Exercici[modifica]
Realitzeu les següents consultes. Enregistreu-les com a views a la vostra base de dades amb el nom "consulta_1_1", "consulta_2_3", etc. (els 2 números són la tongada i el número de consulta).
IMPORTANT: en aquestes consulets no ha d'aparèixer cap ID. Són consultes de veritat, és a dir, que donen informació a una persona externa que no coneix la estructura interna de la base de dades. Els ID que acostumem a utilitzar és un número intern i, per tant, a ningú l'interessa (a part del programador).
Tampoc es podran utilitzar els IDs en les clàusules WHERE, és a dir, que heu de fer els filtres amb LIKE i posant cadenes de caràcters. Per exemple, si vull mostrar les assignatures de SMX, no s'ha de posar:
SELECT ... WHERE id_titulacio=3;
sinó:
SELECT ... WHERE titulacio.titulacio LIKE "%SMX%";
Avanti!!
- Tongada 1 (amb 2 taules)
- Llistat d'assignatures amb la seva titulació.
- Llistat d'assignatures de la titulació de SMX.
- Llistat d'assignatures de la ESO.
- Llistat d'assignatures amb el nom del professor que les imparteix.
- Llistat de UFs de l'assignatura "Sistemes Operatius Monolloc".
- Llistat de UFs de l'assignatura d'ofimàtica.
- Llistat de UFs de l'assignatura FOL.
- Nombre total de matrícules del curs 2008-2009
- Nombre total de matrícules del curs 2009-2010
- Tongada 2 (amb 3 taules)
- Recompte de les UFs de l'assignatura "Muntatge i manteniment d'equips".
- Recompte de UFs per assignatura.
- Llistat de UFs de les assignatures que NO siguin de SMX.
- Llistat de UFs en què estigui matriculat l'alumne Pere Escribano.
- Llistat de qualificacions (assignatura i UF) de l'alumne Òscar Tabuada.
- Mitjana de les qualificacions dels alumnes matriculats el curs 2008-2009.
- Recompte de qualificacions aprovades dels alumnes del curs 2009-2010.
- Mitjana de les qualificacions de l'alumne David Dalmau.
- Tongada 3 (amb 4 taules)
- Llistat d'alumnes aprovats de les UFs de l'assignatura "Sistemes Operatius Monolloc".
- Llistat d'alumnes aprovats de la UF "Components d'un sistema informàtic".
- Tongada 4 (amb 5 taules)
- Llistat d'alumnes aprovats de les assignatures impartides pel professor Enric Mieza.
Exercici 2[modifica]
Amb la base de dades de pel·lícules Fitxer:Videoclub.sql realitza les següents consultes.
NOTA: en aquest exercici NO ES PERMET UTILITZAR CAP ID. Totes les condicions de consultes s'han de fer a través de la columna que figura en l'enunciat. Per exemple, si volem les pel·lícules de gènere "MANGA" cal que la condició sigui genere.nom="MANGA", i no pas utilitzant l'ID de gènere.
- Llistat de films amb la seva categoria.
- Llistat de films amb el seu gènere.
- Llistat de films de gènere "manga" (ha d'aparèixer també el nom del gènere per comprovar la consulta).
- Llistat de lloguers (IDs,data de sortida) amb els noms dels clients.
- Llistat de lloguers (IDs,data de sortida) amb els noms dels films.
OJU, amb 3 taules:
- Llistat de lloguers amb la ID de lloguer, la data de sortida, el nom del client i el nom del film.
- Llistat de lloguers (igual que l'anterior més la població) però només dels clients de Manresa.
A sako, amb 4 taules:
- Llistat de lloguers amb ID, data, nom de client, nom del film i nom del gènere del film.
- Llistat de lloguers (igual que l'anterior) però només dels que tinguin gènere ACCIÓ.