1. Cartesian Product(카티션 곱)

   : Join 조건이 없이 그대로 붙이는 것 (참조되는 테이블의 행 수의 곱이 결과값이 된다.) <- 그래서 카티션 곱인듯ㅋ



2. Equip Join 

   : 흔히 쓰는 Join (동일한 값으로 Join 걸어 줄 때)



3. Non-Equip Join 

   : 잘 안쓰일듯한 Join (범위로 Join 걸어 줄 때)  [ex] BETWEEN A AND B



4. Outer Join (덱스가 있어도 Full Scan을 하므로 속도가 너무 느려짐!! 안쓰길 권장!!!)

   (1) LEFT OUTER JOIN (왼쪽에 있는 테이블을 다 보고 싶을 때)  

      [ex] 왼쪽 테이블에 Join으로 엮이는 컬럼이 null 값이 있다던지..

   (2) RIGHT OUTER JOIN (오른쪽에 있는 테이블을 다 보고 싶을 때)

   


5. Self Join

   : 동일한 테이블을 두개를 쓰고 Alias를 달리 해서 지지고 볶는 일.

    [EX] ... FROM EMPLOYEE A JOIN EMPLOYEE B ON A.MANAGER_ID = B.EMPLOYEE_ID ...



6. Sub Query (참고로 Sub Query는 데이터가 적을 때 빠른긴 함) 

   (1) 두 번 조건을 줘야할 때 유용하게 쓸 수 있는데, Join이 빠를지 얘가 빠를지를 고민해서 쓰도록 합시다!

   (2) 밑에 EX에서 괄호 사이의 쿼리가 다중행 리턴 시, 사용하는 것들 - IN , >ANY , <ANY , <ALL , >ALL (잘 안쓰일듯..)

   [EX] ... FROM EMPLOYEE WHERE MANAGER_ID = (SELECT EMPLOYEE_ID ...) ...


날짜를 String 형태로 그냥 보여주는 형태로만 나타내면 좋을텐데..

 

날짜 연산이 들어가면 DateTime을 써야되더라고요.. 그래서 간략하게 DateTime에 대해서 정리해보겠습니다.

 

 

 

1. 현재시간을 출력해보겠습니다.

 

  DateTime now;              // 날짜 변수 선언(어차피 현재시간 넣을것이니 임의로 now..)

  now = DateTime.Now;    // 현재시간

 

  Console.WriteLine(now);  // 현재시간을 표현해줍니다.

 

 

2. 현재 시간을 DateTime 변수에 넣어서 년, 월, 일 등으로 분리 해보겠습니다.

   (비주얼 스튜디오에서는 "now."까지 입력하면 아래와 같은 리스트가 나올 것입니다.)

 

  [ex] now.Year  ,  now.Month  ,  now.Day.... 등등

 

 .Year   

현재 년도

 .Month

현재가 몇 월

 .Day    

현재가 몇 일

 .DayOfWeek

현재가 몇 주인지

 .DayOfYear

1년 중 몇 일째인지

 .TimeOfDay

금일 자정부터 현재까지 몇시간째인지

 .Hour

현재 시

 .Minute

현재 분

 .Second

현재 초

 

 

3. 시간을 연산해보겠습니다.

 

  3-1. 연단위 연산     [EX] now = DateTime.Now.AddYears(7);       // 7년을 더함

 

  3-2. 월 단위 연산    [EX] now = DateTime.Now.AddMonths(7);    // 7개월을 더함

 

  3-3. 일 단위 연산    [EX] now = DateTime.Now.AddDays(7);       // 7일을 더함 

 

  3-4. 시간 단위 연산 [EX] now = DateTime.Now.AddHours(7);      // 7시간을 더함

 

  3-5. 분 단위 연산    [EX] now = DateTime.Now.AddMinutes(7);   // 7분을 더함

 

  3-6. 초 단위 연산    [EX] now = DateTime.Now.AddSeconds(7);  // 7초를 더함

 

 

 

이상입니다^^


ROWNUM을 활용하여 간단하게 순번을 지정 할 수 있기 때문에 간편하게 순번들을 먹일것입니다.

 

(EX) "ABC" TABLE

 

A

B

C

TEST12

TESTTEST12

TESTTESTTEST12 

TEST123

TESTTEST123

TESTTESTTEST123 

 

 

 -> SELECT ROWNUM, A, B, C FROM ABC

 

ROWNUM 

 1

 TEST12

 TESTTEST12

TESTTESTTEST12 

 2

 TEST123

 TESTTEST123

TESTTESTTEST123 

 

 

하지만...

 

ORDER BY를 사용한다면 상황은 달라집니다.

 

왜냐?

 

ROWNUM이 ORDER BY 보다 우선순위가 앞서기 때문이죠. (ROWNUM으로 순번 먹히고 ORDER BY로 재정렬..)

 

 

 

위 상황에서 대처하는 방법

 

=> RANK 함수를 활용하여 순번을 임의로 정의해주면 됩니다.

 

 

※ A컬럼을 기준으로 순번을 먹이는 예입니다.

 

(EX) SELECT (RANK() OVER(ORDER BY A)) ROWNUMS, A, B, C FROM ABC

 

 

 

 

정상적으로 출력되는 모습을 보실 수 있을 것입니다 ^^

 

+ Recent posts