맨위로가기

Update (SQL)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

UPDATE (SQL)는 SQL 데이터베이스에서 테이블의 기존 데이터를 수정하는 데 사용되는 SQL 명령어이다. UPDATE 문은 UPDATE 키워드, 변경할 테이블명, SET 절(변경할 열과 새로운 값 지정), WHERE 절(선택적, 특정 조건 만족 행만 업데이트)로 구성된다. 사용자는 테이블 및 열에 대한 갱신 권한을 가져야 하며, 갱신 후의 값은 제약 조건에 위반되지 않아야 한다. UPDATE는 단일 열 또는 여러 열을 동시에 변경할 수 있으며, 서브쿼리 및 JOIN을 활용하여 복잡한 업데이트를 수행할 수 있다.

더 읽어볼만한 페이지

  • SQL 키워드 - TRUNCATE (SQL)
    TRUNCATE는 SQL에서 테이블 내의 모든 데이터를 빠르게 삭제하는 명령어로, 외래 키 제약 조건 무시, 테이블 잠금 방식, 트랜잭션 처리 방식 등 DELETE 명령어와 차이를 보이며, WHERE 절을 사용할 수 없어 테이블의 모든 행을 삭제하고, 일부 데이터베이스 시스템에서는 롤백이 불가능할 수 있다.
  • SQL 키워드 - Null (SQL)
    Null은 SQL에서 데이터베이스 테이블 열의 값 부재를 나타내는 특별한 표식으로, 0이나 빈 문자열과 구별되며 삼진 논리와 관련된 특별한 처리 방식으로 인해 데이터베이스 설계 및 쿼리 작성 시 주의가 필요하고 SQL 표준 구현에 대한 논쟁이 존재한다.
Update (SQL)
데이터베이스 명령어
종류데이터 조작어
SQL 표준SQL
설명데이터베이스 내의 기존 데이터를 수정하는 명령이다.
구문
기본 구문UPDATE 테이블_이름 SET 열1 = 값1, 열2 = 값2, ... WHERE 조건;
설명테이블에서 특정 조건을 만족하는 행의 열 값을 변경한다.
사용법
예시UPDATE 직원 SET 봉급 = 50000 WHERE 부서 = '영업';
설명영업 부서에 속한 직원들의 봉급을 50000으로 변경한다.
관련 명령어
관련 명령어SELECT
INSERT
DELETE

2. 기본 구문 및 사용법

`UPDATE` 문은 테이블에 존재하는 기존 행의 데이터를 수정하는 데 사용된다. 기본적인 구문 형식은 다음과 같다.



UPDATE 테이블명

SET 열_이름1 = 값1,

열_이름2 = 값2,

...

WHERE 조건식;


  • `UPDATE` 키워드 뒤에는 수정할 데이터가 있는 테이블의 이름을 명시한다.
  • `SET` 절에는 변경할 열의 이름과 새로운 값을 지정한다. 등호(=)를 사용하여 열에 값을 할당하며, 여러 열을 동시에 업데이트하려면 쉼표(,)로 구분하여 나열한다. 값에는 상수, 표현식, 또는 다른 열의 값을 사용할 수도 있다.
  • `WHERE` 절은 업데이트할 행을 선택하는 조건을 지정한다. 이 절은 선택 사항이지만, 만약 `WHERE` 절을 생략하면 테이블의 모든 행이 `SET` 절에 지정된 값으로 업데이트되므로 사용에 매우 주의해야 한다. 특정 조건을 만족하는 행만 수정하고자 할 때 반드시 사용해야 한다.


정상적으로 `UPDATE` 문이 실행되기 위해서는 몇 가지 조건이 충족되어야 한다.

  • 사용자는 해당 테이블과 수정하려는 열에 대한 `UPDATE` 권한을 가지고 있어야 한다.
  • 데이터를 수정한 후의 값이 테이블에 정의된 제약 조건을 위반하지 않아야 한다. 예를 들어, 기본 키 제약, UNIQUE 제약, CHECK 제약, NOT NULL 제약 등을 만족해야 한다.

2. 1. 예제

''shboard'' 테이블에서 ''C2'' 열 값이 'a'인 모든 행의 ''C1'' 열 값을 1로 변경한다.



UPDATE shboard SET C1 = 1 WHERE C2 = 'a';



''T'' 테이블에서 ''C2'' 열 값이 'a'인 모든 행의 ''C1'' 열 값을 9로, ''C3'' 열 값을 4로 변경한다. 하나의 `UPDATE` 문으로 여러 열을 동시에 업데이트할 수 있다.



UPDATE T SET C1 = 9, C3 = 4 WHERE C2 = 'a';



''T'' 테이블에서 ''C2'' 열 값이 'a'인 행의 ''C1'' 열 값을 1 증가시킨다.



UPDATE T SET C1 = C1 + 1 WHERE C2 = 'a';



''T'' 테이블에서 ''C2'' 열 값이 'a'인 행의 ''C1'' 열 값 앞에 "text" 문자열을 추가한다. (데이터베이스 시스템에 따라 문자열 연결 연산자가 `||` 또는 `+` 등이 될 수 있다.)



UPDATE T SET C1 = 'text' || C1 WHERE C2 = 'a';



''T2'' 테이블에서 ''C4'' 열 값이 0인 행들의 ''C3'' 열 값 목록에 ''T1'' 테이블의 ''C2'' 열 값이 포함되는 경우에만, ''T1'' 테이블의 ''C1'' 열 값을 2로 변경한다. `WHERE` 절에 서브쿼리를 사용할 수 있다.



UPDATE T1

SET C1 = 2

WHERE C2 IN ( SELECT C3

FROM T2

WHERE C4 = 0);



조건절과 JOIN 문을 함께 사용할 수도 있다. 다음은 `articles` 테이블과 `classification` 테이블을 `articleID` 기준으로 조인하여, `classID`가 1인 데이터의 `updated_column` 값을 변경하는 예제이다. 일부 데이터베이스 시스템에서는 다음과 같이 비표준 `FROM` 절 사용을 허용하기도 한다.



UPDATE a

SET a.updated_column = updatevalue

FROM articles a

JOIN classification c

ON a.articleID = c.articleID

WHERE c.classID = 1;



오라클 시스템에서는 다음과 같은 구문을 사용할 수 있다. (''classification.articleID''에 인덱스가 있다고 가정)



UPDATE

(

SELECT *

FROM articles

JOIN classification

ON articles.articleID = classification.articleID

WHERE classification.classID = 1

)

SET updated_column = updatevalue;



테이블 이름이 길거나 복잡한 경우 별칭(Alias)을 사용할 수 있다.



UPDATE MyMainTable AS a

SET a.LName = 'Smith'

WHERE a.PeopleID = 1235;


3. 고급 활용

`UPDATE` 문은 기본적인 데이터 수정 외에도 다양한 방식으로 활용될 수 있다.


  • 특정 조건 만족 시 업데이트: WHERE 절을 사용하여 특정 조건을 만족하는 행의 데이터만 선택적으로 변경할 수 있다. 예를 들어, 테이블 `T`에서 `C2` 열의 값이 'a'인 행의 `C1` 열 값을 1로 설정하는 경우는 다음과 같다.

:


UPDATE T

SET C1 = 1

WHERE C2 = 'a';


  • 여러 열 동시 업데이트: 하나의 `UPDATE` 문으로 여러 열의 값을 동시에 변경할 수 있다. 쉼표(,)로 구분하여 설정할 열과 값을 나열한다. 예를 들어, 테이블 `T`에서 `C2` 열 값이 'a'인 모든 행에 대해 `C1` 열 값을 9로, `C3` 열 값을 4로 설정한다.

:


UPDATE T

SET C1 = 9,

C3 = 4

WHERE C2 = 'a';


  • 기존 값 기반 업데이트: 특정 열의 현재 값을 기반으로 새로운 값을 계산하여 업데이트할 수 있다. 예를 들어, `C1` 열의 값을 1 증가시키거나, 문자열을 앞에 추가하는 경우가 있다.

:

  • - C1 열 값 1 증가

UPDATE T

SET C1 = C1 + 1

WHERE C2 = 'a';

  • - C1 열 값 앞에 'text' 추가 (데이터베이스 시스템에 따라 문자열 연결 연산자가 다를 수 있음, 예: || 또는 +)

UPDATE T

SET C1 = 'text' || C1

WHERE C2 = 'a';


  • 복합 조건 사용: AND, OR 등의 논리 연산자를 사용하여 여러 조건을 결합한 복잡한 조건절을 만들 수 있다.

:


UPDATE T

SET A = 1

WHERE C1 = 1

AND C2 = 2;


  • 테이블 별칭 사용: 테이블 이름이 길거나 JOIN 등으로 인해 쿼리가 복잡해질 경우, 테이블에 별칭(alias)을 부여하여 쿼리를 간결하게 작성할 수 있다.

:


UPDATE MyMainTable AS a

SET a.LName = 'Smith'

WHERE a.PeopleID = 1235;



더 복잡한 업데이트 로직, 예를 들어 다른 테이블의 데이터를 참조하여 업데이트하는 경우는 서브쿼리나 JOIN 구문을 활용하여 구현할 수 있다.

3. 1. 서브쿼리 활용

WHERE 절에서 서브쿼리(SELECT 문의 결과)를 사용하여 다른 테이블의 데이터를 기반으로 업데이트 조건을 지정할 수 있다.

다음 예시는 테이블 T2에서 C4 열의 값이 0인 모든 행의 C3 열 값을 가져온다. 그리고 테이블 T1에서 C2 열의 값이 앞서 가져온 C3 값 목록 중 하나와 일치하는 행을 찾아, 해당 행의 C1 열 값을 2로 변경한다.



UPDATE T1

SET C1 = 2

WHERE C2 IN ( SELECT C3

FROM T2

WHERE C4 = 0);



이처럼 서브쿼리를 활용하면 다른 테이블의 특정 조건을 만족하는 데이터를 기준으로 현재 테이블의 데이터를 업데이트하는 복잡한 로직을 구현할 수 있다.

3. 2. JOIN 활용

`UPDATE` 문에서 조건절과 JOIN 문을 함께 사용할 수 있다. 이를 통해 다른 테이블의 값에 기반하여 특정 테이블의 데이터를 업데이트하는 것이 가능하다.[1][2]

예를 들어, `articles` 테이블과 `classification` 테이블을 `articleID`로 조인하고, `classification` 테이블의 `classID`가 1인 행에 해당하는 `articles` 테이블의 `updated_column` 값을 특정 값(`updatevalue`)으로 변경하는 경우는 다음과 같다.



UPDATE a

SET a.updated_column = updatevalue

FROM articles a

JOIN classification c

ON a.articleID = c.articleID

WHERE c.classID = 1



일부 데이터베이스 시스템에서는 위와 같은 `FROM` 절 사용이 비표준적일 수 있다. 오라클 시스템에서는 다음과 같은 방식으로 작성할 수 있다 (이 예제는 `classification.articleID`에 인덱스가 있다고 가정한다).



UPDATE

(

SELECT *

FROM articles

JOIN classification

ON articles.articleID = classification.articleID

WHERE classification.classID = 1

)

SET updated_column = updatevalue



다른 테이블과 결합한 결과에 따라 업데이트를 수행하는 방법에는 서브 쿼리(SELECT 문의 결과)를 사용하는 방법과 JOIN 표현식을 사용하는 방법이 있다. 다음 예는 테이블 `t1`의 `a2` 열 값이 테이블 `t2`의 `b1` 열 값이 0인 레코드들의 `b2` 열 값 중 하나와 일치할 경우, `t1` 테이블의 `a1` 열 값을 2로 설정하는 두 가지 방법을 보여준다.
서브 쿼리 사용

UPDATE t1

SET a1 = 2

WHERE a2 IN (SELECT b2 FROM t2 WHERE b1 = 0);


조인 사용

UPDATE t1

SET a1 = 2

FROM t2

WHERE t1.a2 = t2.b2 AND t2.b1 = 0;


4. 잠재적 문제점

핼러윈 문제를 참조하라. 특정 종류의 UPDATE 문은 WHERE 절과 하나 이상의 SET 절이 얽힌 인덱스를 사용할 때 무한 루프에 빠질 수 있다.

참조

[1] 웹사이트 simplified from this page http://dev.mysql.com[...]
[2] 웹사이트 UPDATE http://www.postgresq[...] 2012-01
[3] 웹사이트 SQL - Update a table column, then the other column with updated value of the former. MySQL / PostgreSQL differ https://stackoverflo[...]
[4] 웹사이트 simplified from this page http://dev.mysql.com[...] 2010-12-30
[5] 웹사이트 http://www.postgresq[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com