[MS-SQL] SELECT INTO

3주 동안 고인물로 지내다가 다시 새로운 물을 가득 넣기로 마음 굳게 먹었다.
요즘 별다르게 배운게 없고 공부한게 없었는데 이게 다 모 사이트 운영때문이다.. 결국은 핑계다 ㅡ,.-^

운영업무를 하다보면 고객의 요청에 의해서 각종 데이터들을 산출해야 한다.
회원정보라던지 매출액등 월말, 분기별로 아주 바쁘게 데이터를 뽑아서 엑셀로 이쁘게 포장해서
고객에게 주면 참 좋아 하신다..^^;

그런데 이런 데이터들을 산출하다 보면 SELECT 된 값들을 다른 테이블에 그 데이터만을 담아서 사용하고 싶은 경우가 있다. 그 중에 또 다른 값을 가져오거나  그 값들로 인해서 또 다른 테이블과 조인을 한다던가 해야 하는 일 말이다.  이런 테이블을 만들지 않으면 쿼리도 늘어나고 속도도 느려지니 헷갈리고 속도도 느려진다.

그래서 이 때  사용할수 있는게 SELECT INTO 이다.
SELECT INTO는 현재 있는 테이블에 있는 내용 전체나 일부를 가져와서 새로운 테이블로 만들 때 사용한다.
기존에 있던 테이블에는 INSERT 시킬수가 없다. 기존 테이블에 INSERT를 시킬려면 SELECT INSERT를 사용하면 된다.

사용법
SELECT * FROM tableName
SELECT * INTO  temp_tableName(새로만들 테이블) FROM tableName

위에 사용법으로 테이블을 만들게 되면 영구적으로 테이블이 생기게 된다.
물론 DROP 명령으로 지워주면 되긴 하지만 잠시만 쓰고 지울 것이라면 굳이 영구 테이블을 만들지 않고 임시테이블을 만들어 사용하면 된다.

임시 테이블은 전역임시 테이블, 세션 임시 테이블 두개로 나뉜다.

만드는방법 사용할 수 있는 범위 삭제되는 시기
일반 테이블 CREATE TABLE 다른 세션에서도 DROP TABLE
세션 임시 테이블
#tablename
해당 세션에서만
세션이 끊어질 때
전역 임시 테이블
##tablename
다른 세션에서도
세션이 끊어질 때
tempdb의 일반 테이블
CREATE TABLE
다른 세션에서도
SQL 서버가 시작 될 때

사용법
SELECT * INTO #tablename FROM table
SELECT * INTO ##tablename FROM table
SELECT * FROM #tablename
SELECT * FROM ##tablename

이렇게 생성 된 테이블은 해당 데이터베이스에 생성되는 것이 아니라 tempdb에 만들어 지며 logout 할 때 자동으로 삭제가 된다.

실무에서는 많이 사용하는지는 모르지만 개인적으로는 정말 많이 사용한다.

참고::
오라클에서는 사용법이 다르다.

CREATE TABLE tableName_temp
AS SELECT * FROM tableName

$(document).ready(function(){
  // 현재 날짜 넣어주기
  $('#datepicker').val($.datepicker.formatDate($.datepicker.ATOM, new Date()));
 
  // 기본타입 로드
  $('#datepicker').datepicker();
 
  // 옵션타입
  $('#datepicker').datepicker({
    dateFormat : 'yy-mm-dd'      // 날짜 타입
  });
});
 
<input type="text" name="datepicker" id="datepicker" value="" />
 
 
※ 플러그인 적용시 필요파일
* jquery-ui-custom.css
* jquery.js

 

아래 2개는 있어도 되는지 안되는지 확인 안해봄.
* ui.core.js
* ui.datepicker.js 


'Temp' 카테고리의 다른 글

개인사업자와 IT 프리랜서를위한 종합소득세 총정리  (0) 2014.11.11
java <-> jsp  (0) 2014.08.05
책 구매예정 리스트  (0) 2014.07.21
이클립스 xml 파일 설정 정보  (0) 2014.07.02
blockUI message 출력  (0) 2014.02.26

날짜에서 지정한 날자형식부분만 추출해줍니다        
        형식: DATEPART(날짜형식, 날짜)
        
        SELECT DATEPART(yy, GETDATE())
        2002

        SELECT DATEPART(mm, GETDATE())
        5

        SELECT DATEPART(dd, GETDATE())
        24

        SELECT DATEPART(hour, GETDATE())
        10

        SELECT DATEPART(mi, GETDATE())
        51

        SELECT DATEPART(ss, GETDATE())
        5

        SELECT DATEPART(dw, GETDATE())
        6


        년/월/일/시/분/초/요일을 숫자로  보여준 예제입니다.

  2.1.4 YEAR() , MONTH() , DAY() 함수         
          
          해당 년,월,일을 각각 뽑아줍니다.
          형식: YEAR(날짜) , MONTH(날짜) , DAY(날짜)

        SELECT YEAR(GETDATE())
        2002

        SELECT MONTH(GETDATE())
        5

        SELECT DAY(GETDATE())
        24



  2.1.5 DATEADD() 함수         
  
          
          DATEADD함수는 날짜에 지정한 만큼을 더합니다.
        형식: DATEADD(날짜형식, 더할 값, 날짜)


        SELECT DATEADD(mm,20,GETDATE())
        2004-01-24 오전 10:51:05


        현재날짜에 월에 20을 더한 날짜를 출력하라.
        
        SELECT DATEADD(dd,100,GETDATE())
        2002-09-01 오전 10:51:05


        오늘부터 100일 후의 날짜를 출력하라.
        

2.1.6 DATEDIFF() 함수         
  
        DATEDIFF함수는 두 날짜사이의 날짜형식에 지정된 부분을 돌려줍니다.
        형식: DATEDIFF(날짜형식, 시작 날자, 끝 날짜)


        SELECT DATEDIFF(dd,GETDATE(),'3000.1.1')
        364369


        현재날짜와 3000.1.1일 사이의 일수는 얼마일까.??
        
        SELECT DATEDIFF(MM,GETDATE(),'2003.1.1')
        8


        현재날짜와 2003.1.1일 사이의 월수는 얼마일까.??

  2.1.7 DATENAME() 함수         
  
        DATENAME함수는 지정한 날짜의 날자형식의 이름을 돌려줍니다.
        형식: DATENAME(날짜형식, 날짜)    

        SELECT DATENAME(mm,GETDATE())
        May

        SELECT DATENAME(dd,GETDATE())
        24

        SELECT DATENAME(dw,GETDATE())
        Friday 


: 출처 : 문학청년 블로그

개요

콜백(Callback)이란 디자인 패턴 중 하나인 옵저버(Observer) 패턴에서 나온 개념으로써 객체의 상태 변화(이벤트)가 발생 하였을 경우에 이러한 사실을 함수를 통해 전달하게 되는데, 이를 콜백 함수라고 한다. 자바스크립트에서 콜백 함수는 키보드나 마우스 클릭과 같은 디바이스 이벤트 뿐만이 아니라 Ajax, 데이터 처리 등 많은 부분에서 사용되고 있다.

이번 강좌에서는 콜백 함수의 기본적인 사용 방법과 좀 더 활용할 수 있는 방법에 대해 알아볼 것이다.
 

기초

출근을 위해 반드시 오전 8시에 일어나야 한다고 가정해보자. 그렇다면 어떻게 일어나야 할까? 첫 번째 방법으로는 생각날 때마다 현재 시간을 확인하는 것이다. 하지만 이 방법은 매우 좋지 않다. 수 없이 현재 시간을 확인해야 될 뿐더러 계속 신경써야 하기 때문에 쉽게 피곤해질 수 있다. 만약에 오전 8시를 알려주는 알람 시계가 있다면 이러한 문제는 해결된다. 주기적으로 현재 시간을 확인하지 않아도 되기 때문에 신경쓰지 않고 푹 잘 수 있다.

콜백 함수는 시계의 알람 기능과 비슷하다고 생각하면 이해하기가 조금 더 쉬울 것이다. (Link)

위의 예제에 정의된 alram 함수는 사용자가 정한 Minutes에 알림 메시지를 보여주는 함수이다. 콜백 함수는 특정 기능을 수행하기 위한 로직과 기능 수행 후 반환되는 결과 값을 가지고 이를 표현하는 로직을 서로 분리 할 수 있다. 이는 뷰(View)의 분리라는 점에서 MVC 패턴과 비슷하다고 볼 수 있다.

최근에 대세가 되버린 jQuery 라이브러리에서 제공하는 많은 함수들의 결과 값이 콜백 형태로 호출된다. 이런 함수들은 이벤트 처리, 애니메이션, Ajax, 콜렉션 등에서 사용된다. 콜백으로 결과 값을 반환하는 함수들은 공통적인 특징이 하나 있는데, 그것은 바로 뷰(View)를 처리하는 시점이 모호하다는 것이다.

 위의 예제를 실행해보면 undefined 값이 출력 된다. $.getJSON 함수가 먼저 호출되더라도 결과 값은 alert 함수보다 늦게 가져오기 때문에 undefined 값이 출력되는 것이다. 물론 약간의 시간 차이를 두어 값을 받을 수도 있다.

 하지만 모두 시간 차이를 두어서 구현할 수는 없다. 가독성이 떨어질 뿐더러 Ajax 호출의 경우 네트워크 상황에 따라 값을 제대로 가지고 오지 못하는 경우도 발생할 수 있다.
 

심화

특정 함수의 반환 값을 콜백으로 넘기는 방법은 위의 예제들을 보면 알 수 있듯이 그렇게 어렵지 않다. 매개 변수를 통해 함수를 받고, 그 함수를 통해 결과 값을 다시 호출하면 되기 때문이다. 하지만 jQuery에서 제공되는 함수들을 보면 단순히 콜백을 통해 결과 값을 넘기지 않는다.

jQuery $.each 함수는 해당 배열의 요소들을 모두 순환하면서 콜백으로 index 값을 넘기는데 이 요소를 콜백 함수의 매개 변수로 넘기지 않고 함수 내에서 this 키워드로 접근한다.

위의 예제를 보면 this 키워드를 통해 test 배열에 포함되어 있는 요소(객체)들을 접근하고, name이란 프로퍼티를 출력하였다. 하지만 어떻게 콜백 함수 안에서 this 키워드를 사용하여 name 프로퍼티를 출력할 수 있었을까?

답을 말하기에 앞서 우선 아래 예제를 보자. (Link)

위의 함수는 매개 변수로 받은 배열을 순차적으로 접근하여 콜백을 통해 각각의 배열 요소들을 넘겨주는 함수를 구현한 것이다. 하지만 현재 위치의 요소를 콜백 함수의 파라메터로 넘겼을 뿐, 콜백 함수 내에서 this로 접근하지는 못한다.

그럼, 콜백 함수 내에서 this 값이 무엇이 찍히는지 확인해보자.

위의 예제를 실행해보면 “[object Window]“라는 메시지가 3번 출력될 것이다. 자바스크립트에서 함수는 정의될 때, 기본적으로 Window 객체의 메소드가 되기 때문에 콜백 함수 내에서 this는 Window 객체가 되는 것이다.

그렇다면 콜백 함수 내에서 배열 요소를 this로 접근하기 위해서는 어떻게 해야 될까? 먼저 이전 강좌에서 다룬 prototype를 사용하여 콜백 함수의 원형을 배열 요소로 변경해주면 된다.

자바스크립트 함수는 클래스이며 자신의 원형을 prototype로 정할 수 있다. 즉, 매개 변수를 통해 받은 콜백 함수는 name 프로퍼티를 가진 객체 자체가 되는 것이다. 하지만 prototype으로 자신의 원형을 해당 배열 요소로 정했다고는 하지만 단순한 콜백 함수 호출로는 콜백 함수 내에서 this 키워드로 접근 할 수 없다.

왜냐하면 자바스크립트 함수는 앞서 말한 것처럼 기본적으로 Window 객체이기 때문이다. 그렇다면 자신만의 고유한 객체가 되기 위해선 어떻게 해야 될까? 그건 바로 new 키워드를 사용하면 된다.

 이유를 설명하기에 앞서 아래 예제를 보자.

위의 예제의 출력 메시지는 “test1 : [object Window]“, “test2 : [object Object]“이다. 앞서 말한 것처럼 자바스크립트 함수는 클래스이기도 하기 때문에 고유한 객체(인스턴스)를 생성할 수 있다. 즉, new 키워드를 사용하여 콜백 함수를 호출하면 Window 객체가 아닌 새로운 객체가 되는 것이다. 단순하게 new 키워드 사용 유무를 “non-static / static” 개념이라고 생각하면 이해하기 쉬울 것이다. 
(본 강좌에서는 static에 대한 설명은 하지 않겠음)

마지막으로 아래 예제는 이때까지 고대해왔던 완성된 each 함수이다. (Link)

 

+ Recent posts