Join문을 이용해서 update시..  헷깔리는 경우가 많다..


테이블1  TAB1 ( KEY, COL1)

테이블2  TAB1 ( KEY, COL2)


테이블1의 컬럼 COL1에  테이블1과 테이블2의 KEY값이 동일한 경우 COL2를 업데이트 하는 경우.


JOIN을 이용하지 않는 경우..  

UPDATE TAB1 A 

SET     COL1 = ( SELECT COL2 

                         FROM TAB2

                         WHERE   KEY = A.KEY );


JOIN을 이용하는 경우에는

/*+ BYPASS_UJVC  */  라는 힌트를 이용해서 UPDATE한다.

UPDATE  /*+ BYPASS_UJVC  */

(

    SELECT  A.COL1   COL1

                , B.COL2   COL2

    FROM   TAB1 A

               , TAB2 B

    WHERE   A.KEY = B.KEY

)

SET COL1 = COL2

INNER JOIN 한 후에, 수정할 필드 COL1과 대상 필드 COL2를 조회해서 UPDATE한다.


OUTER JOIN한 후에, UPDATE를 해야 하는 경우에는 

    WHERE   A.KEY = B.KEY(+)

 OUTER JOIN을 해서 UPDATE가 가능하다.



SQL Server에서는..  join update가 좀더 쉽다..  아마도.. ^^

UPDATE  TAB1

SET        COL1 = B.COL2

FROM     TAB1 A INNER JOIN TAB2 B ON A.KEY = B.KEY




'sql' 카테고리의 다른 글

group by에서 문자열 합치기...  (3) 2014.03.31
오라클 년별, 월별 주차 계산...  (0) 2014.03.21
SQL문에서 like 검색.. escape  (0) 2014.03.19
매월 첫번주 월요일 구하기...  (0) 2014.03.17
오라클 TRUNC 함수..  (0) 2014.03.17
Posted by 무세1
,

SQL문에서 like를 이용한 검색..


오라클 WITH문을 이용해서 테스트  해보겠다..

WITH T AS (

SELECT '324324'    COL1, 'ASDDD' COL2 FROM DUAL UNION ALL

SELECT 'AB234C'    COL1, 'AG_%%D' COL2 FROM DUAL UNION ALL

SELECT 'A3424B'    COL1, 'AS_DFD' COL2 FROM DUAL UNION ALL

SELECT 'AB234C'    COL1, 'AS_DDD' COL2 FROM DUAL UNION ALL

SELECT 'A3211C'    COL1, 'AS_DAZ' COL2 FROM DUAL UNION ALL

SELECT 'AB111C'    COL1, 'AG_D%F' COL2 FROM DUAL

)

SELECT * FROM T

WHERE COL1 LIKE 'AB%'


컬럼 COL1 앞 두문자가 AB인 Row를 검색하는 조건이다..

결과는..  

AB234C AG_%%D

AB234C AS_DDD

AB111C AG_D%F


컬럼 COL1 뒤 문자가 4C로 끝나는 Row를 검색하는 조건

SELECT * FROM T

WHERE COL1 LIKE '%4C'

결과는

AB234C AG_%%D

AB234C AS_DDD


컬럼 COL1 두번째  문자가 B로 끝나는 Row를 검색하는 조건

_ : 는 문자 하나를 의미한다.

SELECT * FROM T

WHERE WHERE COL1 LIKE '_B%'

결과는

AB234C AG_%%D

AB234C AS_DDD

AB111C AG_D%F


그런데 COL2 값같이 %, _ 포함되어 있는 컬럼을 검색해야 한다면..  ESCAPE 문을 써주면 된다.

컬럼 COL2 앞문자가 AG_로 끝나는 Row를 검색하는 조건은

SELECT * FROM T

WHERE COL2 LIKE 'AG\_%' ESCAPE '\'

결과는

AB234C AG_%%D

AB111C AG_D%F


ESCAPE 옵션은 백슬래쉬(\)문자를 이스케이프문자로 식별하게 해서 _를 조건으로 인식하게 한다.

Posted by 무세1
,

java로 현재 시간 구할려면..  

System.currentTimeMillis   구한후에..

SimpleDateFormat 으로 원하는 포맷으로 출력하면 된다..


그리고 시간 지연 시키기 위해서는..

Robot이라는 클래스를 이용해서 지연 시킬 수 있다..


TimeDelayTest.java

import java.awt.AWTException;

import java.awt.Robot;

import java.text.SimpleDateFormat;

import java.util.Date;



public class TimeDelayTest {


    public static void main(String arg[]) {

        

        SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");

        

        long start = System.currentTimeMillis() ; 

        System.out.println("start=" + dayTime.format(new Date(start)));

        

        //5초 지연

        DelayTime(5);

        

        long end = System.currentTimeMillis(); 

        System.out.println("end  =" + dayTime.format(new Date(end)));

        

        System.out.println((end-start)/1000 +"초지연");

        

    }

    

    public static void DelayTime(int delaySec) {

        

        Robot robot = null;

        try {

            robot = new Robot();

        } catch (AWTException e) {

        }

        robot.delay(delaySec * 1000);

        

    }


}


결과

start=2014-50-18 04:50:17

end  =2014-50-18 04:50:22

5초지연


Posted by 무세1
,