ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터베이스 조인 조건 반복 동적(2020.06.10)
    데이터베이스 2020. 6. 10. 11:45

    *****조인******

    두 개의 테이블을 하나처럼 봐서 결과를 도출하는 방법. 

     

    INNER JOIN 개념

    - 조인 중 가장 많이 사용됨

    - 일반적인 조인은 이 INNER JOIN을 얘기하는 것임

     

    SELECT <열 목록>

    FROM <첫 번째 테이블>

         INNER JOIN <두 번째 테이블>

         ON <조인될 조건>

    [WHERE 검색조건]

     

    책을 예로 들면

    장르를 아래와 같이 주먹구구식으로 지으면

    IT 전문서적

    it 전문서

    IT 전문  -> 구분테이블

     

    DIVISION ( 구분 테이블 )

    B001  |  IT 전문서적

    B002  |  소설

    B003  |  자기계발서

     

    B001~3 = CHAR(4) 

     

    B001은 한눈에 봤을 때 모르기 때문에 묶어서 보면 장르를 알 수 있다.

    정규화의 종류 중 하나로써 위 두개의 테이블을 조인하면 매칭함으로써 분류가 가능하다. 

     

    내부 조인 (JOIN)

     

    앞에 테이블이 기준이고 뒤에 테이블을 붙여서 매칭된다. FROM뒤에 적은 테이블이 먼저 나오고 그 옆에 INNER JOIN 뒤에 붙은 테이블이 나온다.

    위에서 양 쪽 테이블에 모두 다 있는 userID열을 제외하고 앞에 ' b. ' 와 ' u. ' 은 생략 가능  하지만 JOIN 안에 있는 테이블은 생략이 불가능하다.

     

    세개의 테이블 조인

    테이블 생성 및 데이터 집어넣기 

    외부 조인 (JOIN)

    우리 쇼핑몰에서 구매 안한 놈들을 알고 싶을 때 쓰는게 외부 조인이다. 내부조인은 조인의 조건인 만족되지 않는 행은 출력되지 않지만, 외부 조인은 조건이 만족되지 않는 행까지 출력됨

     

    SELECT <열 목록>

    FROM <첫 번째 테이블 (LEFT  테이블)>

     <LEFT | RIGHT | FULL> OUTER JOIN <두 번째 테이블(RIGHT TABLE)>

          ON <조인될 조건>

    [WHERE 검색조건]

     

    세가지 종류가 있다 (LEFT RIGHT FULL) FULL은 거의 안씀. 골 때린다.

     

    RIGHT OUTER 조인

    위에는 조관우, 김경호, 임재범, 이승기, 윤종신이 안나온다. 기준이 다른 것 오른쪽 (FROM 뒤와 RIGHT OUTER JOIN뒤에를 기준으로) 즉 buyTBL을 기준으로 했기 때문에 기준이 될 것이 없기 때문에 그대로 buyTBL 이 그대로 나온다

     

    stdTbl                                                                                 stdclubTbl

    왼쪽을 기준으로 하기 때문에 가입된 정보가 없으므로 LEFT OUTER 조인 결과가 성시경이 나오는데 오른쪽 테이블에 정보가 없기 때문에 NULL로 출력된다.

     

    RIGHT OUTER 조인은 기준을 바꾸고 싶을 때 쓰는 경우가 많고 LEFT OUTER조인이 많이 쓴다.

     

    CROSS JOIN 안씀

    SELF JOIN 안씀

     

     

     

    UNION, UNION ALL

     

    UNION 은 두 쿼리의 결과를 행으로 합치는 것. 단 중복을 제거한다. UNION 은 중복까지 허용함.

    *데이터타입이 같아야 UNION가능하다. * 굳이 하려면 형변환 CONVERT( VARCHAR, t.num) 잘 쓰진 않음

     

    두 테이블 결합

    중복 제거                                                                                 중복 포함

    EXCEPT 는 첫 번째 쿼리의 결과 중에서, 두 번째 쿼리에 해당하는 것을 제외하기 위한 구문이다. 

     

    IF ELSE

     

    IF 부울식표현

       BEGIN

           문장

       END

    ELSE

       BEGIN

           문장

       END

     

    주의할점은 비교 연산자 c# 에서는 == 이지만 SQL SERVER 는 = 만 쓴다. 대입도 = 비교도 = 

    == 쓰지않는다.

     

    CASE WHEN THEN

    print 로도 출력 가능

     

    아우터 조인 부분에 아래와 같이 바꿔도 똑같다.

    FROM userTBL AS b

              LEFT OUTER JOIN buyTBL AS b

     

     

    반복문 WHILE, BREAK, CONTINUE, RETURN

     

    조건문이 참인 동안 계속 반복

    반복문 계속하면 CONTINUE

    반복문 중단하면 BREAK

     

     

    GOTO 안씀 쓰면 안좋음

     

     

    WAITFOR

     

     

    TRY/CATCH 에러핸들링 나중에

     

    EXEC(동적 SQL)

    저장 프로시저를 실행할 때 쓰는 명령

     

    동적 쿼리 ' ~ ' 안에 있는 쿼리문이 동작한다.

     

    SET @curDate = FORMAT(GETDATE(), 'yyyyMMddhhmmss');

    SET @sql = 'CREATE TABLE testTBL_' + @curDate

    SET @sql += '(Id int, name NCHAR(10);'

     

    EXEC @sql 로 동적으로 바뀌는 시간을 테이블의 이름으로 활용할 수 있다.

Designed by Tistory.