승적이익강 (勝敵而益强)

Update~Select 문장 sample 본문

Database

Update~Select 문장 sample

그녕이 2008. 9. 19. 12:25

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
    SET discount = discount + .10
    WHERE lowqty >= 100

     

 

다른 테이블의 데이터를 이용하여 갱신할 수 있다.

        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
    SET price = price * 2
    WHERE pub_id IN
    (SELECT pub_id
    FROM publishers
    WHERE pub_name = 'New Moon Books')

     

 

단일 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
Comments