본문 바로가기
개발/Oracle

[DBeaver] Oracle - Join

by 코딩하는 흰둥이 2023. 3. 19.
  • TABLE 생성
-- 회원 테이블
CREATE TABLE MEMBER (
NAME				VARCHAR2(100) ,
EMP_NO			NUMBER PRIMARY KEY,
DEPT_NO 		NUMBER,
AGE				NUMBER,
ADDR				VARCHAR2(100),
REGIST_DATE 	TIMESTAMP,
BIRTH_DAY		DATE
)

-- 부서 테이블
CREATE TABLE DEPT(
DEPT_NO			NUMBER PRIMARY KEY,
DEPT_NAME		VARCHAR2(100),
ADDR				VARCHAR2(100)
)

 

  • INSERT
* MEMBER
INSERT INTO MEMBER(NAME ,EMP_NO ,DEPT_NO,AGE , ADDR , REGIST_DATE ,BIRTH_DAY)
VALUES('white' ,1000 ,100,1 , '대한민국', SYSTIMESTAMP ,to_date('03-19-2023','MM-DD-YYYY'));

INSERT INTO MEMBER(NAME ,EMP_NO ,DEPT_NO,AGE , ADDR , REGIST_DATE ,BIRTH_DAY)
VALUES('black' ,2000 ,200,2 , '서울', SYSTIMESTAMP ,to_date('03-18-2023','MM-DD-YYYY'));

INSERT INTO MEMBER(NAME ,EMP_NO ,DEPT_NO,AGE , ADDR , REGIST_DATE ,BIRTH_DAY)
VALUES('blue' ,3000, 300,3 , '경기도', SYSTIMESTAMP ,to_date('03-17-2023','MM-DD-YYYY'));

INSERT INTO MEMBER(NAME ,EMP_NO ,DEPT_NO,AGE , ADDR , REGIST_DATE ,BIRTH_DAY)
VALUES('red' ,4000 ,100,4 , '충청도', SYSTIMESTAMP ,to_date('03-16-2023','MM-DD-YYYY'));

INSERT INTO MEMBER(NAME ,EMP_NO ,DEPT_NO,AGE , ADDR , REGIST_DATE ,BIRTH_DAY)
VALUES('yellow' ,5000 ,200,5 , '경상도', SYSTIMESTAMP ,to_date('03-15-2023','MM-DD-YYYY'));

INSERT INTO MEMBER(NAME ,EMP_NO ,DEPT_NO,AGE , ADDR , REGIST_DATE ,BIRTH_DAY)
VALUES('green' ,6000 ,300,6 , '전라도', SYSTIMESTAMP ,to_date('03-14-2023','MM-DD-YYYY'));

INSERT INTO MEMBER(NAME ,EMP_NO ,DEPT_NO,AGE , ADDR , REGIST_DATE ,BIRTH_DAY)
VALUES('silver' ,7000 ,100,7 , '강원도', SYSTIMESTAMP ,to_date('03-13-2023','MM-DD-YYYY'));





* DEPT
INSERT INTO DEPT(DEPT_NO , DEPT_NAME, ADDR) VALUES(100, '영업부', '서울');
INSERT INTO DEPT(DEPT_NO , DEPT_NAME, ADDR) VALUES(200, '개발부', '서울');
INSERT INTO DEPT(DEPT_NO , DEPT_NAME, ADDR) VALUES(300, '인사팀', '서울');

 

  • SELECT

JOIN은 테이블끼리 서로 연관되는 데이터를 가지고서 각각의 테이블에서 데이터를 조회하여 가상의 테이블처럼 만들어서 출력해준다. 

JOIN이 대상이 되는 테이블 끼리는 공통적으로 가지고 있는 컬럼 및 데이터가 있어야 한다.

 

잘못된 예

TABLE 명 2개 조회

구분을 하지 않고 여러개의 TABLE을 조회하면 중복(MEMBER 데이터 7 * DEPT 데이터 3)으로 전체 출력된다.

컬럼명도 전체가 나온 것을 볼 수 있다.

 

올바른 쿼리 예

조회하려는 테이블과 컬럼명을 구분지어줘야한다.

 

JOIN 하려는 TABLE 사이에 INNER JOIN 이 들어가야하며 생략하고 JOIN 만 입력해도 실행된다.

TABLE 을 구분 짓기 위해 TABLE명 뒤에 별칭을 붙이고 TABLE의 별칭을 가지고 컬럼을 조회한다.

JOIN 문에는 WHERE 절 대신 ON을 사용한다.

 

 

SELECT M.NAME , D.DEPT_NO , D.DEPT_NAME , M.AGE FROM 
MEMBER M JOIN DEPT D 
ON M.DEPT_NO = D.DEPT_NO
AND D.DEPT_NO = 100;

-- JOIN / INNER JOIN 같은 의미이다.

SELECT M.NAME , D.DEPT_NO , D.DEPT_NAME , M.AGE FROM 
MEMBER M INNER JOIN DEPT D 
ON M.DEPT_NO = D.DEPT_NO
AND D.DEPT_NO = 100;

'개발 > Oracle' 카테고리의 다른 글

Oracle - INTERSECT  (0) 2023.03.23
[DBeaver] Oracle - LEFT , RIGHT Join  (4) 2023.03.19
[DBeaver] Oracle - Update 수정  (0) 2023.03.19
[DBeaver] Oracle - Delete 삭제  (0) 2023.03.19
[DBeaver] Oracle - Select 조회  (0) 2023.03.19

댓글