InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial SQL
Introducción SQL
El lenguaje SQL
Componentes del lenguaje SQL
Tablas
Indices
Vistas
Consultar datos. SELECT
Insertar datos. INSERT
Borrado de datos. DELETE
Actualización de datos. UPDATE
Consultas combinadas. JOINS
Consultas agregadas
Subconsultas
También puedes ver ...
Instalar SQL server enterprise en Vista o XP
¿Qué es el Collation en SQL ?
Como encriptar o cifrar cadenas y campos en SQL server 2005 ENCRYPTBYPASSPHRASE y DECRYPTBYPASSPHRASE
SQL Prompt - Intellisense para SQL Server
Borrado de datos. DELETE
Consultas agregadas
Introducción SQL
El lenguaje SQL
Componentes del lenguaje SQL
Tablas

Afiliados
La Web del programador
MundoProgramacion


 

Actualización de datos.

La sentencia UPDATE.

    Para la actualización de datos SQL dispone de la sentencia UPDATE. La sentencia UPDATE permite la actualización de uno o varios registros de una única tabla. La sintaxis de la sentencia UPDATE es la siguiente 


UPDATE
 <nombre_tabla>
SET  <campo1> = <valor1>
        {[,<campo2> = <valor2>,...,<campoN> = <valorN>]}
[ WHERE <condicion>];

    Las siguientes sentencias actualizan los datos de la tabla tCoches con los valores de la tabla tMarca obtenidos anteriormente en la página dedicada a la inserción de datos


UPDATE
 tCoches
SET  marca = '1'
WHERE marca = 'FORD';


UPDATE tCoches
SET  marca = '2'
WHERE marca = 'RENAULT';


UPDATE
 tCoches
SET  marca = '3'
WHERE marca = 'SEAT';

    Notese que los valores para el campo marca aparecen entrecomillados, ya que es un campo de tipo varchar. Los valores con los que actualicemos los datos deben ser del tipo del campo.

    Un aspecto a tener en cuenta es que los campos que forman la primary key de una tabla sólo se podrán modificar si los registros no están referenciados en ninguna otra tabla. En nuestro caso sólo podremos modificar la matrícula de un coche si no tiene registros asociados en la tabla tAlquileres.

Esto puede causar poblemas, ya que podríamos habernos equivocado al dar de alta el coche en la tabla tCoches y detectar el error despues de alquilar el coche. En tal caso tendríamos dar de alta un nuevo coche con la matrícula correcta, actualizar los registros de la tabla alquileres y por último borrar el registro erroneo de la tabla tCoches. Este proceso puede ser bastante complicado en el caso de que existiran más relaciones con la tabla. Se podría considerar que la clave primaria de la tabla esta mal definida y que la matrícula no debe ser el elemento que identifique el coche. Una alternativa seria crear un código autonumérico para la tabla tCoches que realizará las veces de clave primaria y crear un índice único para la matrícula, este diseño tambien tiene sus "pegas", por lo que debemos decidir que modelo utilizar, y seleccionar las claves primarias con sumo cuidado.  


Uso de subconsultas con UPDATE

    El uso de subconsultas es una técnica avanzada de consulta que veremos con detalle más adelante, pero que tratamos aquí de forma introductoria.

    Hasta ahora hemos actualizado los datos con valores que conocemos de antemano, ¿pero qué ocurre cuando esos datos deben tomarse de otra tabla de la base de datos?.Podríamos diseñar un programa que recorriera toda la tabla y buscará el valor adecuado para cada registro y lo actualizase. Sin duda es una solución, y en ocasiones casí la única, pero es una solución cara y compleja que además exige que conozcamos algún otro lenguaje de programación. Para estos casos podemos utilizar subconsultas con la sentencia UPDATE

    La sintaxis es la siguiente:


UPDATE
 <nombre_tabla>
SET  <campo1> = <valor1> | <subconsulta1> 
        {[,<campo2> = <valor2> | <subconsulta2>
          ,...
          , <campoN> = <valorN> | <subconsultaN>]}
[ WHERE <condicion>];

   Como puede verse la sintaxis es practicamente igual a la sintaxis del la sentencia UPDATE, con la salvedad de que podemos utilizar subconsultas en lugar de valores al asignar los campos. De forma generica podemos decir que las subconsultas son consultas SELECT incluidas dentro de otra sentencia SQL.

   Las siguientes sentencias UPDATE son equivalentes:


Utilizando sentencias UPDATE normales:
UPDATE tCoches
SET  marca = '1'
WHERE marca = 'FORD';
UPDATE tCoches
SET  marca = '2'
WHERE marca = 'RENAULT';
UPDATE tCoches
SET  marca = '3'
WHERE marca = 'SEAT';
Utilizando sentencias UPDATE combinadas con subconsultas:
UPDATE tCoches
SET  marca = (SELECT CODIGO FROM tMarcas 
              WHERE tMarcas.Marca = tCoches.Marca )
WHERE marca IN ('FORD','RENAULT','SEAT');

    Por cada registro de la tabla tCoches se ejecutará la subconsulta, actualizando el campo marca a el valor del código de la marca en la tabla tMarcas.

    El uso de subconsultas para actualizar datos tiene algunas limitaciones:

  • La subconsulta sólo puede devover un único campo.
  • La subconsulta sólo puede devolver un sólo registro.
  • El tipo de datos devuelto por la subconsulta debe ser del mismo tipo que el campo al que estamos asignando el valor.
  • No todos los sistemas de bases de datos permiten usar subconsultas para actualizar datos (Access) aunque si una buena parte de ellos (ORACLE, SQL Server, Sybase ...)

    Pero en nuestro ejemplo el campo codigo de la tabla tMarcas es numérico y el campo marca de la tabla tCoches es texto. ¿Por qué funciona? Muy facil, el motor de la base de datos es capaz de convertir el valor numérico a un valor texto de forma automática, si bien esta es una excepción.

    Ahora que ya tenemos modificado el valor de la marca de los registros, es conveniente modificar su tipo de datos y crear una foreign key contra la tabla tMarcas. Para ello  ejecutaremos las siguientes sentencias.


ALTER TABLE tCoches
alter column marca int not null;

La opcion alter column es propia de SQL Server. Para modificar el tipo de datos de una tabla debemos consultar la ayuda del gestor de bases de datos. 

ALTER TABLE tCoches
add constraint FK_Coches_Marcas foreign key (marca)
references tMarcas (codigo);

Si no recuerda como modificar tablas o crear foreing key pulse AQUÍ .



Inicio | Tutorial SQL Borrado de datos. DELETETutorial SQL Consultas combinadas. JOINS Versión para imprimir Foros de consulta

 
sentencia de eliminacion de lo... por Anónimo
Respuesta recibida el [30/06/2007 10:05:38]
sentencia de eliminacion de los datos

 
Error por Miguel
Respuesta recibida el [27/08/2007 07:58:45]
Esto que esta expicado aca da error en access 2003

 
Miguel por ALex
Respuesta recibida el [10/10/2007 08:13:19]
Miguel mira donde pone No todos los sistemas de bases de datos permiten usar subconsultas para actualizar datos (Access) aunque si una buena parte de ellos (ORACLE, SQL Server, Sybase ...)

 
M por Alex
Respuesta recibida el [23/10/2007 02:01:23]
Estimado Autor del artículo actualización de datos uso de la sentencia update: Refiriéndome a tu artículo, con todo respeto, deberías de poner atención en tus errores gramaticales y ortográficos, ya que son espantosos, sólo por que te dedicas a cultivar a la gente con tus conocimientos de BD, pero sí también ponte a repasar un cursillo de español, sale, cuidate, y revisa eso para que tus artículos sean una fuente de primera mano y no de tercera, ciao.

 
Para Alex por Devjoker
Respuesta recibida el [23/10/2007 03:58:59]
Cuando uno escribe cientos de artículos (en la web hay unos 300 actualmente) algunos errores ortográficos se cometen. En este artículo había uno especialmente llamativo que he corregido.
En cuanto a la gramática creo que es bastante correcta.
De cualquier modo no pretendemos un asiento en la real academia de la lengua, tan solo compartir nuestros conocimientos y experiencias.

 
Gracias por responderme, solo ... por Alex
Respuesta recibida el [26/10/2007 12:07:44]
Gracias por responderme, solo era una sugerencia para tu sitio, ya que una fuente de primera mano resulta difícil de obtener hoy en día en este mundo tan globalizado como este, y siendo una de éstas resulta recomendable para los que habemos en internet, una mejora de la calidad en cuanto a material e innovación, el objetivo que tu tienes con tu sitio, quizá no es el de enseñar a la gente a "realizar cosas" pero me he puesto a navegar en tu sitio y pues valdría la pena sacarle más provecho, ¿no crees esto?, y pues de fuentes que no sean de primera mano como un libro, una revista ó un sitio reconocido hay muchos y pues se trata de que internet tenga mejor calidad en todo, y me refiero desde una simple redacción, hasta el tema que estés tratando, y pues mi comentario lo realicé por que según el currículo que tienes en la parte de abajo se ve que es extenso y pues tu experiencia debería dejar más de que hablar ¿no crees?, bueno es mi punto de vista, cada quien!!, saludos y qué bueno que corrijas los percances, por que no sólo en la ortografía, también en tus ejemplos, yo por lo pronto soy un buen DBA en un centro de investigación en mi país, cuídate, ciao.

 
Y ... por Yamil
Respuesta recibida el [09/11/2007 12:22:21]
Y ... ?

 
dejenlo en paz por deysi
Respuesta recibida el [13/11/2007 09:58:32]
la verdad a mi toda tu informacion me a sido muy util y es responsabilidad de cada quien ver lo que vas ha utilizar y no todas las personas se dan el tiempo de ayudar a otros .

es es lo que opino cuidense¡¡

 
gracias por jozeunico
Respuesta recibida el [16/01/2008 11:56:07]
Pues me ha sido de gran utilidad,aunque tal vez podrias extender o hacer la explicacion ejemplo a ejemplo y proporcionar las tablas para correr los queries, en lo personal lo entendi (bueno la parte que necesitaba) sin muchos problemas, muchas gracias.

 
Los criticones molestan por Cristobal
Respuesta recibida el [20/02/2008 12:32:40]
Estimado autor:

Tu artículo me ha sido muy útil.
Me molesta que haya gente que, en vez de hacer sugerencias constructivas y/o agradecerte por tu desinteresada labor, se ponga a criticar.

 
no hagamos de esto un foro de criticas por Roro
Respuesta recibida el [14/03/2008 05:55:21]
En realidad lainformacion que sale es bastante util para aquellas personas que quieren aprender o estan con alguna dificultad referente a algo y la idea de esto es construir y no destruir...apliquemos buenas vibras y no nos pongamos capciosos (no se si esta bien escrito, que me ayude el personaje de la real academia)...Saludos y gracias por la ayuda.aaaaaadiosss

 
En todo caso... por Jorge
Respuesta recibida el [18/03/2008 09:41:19]
Estoy de acuerdo con el comentario anterior, ya que esta web me ha sido de gran ayudado y me ha sacado de aprietos durante todo el tiempo que me encuentro programando... y para finalizar, felicito a las personajes que crearon esta pag. y gracias por el articulo.-
saludos y adiós
bytes

PS: sigan así

 
bien por oscar
Respuesta recibida el [19/03/2008 04:00:40]
sigue adelante con tus articulos, muy buenos

 
excelnte por alberto
Respuesta recibida el [26/03/2008 07:17:21]
sin palabras excelente

 
Muchas gracias por Alex
Respuesta recibida el [03/04/2008 09:02:56]
Muchas gracias por estos artículos. Me son muy interesantes y no me gustaria que se perdiese esta página. Lo de los errores gramaticales... pues bueno, todos nos equivocamos.
Gracias.

 
muchas gracias por tu pagina por daniel
Respuesta recibida el [16/04/2008 07:32:30]
disculpa que es string sql, como se consulta a la base de datos y que es caja de texto

 
se puede acumular en un UPDATE? por ale
Respuesta recibida el [22/04/2008 12:59:33]
se puede acumular?

por ejemplo

UPDATE tCoches
SET total = total + 20
WHERE marca = 'FORD';


gracias!

 
Felicidades por tus articulos por Miguel
Respuesta recibida el [09/05/2008 10:43:15]
De verdad que me ha sido de ayuda estos ejemplos que dejas en tu web, el compañero que critica, pues dice ser DBA, DATA BASE ADMINISTRATION, bueno no lo creo, ya que se dedico fue a buscar errores ortograficos y gramaticales, cuando su tarea no es esa, sino verificar, sugerir u opinar sobre el tema que se esta hablando, o me disculpo si soy grosero, le dio envidia, pues vio tu codigo tan perfecto, y no le quedo de otra que criticar la ortografia!!!

Bueno Saludos y sigue asi!

 
Felicidades Bueno el articulo por Marko
Respuesta recibida el [29/05/2008 11:20:13]
muy buena la pagina es aprueba de..  como se dice en mi pais .excelente material

 
Sigue adelante... por Hernan
Respuesta recibida el [04/06/2008 11:14:40]
Sigue adelante Pedro! 
Esta muy bueno tu artículo que en verdad me fue mucha utilidad. Lo hice en DB2/400 y funcionó perfecto. Y quien es Alex???? ignoralo. El mundo avanza porque hay personas como tu que comparten lo que saben sin mucho aspaviento, inclusive pones tu foto porque estas en equilibrio. No como otros que se fijan en las formas y no ven el fondo. Saludos desde Peru!

 
Alex por Roberto
Respuesta recibida el [09/06/2008 05:58:19]
Alex, ves a la paja en el ojo ajeno y no la viga en el ojo tuyo.
En tu enunciado, 'por que', debiera de ir junto ¿no? y las comas ayudan mejor a leer una frase, mas que una falta de HORTOGRAFIA. toma geroma..

---
Update (SELECT S.*, T.tipo TS From S, T WHERE S.Tipo_S = T.CodTipSus and S.Anyo = T.Anyo) Set Fecha = to_date ('09/06/2008', 'dd/mm/yyyy') Where Estado=3 and Fecha is null And TS in (1,3)


Esta sql que envio hace referencia a como incluir un FROM en un SELECT de oracle, lo cual no se puede, salvo de esta manera o creando una vista con los from y hacer el update sobre la vista.

Por cierto, ejecutado en SQL PLUS funciona, pero desde VB6, no.
Haciendo el update de una vista sí que funciona, así que así lo dejaré.
Salu2 y gracias a todos 'sin crispación'.

 
eres una persona y yo soy otra... por Anónimo
Respuesta recibida el [25/08/2008 01:21:03]
eres una persona y yo soy otra mejor que tu

 
GHFGH por HGFH
Respuesta recibida el [04/09/2008 12:21:55]
HHGFHFG

 
ayuda por Thot
Respuesta recibida el [17/09/2008 11:29:34]
mmm alguien excepto Alex el sabiondo o ediondo
me pueden decir los secretos del windows vista hhii
y sobre redes
athoted@hot...
gracias
y si scritura sta mal disculpen la falta de practica hihi

 
Al Autor por Thot
Respuesta recibida el [17/09/2008 11:33:29]
tengo acceso a una pagina qure recien se va a publicar si quieres me gustaria publicar ai tus manuales
con un sub dominio ke dices

 
Ayuda por desconocido
Respuesta recibida el [13/10/2008 11:30:53]
Hoa espero y estes bien bueno mira mi duda es la soguiente no me deja actualizar los registros de mi base de datos utilizo el siguiente codigo 
update detallepedido set cantidad=" & CInt(can.Text) & " where fk_pedido=" & CInt(pedido.Text) & " and nombre_pro='" & CStr(nom.Text) & "'
no se si me podrias decr en que estoy mal

 
Adelante por Luis
Respuesta recibida el [03/11/2008 05:11:16]
Saludos a todos, es bueno saber que tenemos mucha gente que nos puede ser de ayuda cuando necesitamos algo y mas aun saber que hay gente que tiene la buena voluntad de dedicar su tiempo a otros para ayudar. Adelante amigo Devjocker, tal parece que la envidia les mata y por eso las malas criticas, pero bueno que mas da, con gente idiota uno se encuentra a diario.
Me parece que lo que esta mal en el codigo anterior es lo siguiente:
update detallepedido set cantidad=' " & CInt(can.Text) & "' where fk_pedido='" & CInt(pedido.Text) & "' and nombre_pro='" & CStr(nom.Text) & "'

Si no me equivoco estas pasando un cosulta por parametros y parece que lo estas haciendo desde Visual.

 
Help me :D por Alberto
Respuesta recibida el [06/11/2008 09:34:40]
Hola buenas , te preguntaba tengo este enunciado:

17.Cambiar los datos de la tienda con NIF '1111-A' igualándolos a los de la tienda con NIF '2222-A'.

La tabla tiene esta estructura
NIF,... MUCHOS CAMPOS. xD
tendria que poner uno a uno como tu ejemplo? y es mas como sabria el registro que debo actualizar? se me a ocurrido esto pero no me funciona ya que me da error sintactico , ni siquiera se si puedo usar una subconsulta en el nombre del campo :S aver si sabes algo plis.

UPDATE TIENDAS
SET (SELECT * FROM TIENDAS
WHERE NIF='1111-A')=(SELECT* FROM TIENDAS WHERE NIF='2222-A');

 
Foro por Alberto
Respuesta recibida el [06/11/2008 09:42:11]
Por cierto estaria muy bien para mejora de este foro que los ultimos comentarios saliensen antes que los primeros por comodidad para el que los tenga que leer.

 
Insert y Update por krl
Respuesta recibida el [13/11/2008 11:49:03]
pueden poner ejemplos de SELECT, por ejemplo: buscar por fechas determinadas, buscar el empleado que mas ha vendido, el producto mas caro y todo eso, en otras palabras BUSQUEDAS que se USAN EN LAS EMPRESAS ya que todos queremos saber eso. para cuando trabajemos No tengamos ningun problema, creo que hablo por TODOS, Espero que Siga adelante la WEB esta muy pero muy interesante, y tb les pediria que hablen sobre PHP :D Muxas gracias saludos desde PERU!

 
SOMO INFORMATICOS NO MAESTROS DE ESPAÑOL por ANONIMO
Respuesta recibida el [24/11/2008 11:06:05]
SOLO QPRQ RECORDARLES QUE SOMOS INFORMATICOS ADEMAS UN EJEMPLO SERIA COMO MANEJAMOS NUESTROS CONCEPTOS TECNICOS COMO POR EJEMPLO DBA UNA PERSONA COMUN Y CORRIENTE NO SABRA QUE ES ASI QUE PURO INFORMATICOS


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial SQL Borrado de datos. DELETETutorial SQL Consultas combinadas. JOINS Versión para imprimir

Actualización de datos. UPDATE
Autor: Pedro Herrarte Sánchez
Visitas: 121451 Fecha de publicación: 22/10/2005
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.

Posee mas de diez años de experiencia trabajando para las principales empresas de España.

Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).

Es fundador, diseñador y programador de www.devjoker.com.




Visitas: 34 | Comentarios: 0 | Archivo: Articulos
Visitas: 108 | Comentarios: 0 | Archivo: Articulos
Visitas: 155 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 33 | Comentarios: 0 | Archivo: Articulos
Categorias: TFS
Visitas: 285 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Basic .NET|C#
Visitas: 838 | Comentarios: 2 | Archivo: Articulos
Categorias: C#|ASP.NET|HTML DHTML|XML|JavaScript|ASP.NET|ASP|PHP|Visual Studio
Visitas: 711 | Comentarios: 1 | Archivo: Articulos
Categorias: Administración|Tutorial SQL
Visitas: 447 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 1051 | Comentarios: 1 | Archivo: Articulos
Categorias: ASP.NET|CSS|ASP.NET
Visitas: 250 | Comentarios: 0 | Archivo: Articulos
Categorias: TFS

Útimos temas recibidos en los foros ...
FORMULARIO ACCESS por jcifuentes ... [Access] 11 29/05/2007
Ysmael por Ysmael ... [SQL] 0 08/01/2009
Reflection por Maurito22 ... [C#] 2 06/01/2009
Programador por Robert ... [ORACLE] 0 07/01/2009
como insertar registros en un formulario de visual basic.net desde la base de datos sql server por orlan ... [SQL Server] 8 09/06/2008
quierocodigo de autogenerado del seguro por edwin garcia ramirez ... [Visual Basic .NET] 0 07/01/2009
Video gratis sobre AJAX con ASP.NET por alexxe ... [ASP.NET] 1 06/01/2009
calcular saldo acumulativo por cben ... [SQL] 5 30/12/2008
comparar 2 campos de 2 tablas usando el like por nani ... [SQL Server] 1 06/01/2009
Apagar ordenador remoto en C# por victoryiyo ... [C#] 1 07/01/2009
numero de AUTOGENERADO IPSS por carlos ... [Visual Basic .NET] 5 30/10/2008
Como mandar mensaje a Celular por Pako ... [C#] 63 13/03/2007

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
03/10/2006 Introduccion a C#    forma parte de...Tutorial C#
22/10/2005 Insertar datos. INSERT    forma parte de...Tutorial SQL
24/07/2006 SQL Dinamico    forma parte de...Tutorial PL/SQL
28/08/2006 Ubuntu en VmWare con VMware Tools
19/09/2007 Triggers en Transact SQL    forma parte de...Tutorial de Transact SQL
26/12/2008 Un control interesante y gratuito para aplicaciones ASP.NET: FreeTextBox!
21/02/2006 Bibliografia
20/03/2008 Funciones integradas de Transact SQL (I)    forma parte de...Tutorial de Transact SQL
01/04/2006 Estructuras de control en PL/SQL    forma parte de...Tutorial PL/SQL
08/09/2007 Funciones en Transact SQL    forma parte de...Tutorial de Transact SQL

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]