-기본개념 ::
:: 구문 형식
데이터비이스이름.스키마이름.개체_이름
ex)CREATE SCHEMA buySchema;
->create table userSchema.userTBL(id int);
create table buySchema.buyTBL(id int);
위 처럼 테이블을 생성하면, 조회할때
select * from userSchema.userTBL;
테이블 이름 앞에 스키마를 붙여야 조회가 됨.
:: 구문형식
CREATE VIEW [뷰 이름]
AS
SELECT [조회될 컬럼명] FROM[조회할 테이블이름]
::뷰의 장점
1) 보안에 도움이 됨(보여주고 싶은 쿼리만 묶어서 사용할 수 있음 )
2) 복잡한 쿼리를 단순화 시킬 수 있음
ex)
CREATE VIEW v_userbuyTBL
AS
SELECT U.userID AS [USER ID], U.name AS[USER NAME], B.prodName AS[PRODUCT NAME],
U.addr,U.mobile + U.mobile2 AS[MOBIL PHONE]
FROM userTBL U
INNER JOIN buyTBL B
ON U.userID = B.userID;
->
SELECT [USER ID], [USER NAME] FROM v_userbuyTBL;
-->> 뷰도 일반 테이블처럼 사용가능
ALTER VIEW v_userbuyTBL
AS
SELECT U.userID AS[사용자 아이디], U.name AS [이름], B.prodName AS [제품 이름],
U.addr, U.mobile + u.mobile2 AS [전화 번호]
FROM userTBL U
INNER JOIN buyTBL B
ON U.userID = B.userID;
DROP VIEW v_userbuyTBL;
UPDATE v_userTBL SET addr = '부산' WHERE userID ='JKW';
=>> 하지만 SUM()이나 GROUP BY, ORDER BY절 등 의 함수를 사용해서 뷰테이블을 생성했을 시에는 수정이 불가능하다
만얀 본 테이블에 NULL이 허용되지 않는 열이 있고, 뷰에 그 열이 포함되어 있지않으면 생성이 불가능 하기때문에 오류가 생김
INSERT INTO v_userTBL(userID, name, addr) VALUES('KBM','김병만','충북');
->
메시지 515, 수준 16, 상태 2, 줄 40
테이블 'sqlDB.dbo.userTBL', 열 'birthYear'에 NULL 값을 삽입할 수 없습니다. 열에는 NULL을 사용할 수 없습니다. INSERT이(가) 실패했습니다.
문이 종료되었습니다.
만약 뷰 테이블이 참조하는 테이블이 삭제가 되면 뷰 테이블도 사용이 불가능.
그렇기 때문에 테이블을 살제하기 전, 삭제할 테이블을 참좋하고 있는 뷰테이블이 있는지 확인을 한 후 삭제 해야함.
그때 사용하는 것이 'EXEC sp_depends'