승적이익강 (勝敵而益强)
Update~Select 문장 sample 본문
UPDATE table_a
SET column_a = column_b
WHERE userid IN (SELECT userid
FROM b)
UPDATE table_a
SET (column_1, column__2) = (SELECT column_a, column_b
FROM table_b
WHERE join_column_1 = table_a.join_column_a);
UPDATE table_a
SET column_1 = (SELECT COLUMN
FROM table_b
WHERE userid = table_a.userid);
UPDATE table_a
SET (column_1) = (SELECT COLUMN
FROM table_b
WHERE userid = table_a.userid AND url IS NOT NULL);
그리고 밑의 경우는 MSSQL 의 경우인데
SQLER.PE.KR 의 강좌에서 따온 절이다. 참고 할 만한 사항이 정리되어 있다.
유의해야 할 점은 오라클의 SET(COL_1, COL_2) = (SELECT A, B FROM ...... )
이 구문이 MSSQL에는 존재 하지 않는다.
이 구문이 2000 버전까지 지원하지 않음으로 인해서 얼마나 많은 불편을 겪었는지 모른다.
2005 버전은 아직 모르겠다.
테이블이 이미 존재하는 행 데이터를 변경한다.
UPDATE{table_name | view_name}
SET[{table_name | view_name}]
column_name = expression[, column_name = expression...]
[WHERE clause]
- SET
- 변경할 컬럼과 값을 명시한다.
- WHERE
- 변경될 행을 명시한다.
- UPDATE문이 무결성 제약을 위배한다면 갱신은 이루어지지 않는다.
UPDATE discounts
|
다른 테이블의 데이터를 이용하여 갱신할 수 있다.
UPDATE rable_name [(column_list)]
SET column_name
(SELECT column_name
FROM table_list
WHERE search_conditions)
WHERE clause
- 외부 WHERE절은 수정될 행을 결정한다.
- 내부 WHERE절은 사용될 데이터를 결정한다.
중첩 SELECT 문은 단일 값을 반환하는 경우에만 의미가 있다.
- 단일 값을 반환하지 않는 경우는 계산 함수를 사용해야 한다
UPDATE rable_name [(column_list)]
SET column_name
(SELECT column_name
FROM table_list
WHERE search_conditions)
WHERE clause
- 외부 WHERE절은 수정될 행을 결정한다.
- 내부 WHERE절은 사용될 데이터를 결정한다.
중첩 SELECT 문은 단일 값을 반환하는 경우에만 의미가 있다.
- 단일 값을 반환하지 않는 경우는 계산 함수를 사용해야 한다.
UPDATE titles
|
단일 update문은 같은 행을 두 번 이상 갱신하지 않는다.
- 갱신중 발생하는 로그 양을 최소화하기 위해서
중첩되는 SELECT 문의 FROM절에 유의해야 한다.
- UPDATE의 대상 테이블이 FROM절에 나타나는 경우에 원하지 않는 동작을 할 수 있다.
'Database' 카테고리의 다른 글
날짜 계산 SQL문 예시 (0) | 2008.09.19 |
---|---|
일정 문자가 등장하는 개수를 세고 싶을때 (0) | 2008.09.19 |
조인방식 (0) | 2008.09.19 |
해당월(1일~말일)의 일자 생성 (0) | 2008.09.19 |
RANDOM 숫자 생성 (0) | 2008.09.19 |