Update (SQL)
"오늘의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