SQL actualitzacions: Diferència entre les revisions

De Cacauet Wiki
Dreceres ràpides: navegació, cerca
 
(Exercicis 2)
 
(Hi ha 3 revisions intermèdies del mateix usuari que no es mostren)
Línia 2: Línia 2:
 
Resumint, aquesta és:
 
Resumint, aquesta és:
  
UPDATE <nom_taula>
+
'''UPDATE''' <nom_taula>
SET <columna1>=<valor1>, <columna2>=<valor2>, etc.
+
'''SET''' <columna1>=<valor1>, <columna2>=<valor2>, etc.
WHERE <condició>;
+
'''WHERE''' <condició>;
  
 
<big>ATENCIÓ: és MOLT important que poseu correctament el WHERE. '''Si us equivoqueu en la condició matxacareu les dades de tota la taula''', i recuperar-les pot ser impossible. Això és similar al què passa amb la comanda DELETE.</big>
 
<big>ATENCIÓ: és MOLT important que poseu correctament el WHERE. '''Si us equivoqueu en la condició matxacareu les dades de tota la taula''', i recuperar-les pot ser impossible. Això és similar al què passa amb la comanda DELETE.</big>
  
 
Potser val la pena que feu un vistasso a l'article de [[SQL transaccions]] per poder desfer els canvis a la base de dades en cas d'error.
 
Potser val la pena que feu un vistasso a l'article de [[SQL transaccions]] per poder desfer els canvis a la base de dades en cas d'error.
 +
 +
  
 
== Exemple 1 ==
 
== Exemple 1 ==
Línia 27: Línia 29:
 
  '''WHERE id_assignatura=1''';
 
  '''WHERE id_assignatura=1''';
  
És clar que també es pot aplicar canvis amb condicions que no siguin una ID, ja que la ID de l'exemple pot diferir d'una base de dades a una altra. Per exemple,
+
És clar que també es pot aplicar canvis amb condicions que no siguin una ID, ja que la ID de l'exemple pot diferir d'una base de dades a una altra. Per exemple, el cas anterior podiem modificar l'assignatura en qüestió pel nom de l'assignatura (en el WHERE):
 +
UPDATE assignatures
 +
SET hores=90
 +
'''WHERE assignatura="Matemàtiques 2n ESO"''';
  
 +
També podriem fer un canvi pel nom del professor (WHERE professor="Jaume Font") però això podira portar-nos a un error fàcilment. Endivines quin?...
  
=== Exercici ===
+
=== Exercici 1 ===
 
Utilitzant aquesta base de dades de les assignatures, aplica les següents modificacions:
 
Utilitzant aquesta base de dades de les assignatures, aplica les següents modificacions:
 +
#L'assignatura d'anglès serà de 116 hores.
 +
#Les Mates de 1r d'ESO ja no les fa la Pepi sinó en Carles Bustamante.
 +
#Les Ciències Naturals de 1r d'ESO ara passaran a dir-se "Ciències de la Naturalesa 1r ESO".
 +
#L'assignatura de Castellà ara es dirà "Llengua castellana 1r ESO" i la impartirà en Alfonso López.
 +
#El català de 1r d'ESO l'impartirà en Ricard Torres i ara ocuparà 120 hores enlloc de 130.
 +
#Visual i plàstica passarà a ocupar 90 hores.
 +
  
  
 
== Exemple 2 ==
 
== Exemple 2 ==
Prenem l'exemple de la base de dades de matrícules de l'institut [[Arxiu:Ufs.sql]].
+
Prenem l'exemple de la base de dades de matrícules de l'institut [[Fitxer:Ufs.sql]]. L'importem a la nostra base de dades i ens preparem per efectuar algunes modificacions:
 +
mysql> use <usuari>_ufs;
 +
 
 +
Així ja estarem a dins de la base de dades de l'institut.
 +
 
 +
Els alumnes de Súria s'han queixat de que no els arriba les cartes o, si ho fan, arriben molt tard. Sembla ser que tenen el CP equivocat. Per comprovar-ho mirarem quins alumnes son de Súria:
 +
 
 +
SELECT nom, cognoms
 +
FROM alumnes
 +
WHERE poblacio LIKE "S%uria";
 +
 
 +
Noteu que hem posat '''LIKE "S%uria"''' perquè els accents no acaben de funcionar, i així podem seleccionar la ciutat encara que el caràcter no sapiguem quin és. De fet, hauria de ser un interrogant (?= 1 sol caràcter) enlloc d'un percent (%= qualsevol nombre de caràcters), però l'interrogant no funciona. Si trobeu què passa o com arreglar-ho, m'ho feu saber :-S
 +
 
 +
El resultat serà:
 +
+--------+-----------------+-------+----------+
 +
| nom    | cognoms        | cp    | poblacio |
 +
+--------+-----------------+-------+----------+
 +
| Sandra | Esteve L�pez    | 08001 | S�ria    |
 +
| Xesco  | Mart�nez Dalmau | 08001 | S�ria    |
 +
+--------+-----------------+-------+----------+
 +
2 rows in set (0.00 sec)
 +
 
 +
<big>És MOLT IMPORTANT que abans de fer un update comprovem que les dades a modificar són correctes. Això és el que pretenem amb aquesta primera consulta: clarificar si el WHERE que farem servir al UPDATE és correcte.</big>
 +
 
 +
Mirant per internet trobem que el CP de Súria és el 08260. Per canviar les dades d'aquests alumnes haurem de fer:
 +
'''UPDATE''' alumnes
 +
'''SET''' cp="08260"
 +
'''WHERE''' poblacio '''LIKE''' "S%uria";
 +
 
 +
I si a continuació repetim el select del principi obtindrem:
 +
+--------+-----------------+-------+----------+
 +
| nom    | cognoms        | cp    | poblacio |
 +
+--------+-----------------+-------+----------+
 +
| Sandra | Esteve L�pez    | 08260 | S�ria    |
 +
| Xesco  | Mart�nez Dalmau | 08260 | S�ria    |
 +
+--------+-----------------+-------+----------+
 +
2 rows in set (0.00 sec)
 +
 
 +
I, com podem veure, el CP ara és correcte.
 +
 
 +
=== Exercicis 2 ===
 +
Sobre la base de dades de l'institut efectueu els següents canvis:
 +
 
 +
ULL! que els 1 i 2 són fàcils, però els exercicis 3 i 4 són bastant enrevessats, ja que haureu de cercar la informació per les diferents taules:
 +
 
 +
#Els següents alumnes ens han facilitat el telèfon, que abans no tenien introduït a la base de dades. Penseu a situar-lo correctament al telèfon fix o al mòbil, segons convingui:
 +
#*Francesc Alonso: 938730101
 +
#*Jordi Joan: 938331010
 +
#*Pilar Cots: 619001122
 +
#*Florenci Martín: 938330099
 +
#*Òscar Tabuada: 666000111
 +
#Els següents professors han canviat les seves adreces. Actualitza-les a la taula corresponent. Vigileu que aquí haureu de canviar més d'un camp: l'adreça i la població, i de retruc el CP (el busqueu a internet).
 +
#*Enric Mieza: c. Swing, 22 (Manresa)
 +
#*Jordi Lemonche: c. Santa Maria, 10 (Berga)
 +
#*Anna Coromines: c. Eivissa, 99 (Tàrrega)
 +
#*Maite Soler: c. Santa Tecla (Vic)
 +
#Els següents alumnes han repescat alguna assignatura i s'ha d'actualitzar les dades de cada UF de l'alumne '''a la columna de qualificacio_extraordinaria''':
 +
##Per la UF1 de l'assignatura de "Muntatge i manteniment d'equips".
 +
##*Francesc Alonso: 5
 +
##*Xesco Martínez: 4
 +
##*Sandra Esteve: 6
 +
##*Pere Portabella: 3
 +
#S'ha acabat una nova UF de l'assignatura "Xarxes Locals":
 +
##Notes (regulars) de la UF2 "Configuració de commutadors...":
 +
##*Francesc Alonso: 4
 +
##*Robert Baltasar: 5
 +
##*Pilar Cots: 5
 +
##*David Dalmau: 7
 +
##*Sandra Esteve: 6
 +
##*Florenci Mart�n: 2
 +
##*Xesco Mart�nez: 8
 +
##*N�ria L�pez: 10
 +
##*Pere Escribano: 4
 +
##*Mohamed Alhamam: 5
 +
##*S�nia P�rez:4
 +
##*Snatam Kaur: 7
 +
##*�scar Tabuada: 3
 +
##*Pere Portabella: 2
 +
##*Ramon Zapatero Traus: 7
 +
##*Jordi Joan: 5

Revisió de 18:28, 17 feb 2010

Per poder canviar dades d'un registre haurem d'utilitzar la comanda SQL UPDATE. Resumint, aquesta és:

UPDATE <nom_taula>
SET <columna1>=<valor1>, <columna2>=<valor2>, etc.
WHERE <condició>;

ATENCIÓ: és MOLT important que poseu correctament el WHERE. Si us equivoqueu en la condició matxacareu les dades de tota la taula, i recuperar-les pot ser impossible. Això és similar al què passa amb la comanda DELETE.

Potser val la pena que feu un vistasso a l'article de SQL transaccions per poder desfer els canvis a la base de dades en cas d'error.


Exemple 1[modifica]

Anem a la base de dades que hem anomenat "<alumne>_insti" d'una sola taula (ho hem fet a l'exercici SQL taules).

$> mysql -u <usuari> -p -h <host>
mysql> use <usuari>_insti;
mysql> desc assignatures;
mysql> select * from assignatures;

I d'aquesta manera ens sortirà una llista d'assignatures introduïdes amb el professor corresponent:

Si volem canviar el nombre d'hores que ocupa l'assignatura "Matemàmiques 2n ESO" que imparteix Pere Font caldrà un UPDATE amb una condició WHERE id_assignatura=1. Per assegurar-nos de que anem bé i de que estem modificant NOMÉS la dada que nosaltres volem, cal provar primer de tot la condició amb el WHERE:

mysql> SELECT * FROM assignatures WHERE id_assignatura=1;

Si només ens apareix l'assignatura que volem, podem procedir.

UPDATE assignatures
SET hores=90
WHERE id_assignatura=1;

És clar que també es pot aplicar canvis amb condicions que no siguin una ID, ja que la ID de l'exemple pot diferir d'una base de dades a una altra. Per exemple, el cas anterior podiem modificar l'assignatura en qüestió pel nom de l'assignatura (en el WHERE):

UPDATE assignatures
SET hores=90
WHERE assignatura="Matemàtiques 2n ESO";

També podriem fer un canvi pel nom del professor (WHERE professor="Jaume Font") però això podira portar-nos a un error fàcilment. Endivines quin?...

Exercici 1[modifica]

Utilitzant aquesta base de dades de les assignatures, aplica les següents modificacions:

  1. L'assignatura d'anglès serà de 116 hores.
  2. Les Mates de 1r d'ESO ja no les fa la Pepi sinó en Carles Bustamante.
  3. Les Ciències Naturals de 1r d'ESO ara passaran a dir-se "Ciències de la Naturalesa 1r ESO".
  4. L'assignatura de Castellà ara es dirà "Llengua castellana 1r ESO" i la impartirà en Alfonso López.
  5. El català de 1r d'ESO l'impartirà en Ricard Torres i ara ocuparà 120 hores enlloc de 130.
  6. Visual i plàstica passarà a ocupar 90 hores.


Exemple 2[modifica]

Prenem l'exemple de la base de dades de matrícules de l'institut Fitxer:Ufs.sql. L'importem a la nostra base de dades i ens preparem per efectuar algunes modificacions:

mysql> use <usuari>_ufs;

Així ja estarem a dins de la base de dades de l'institut.

Els alumnes de Súria s'han queixat de que no els arriba les cartes o, si ho fan, arriben molt tard. Sembla ser que tenen el CP equivocat. Per comprovar-ho mirarem quins alumnes son de Súria:

SELECT nom, cognoms
FROM alumnes
WHERE poblacio LIKE "S%uria";

Noteu que hem posat LIKE "S%uria" perquè els accents no acaben de funcionar, i així podem seleccionar la ciutat encara que el caràcter no sapiguem quin és. De fet, hauria de ser un interrogant (?= 1 sol caràcter) enlloc d'un percent (%= qualsevol nombre de caràcters), però l'interrogant no funciona. Si trobeu què passa o com arreglar-ho, m'ho feu saber :-S

El resultat serà:

+--------+-----------------+-------+----------+
| nom    | cognoms         | cp    | poblacio |
+--------+-----------------+-------+----------+
| Sandra | Esteve L�pez    | 08001 | S�ria    | 
| Xesco  | Mart�nez Dalmau | 08001 | S�ria    | 
+--------+-----------------+-------+----------+
2 rows in set (0.00 sec)

És MOLT IMPORTANT que abans de fer un update comprovem que les dades a modificar són correctes. Això és el que pretenem amb aquesta primera consulta: clarificar si el WHERE que farem servir al UPDATE és correcte.

Mirant per internet trobem que el CP de Súria és el 08260. Per canviar les dades d'aquests alumnes haurem de fer:

UPDATE alumnes
SET cp="08260"
WHERE poblacio LIKE "S%uria";

I si a continuació repetim el select del principi obtindrem:

+--------+-----------------+-------+----------+
| nom    | cognoms         | cp    | poblacio |
+--------+-----------------+-------+----------+
| Sandra | Esteve L�pez    | 08260 | S�ria    | 
| Xesco  | Mart�nez Dalmau | 08260 | S�ria    | 
+--------+-----------------+-------+----------+
2 rows in set (0.00 sec)

I, com podem veure, el CP ara és correcte.

Exercicis 2[modifica]

Sobre la base de dades de l'institut efectueu els següents canvis:

ULL! que els 1 i 2 són fàcils, però els exercicis 3 i 4 són bastant enrevessats, ja que haureu de cercar la informació per les diferents taules:

  1. Els següents alumnes ens han facilitat el telèfon, que abans no tenien introduït a la base de dades. Penseu a situar-lo correctament al telèfon fix o al mòbil, segons convingui:
    • Francesc Alonso: 938730101
    • Jordi Joan: 938331010
    • Pilar Cots: 619001122
    • Florenci Martín: 938330099
    • Òscar Tabuada: 666000111
  2. Els següents professors han canviat les seves adreces. Actualitza-les a la taula corresponent. Vigileu que aquí haureu de canviar més d'un camp: l'adreça i la població, i de retruc el CP (el busqueu a internet).
    • Enric Mieza: c. Swing, 22 (Manresa)
    • Jordi Lemonche: c. Santa Maria, 10 (Berga)
    • Anna Coromines: c. Eivissa, 99 (Tàrrega)
    • Maite Soler: c. Santa Tecla (Vic)
  3. Els següents alumnes han repescat alguna assignatura i s'ha d'actualitzar les dades de cada UF de l'alumne a la columna de qualificacio_extraordinaria:
    1. Per la UF1 de l'assignatura de "Muntatge i manteniment d'equips".
      • Francesc Alonso: 5
      • Xesco Martínez: 4
      • Sandra Esteve: 6
      • Pere Portabella: 3
  4. S'ha acabat una nova UF de l'assignatura "Xarxes Locals":
    1. Notes (regulars) de la UF2 "Configuració de commutadors...":
      • Francesc Alonso: 4
      • Robert Baltasar: 5
      • Pilar Cots: 5
      • David Dalmau: 7
      • Sandra Esteve: 6
      • Florenci Mart�n: 2
      • Xesco Mart�nez: 8
      • N�ria L�pez: 10
      • Pere Escribano: 4
      • Mohamed Alhamam: 5
      • S�nia P�rez:4
      • Snatam Kaur: 7
      • �scar Tabuada: 3
      • Pere Portabella: 2
      • Ramon Zapatero Traus: 7
      • Jordi Joan: 5