JOIN ( INNER JOIN )

이태규·2022년 3월 22일
0

SQL

목록 보기
11/26

inner join

inner join 을 A 와 B에 대해 수행하는 것은, A와 B의 교집합을 말합니다. 벤다이어그램으로 그렸을 때 교차되는 부분입니다.

교집합을 컬럼으로 쓴다.

SELECT * FROM 테이블1, 테이블2 WHERE 테이블1.컬럼 = 테이블2. 컬럼;
SELECT * FROM ITEM1, ORDER1 WHERE ITEM1.ITEMNO=ORDER1.ORDITEM;

컬럼명이 겹치면 오류가 발생함.
*을 써서 하는 것 보다 다 써서 하는 게 좋다.

SELECT ITEM1.ITEMNAME, ITEM1.ITEMPRICE, ORDER1.*
FROM
    ITEM1, ORDER1
WHERE
    ITEM1.ITEMNO=ORDER1.ORDITEM;

밑의 방식이 좋다.

ANSI SQL, 오라클문

--SELECT * FROM 테이블1, 테이블2 WHERE 테이블1.컬럼 = 테이블2. 컬럼;
--이거는 오라클만 될 수도 있음.
--ansi sql( oracle, mysql, mssql ...) 공통의 sql문
--SELECT * FROM 테이블1 INNER JOIN 테이블2 ON 테이블1.컬럼=테이블2.컬럼

ANSI SQL로 바뀌는 과정

FROM 테이블1, 테이블2 WHERE
>> FROM 테이블1  INNER JOIN 테이블2 ON

3번의 조인

세 개를 한 번에 조인하지 못 함. 하나를 조인 하고 만들어진 테이블을 활용해서 다시 조인해야함

SELECT ITEMORDER1.*, MEMBER1.USERNAME, MEMBER1.USERADDR FROM MEMBER1, (
    SELECT 
        ITEM1.ITEMNAME, ITEM1.ITEMPRICE, ORDER1.*
    FROM
        ITEM1, ORDER1
    WHERE
        ITEM1.ITEMNO=ORDER1.ORDITEM
        ) ITEMORDER1
WHERE MEMBER1.USERID=ITEMORDER1.ORDID;

뷰(VIEW)

이렇게 조인을 해서 하면 불편함.
뷰를 만들어서 관리한다.

CREATE OR REPLACE VIEW ORDER1VIEW AS
SELECT ITEMORDER1.*, MEMBER1.USERNAME, MEMBER1.USERADDR FROM MEMBER1, (
    SELECT 
        ITEM1.ITEMNAME, ITEM1.ITEMPRICE, ORDER1.*
    FROM
        ITEM1, ORDER1
    WHERE
        ITEM1.ITEMNO=ORDER1.ORDITEM
        ) ITEMORDER1
WHERE MEMBER1.USERID=ITEMORDER1.ORDID;

원본의 데이터를 추가하거나 삭제하면 뷰도 추가, 삭제가 연쇄적으로 일어난다.
뷰를 건드는 게 아니다.

profile
한 걸음씩 나아가자

0개의 댓글