오라클에서 view만들 때 column명 중복 오류 및 오라클에서 view만들기 테이블 합치기(view만들기)

kafa·2023년 2월 24일
0

오류수정기

목록 보기
1/4

ordertblview 라는 view를 만들었다.

CREATE OR REPLACE VIEW ordertblview AS
	SELECT 
		m.menuno menuno , m.name menuname , m.price menuprice, m.retaurantphone rp, 
		c.email cusemail,  c.phone cusphone, c.address cusadrs, 
		o.ortherno odrno , o.regdate orrdate , o.cnt odrcnt
	FROM 
    	menu m, customer c, ordertbl o 
	WHERE 
 	   c.email = o.email AND m.menuno = o.menuno;

상위 view에서 만들어진(새로 지정해준) 칼럼명은

c.email cusemail,  c.phone cusphone, c.address cusadrs, 
o.ortherno odrno , o.regdate orrdate , o.cnt odrcnt
		-- cusemail나 cusphone이 새로운 칼럼명이다

해당 view에 그 칼럼의 새로운 이름이 된다.

그러므로

CREATE OR REPLACE VIEW ordertblview1 AS
	SELECT 
		ov.*, r.name rtrname, r.address rtradr
	FROM 
    	ordertblview ov, restaurant r WHERE ov.rp = r.retaurantphone;

ordertblview 와 restaurant으로 새로운 view를 만들 때,
새로운 view를 구성하는 칼럼에 ordertblview 의 칼럼명은 우리가 지정해 준 칼럼명이 들어간다.

	FROM 
    	ordertblview ov, restaurant r WHERE ov.rp = r.retaurantphone;
        -- ordertblview 에서는 rp가 왔고, 
        -- restaurant에서는 retaurantphone이 왔다.

추가로 여기에서

CREATE OR REPLACE VIEW ordertblview AS
	SELECT 
		m.menuno menuno , m.name menuname , m.price menuprice, m.retaurantphone rp, 
		c.email cusemail,  c.phone cusphone, c.address cusadrs, 
		o.ortherno odrno , o.regdate orrdate , o.cnt odrcnt
	FROM 
    	menu m, customer c, ordertbl o 
	WHERE 
 	   c.email = o.email AND m.menuno = o.menuno;

원래 menu와 customer과 ordertbl의 칼럼명은

	FROM 
    	menu m, customer c, ordertbl o 
	WHERE 
 	   c.email = o.email AND m.menuno = o.menuno;

기존 칼럼명으로 들어간다.


뷰(View)가 뭔가요?

뷰(View)는 데이터베이스에 존재하는 일종의 가상 테이블이다.
뷰도 실제 테이블처럼 행과 열을 가지고 있지만, 실제로 데이터를 저장하고 있지는 않다.
즉, 우리가 여러 테이블을 번거롭게 들러서 확인을 해야 할 때 혹은 SELECT 문을 겹겹이 사용해서 어려운 쿼리문으로 조회를 수행해야 할 때 이러한 번거로움을 줄여주는 것이 바로 뷰(View) 이다.

어떻게 만들까

CREATE OR REPLACE VIEW ordertblview AS
	SELECT 
		m.menuno menuno , m.name menuname , m.price menuprice, m.retaurantphone rp, 
		c.email cusemail,  c.phone cusphone, c.address cusadrs, 
		o.ortherno odrno , o.regdate orrdate , o.cnt odrcnt
	FROM 
    	menu m, customer c, ordertbl o 
	WHERE 
 	   c.email = o.email 
       AND 
       m.menuno = o.menuno;

이렇게 만든다.
이건 테이블 3개를 합친 view다.

CREATE OR REPLACE VIEW 뷰이름좋은걸로 AS 
--CREATE OR :만들거나 
--REPLACE :덮어쓰기 
--VIEW :해당뷰가있으면덮어쓰고없으면새로만들어
--AS :다음과같이
	SELECT --뽑을거
		a.여긴테이블a의칼럼명1 여긴내가새로지정해줄칼럼명 , 
        a.테이블a의칼럼명2 아무튼이부분은앞으로뷰에서쓸칼럼명 , 
        a.테이블a의칼럼명3 계속써야하니까아무말쓰지말자,
		b.테이블b의칼럼명1 멍멍,
        b.이칼럼들은새로운뷰에넣을칼럼들이다 야옹,
        b.그러니불필요하거나중복되는칼럼은빼고쓰자 짹짹,
        b.테이블b의칼럼명4 이새칼럼명도당연히중복없이써야함,
        c.테이블c의칼럼명1 칼럼칼럼
        c.테이블c의칼럼명2 칼럼칼럼칼럼
	FROM --출처
    	테이블a a, 테이블b b, 테이블c c 
	WHERE --조건
 	  	b.연결시켜줄칼럼명1(c에있다) = c.연결시켜줄칼럼명2(b에있다)
       	AND 
       	a.연결시켜줄칼럼명3(c에있다) = c.연결시켜줄칼럼명4(a에있다);

서로에게 있는게 연결고리가 되어 view를 만들어줌.

사실 inner join을 쓰는데 내가 그걸테스트를 안해봐서 아직 포스팅을 못함.

profile
kafa is kafa. not be something other.

0개의 댓글