반응형


오늘은~ JOIN절 2탄!


1탄은 ORACLE | JOIN을 사용하는 오라클만의 방법! 에 있습니다~



JOIN은 기본적으로 위의 퍼즐같이 두개 이상의 테이블의 컬럼을 합쳐서

하나의 테이블처럼 사용하는 방법입니다.


그럼~ 차근차근 따라가 볼까요?



오라클 조인 문법과 1999 ANSI 조인 문법을 모두 이용하여 문제를 풀어보겠습니다.



[ 고객 테이블 ]


고객이름

 나이

  주소 

 총구매액

 추천인

 A

 24

 서울

 30000

 null

 B

 29

 서울

 10000

 A

 C

 26

 파주

 25000

 A

 D

 27

 제주

 1000

 B



[ 주소 테이블 ]


주소 

 관할부서

 서울

 한국 A

 일산

 한국 B

 파주

 한국 C

 제주

 한국 D



[ 등급 테이블 ]


고객등급 

 최소구매액

 최대구매액

 1

 0

 9999

 2

 10000

 19999

 3

 20000

 30000




문제1. 고객 이름, 관할부서, 고객등급을 출력하시오





결과


 고객이름

 관할부서

 고객등급

 A

 한국 A

 3

 B

 한국 A

 2

 C

 한국 C

 3

 D

 한국 D

 1




중요!


TABLE이 3개일 경우 연결고리는 2 ( = 3 - 1) 개 입니다.



오라클 조인 문법에서 JOIN절의 WHERE절은 '조인 조건'으로 사용됩니다.



여기서 주의해야할 점은 1999 ANSI문법의 경우 양쪽에 연결고리가 있는 테이블명을 먼저 작성해야합니다.


또한, 1999 ANSI문법의 경우 오라클 문법과 달리 WHERE절은 그저 '검색 조건' 입니다.


따라서 JOIN절에서 조인 조건을 주기 위해서는 ON절을 사용하여 '조인 조건'을 줄 수 있습니다.




오라클 Database에서는 어떠한 문법을 사용하여도 문제가 없습니다.


하지만,


1999 ANSI 문법의 경우 '조인 조건' ON과 '검색 조건' WHERE이 별개로 구분되어 있기 때문에

보다 가독성이 좋다고 하네요~




추가) using절을 사용한 조인과 natural join



위의 정답 문법을 각각 using 절과 natural join으로 바꾼 SQL문을 먼저 확인하시죠.



 

       SQL> SELECT c.고객이름, a.관할부서, g.고객등급

FROM 고객 c JOIN 주소 a

USING ( 주소 )  

JOIN 등급 g

ON ( c.총구매액 BETWEEN 최소구매액 AND 최대구매액 );





 

       SQL> SELECT c.고객이름, a.관할부서, g.고객등급

FROM 고객 c NATURAL JOIN 주소 a

 JOIN 등급 g

ON ( c.총구매액 BETWEEN 최소구매액 AND 최대구매액 );





먼저 using절에서 주의사항이 있습니다.


 using절에서는 테이블 별칭 즉, c.주소 or a.주소를 사용하지 않습니다.



natural join의 경우 오라클이 알아서 고객 table과 주소 table의 공통의 컬럼(column)을 찾아서 조인을 합니다!


natural join에서 주의할 점은

공통 컬럼이 없는 경우 or data type이 다른 경우 오류가 발생한다는 것입니다.


(참고: data type을 모른다면 여기!)




오늘은 여기까지


내일은 집합 연산자 union으로 돌아올겠습니다!



이 글이 도움되셨다면 아래 공감 꾹~ 



반응형
반응형



Data는 중요하죠!


또한 우리가 data를 이용하기 위해서는


그것을 저장해두고 사용해야 합니다!

 


이러한 Data를 저장하고 관리하는 Database(DB) 시스템에는 다양한 종류가 있습니다.



테이블형식으로 data를 저장하는 관계형 데이터베이스 SQL DB과



SNS 데이터량 증가 등의 이유로 다양한 형태의 data를 저장하기 용이한


비관계형 데이터베이스 NoSQL ('Not Only SQL') 이 있습니다.



Oracle DB의 경우 관계형 DB에 속하며


오픈소스인 Mysql과 달리


많은 기업체에서는 구매하여 사용하는 DB중 하나입니다.



빅데이터 분석가는 Data를 다루는 사람으로서,


Database는 절대 피할 수 없는, 그리고 꼭 필요한 기술이라고 할 수 있습니다.





(흔히 database를 이렇게 표현하더라구여.. 이유는 모르겠음 알고 계신 분은 댓글로 공유해 주세요! )





오늘은 기본 연산자 이외에 존재하는 기타 연산자 중 LIKE연산자에 대해 알아보도록 하겠습니다.



[연산자]


1. 산술 연산자: * (곱하기), / (나누기), + (더하기), - (빼기)


2. 비교 연산자:  >, <, >=, <=, <>, !=, ^=


참고)  <>, !=, ^= 는 각각 같지 않음을 나타낸다.


3. 논리 연산자: and, or, not



[기타 연산자]


1. BETWEEN ... AND 연산자


 2. LIKE 연산자


 3. IN 연산자


 4. IS 연산자




데이터 검색 조건을 기술하는 WHERE절에서


LIKE연산자를 사용하여


지정한 패턴과 일치하는 값을 필드에서 찾을 수 있습니다.

(출처: Microsoft)




우선 우리가 갖고 있는 DB시스템은 직원관리 시스템으로


여기서 사용할 TABLE은 직원 테이블 입니다. (이하 emp라고 부르겠음)



emp TABLE에 들어 있는 컬럼(Columns)은 각각 아래와 같습니다.


EMPNO                사원번호

ENAME                사원이름

JOB                직업

MGR                관리자의 사원번호

HIREDATE        입사일

SAL                월급

COMM                커미션

DEPTNO        부서번호 




여기서 첫 번째 문제!


이름의 첫번째 철자가 S로 시작하는 사원들의 이름을 출력하고 싶다면?





위처럼 작성하면 됩니다. 쉽죠? 



이해가 안된다면 이 아래를 참고하세요






LIKE문


[ WHERE 기준 컬럼명 LIKE 패턴지정 ]



여기서 잠깐! (뚜둔!)



LIKE 연산자를 사용할 때 사용하는 키워드 2개가 있습니다.


1. %


특수문자 %는 여기서 wild card라는 SQL 키워드 입니다


와일드 카드


"이 자리에 무엇이 와도 관계없다!" 그리고 "철자의 갯수가 몇 개가 되어도 관계없다!" 라는 의미를 갖고 있습니다.



단, LIKE 연산자와 함께 쓸 때만 가능하며


평소에는 Percent를 의미하는 % 그대로 인식합니다.



2. _ (under bar)


흔히 언더바라고 불리는 이 키워드는


"이 자리에 무엇이 와도 관계없다!" 그리고 "자릿수는 한 자리여야 한다!"라는 의미를 갖고 있죠.




따라서 첫번째 문제의 답



SQL> SELECT ename

FROM emp

WHERE ename LIKE 'S%';



을 다시 풀어보면,




" 이름의 첫 번째 철자가 S로 시작하는

  (그 이후의 철자 갯수가 몇 개가 되어도 관심없다!)


  사원들의 이름을 출력하라! "



는 의미입니다.






여기서 두번째 문제!



이름의 두번째 철자가 %인 사원의 이름을 출력하고 싶다면?





라고 작성하면 됩니다. 



" 잘 모르겠다! " 라고 하셔도 됩니다! 저도 몰랐으니까요! (당당)




여기서 모르는 가장 큰 이유는!


바로!


ESCAPE를 알지 못했기 때문일테지요~




위 SQL코드의 ESCAPE문은


" m 바로 다음에 나오는 % 는 와일드카드가 아니라 퍼센트를 나타내는 특수문자 '%' 이다. "


라는 의미입니다.



참고) m의 자리에는 어떤 문자가 와도 상관이 없습니다.


단 그경우에는, ESCAPE문 다음에 나올 문자와는 같아야겠죠?




오늘은 여기까지 입니다!... 만!



추가 문제 하나 더 풀어보죠!



이름의 두번째 철자와 세번째 철자가 %인 사원의 이름을 출력하세요!



정답은 각자 풀어보고 댓글로 남겨주세요 ~!


이 글이 도움되셨다면 아래 공감 꾹~ 




반응형

+ Recent posts