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;
밑의 방식이 좋다.
--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
세 개를 한 번에 조인하지 못 함. 하나를 조인 하고 만들어진 테이블을 활용해서 다시 조인해야함
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;
이렇게 조인을 해서 하면 불편함.
뷰를 만들어서 관리한다.
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;
원본의 데이터를 추가하거나 삭제하면 뷰도 추가, 삭제가 연쇄적으로 일어난다.
뷰를 건드는 게 아니다.