일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Java
- 성적프로그램
- HTTP Status 500
- jQuery
- HTTP Status 404
- github
- 모조칼럼
- git
- Oracle DB
- 부트스트랩
- tomcat
- SQL
- rownum
- 제약조건
- oracle
- JSP
- Bootstrap
- 답변형 게시판
- 한글 인코딩
- CRUD
- 과정평가형
- alias
- sql developer
- HTML
- distinct
- group by
- 이클립스
- ||
- JavaScript
- Oracle SQL
초급의 끄적거림
[SQL] View 본문
[View (뷰)]
⊙ 물리적 테이블 : 사용자가 create 에 의해 생성한 실제 존재하는 테이블
⊙ 논리적 테이블 : 사용자가 SQL문에 의해 가공한 테이블
⊙' 테이블A'와 '테이블B'는 물리 테이블, '뷰C' 는 두개의 테이블을 이용하여 생성한 뷰
1) 정의
⊙ 테이블에 대한 가상의 테이블(=논리적 테이블)로써 테이블처럼 직접 데이터를 소유하지 않고 검색시에 이용할 수 있도록 정보를 담고 있는 객체, 테이블 정보의 부분집합
2) 사용목적
⊙ 테이블에 대한 보안 기능을 설정해야 하는 경우
⊙ 복잡하며 자주 사용하는 질의 SQL문을 보다 쉽고 간단하게 사용해야 하는 경우
3) 뷰 생성 권한 부여 (권한을 주지 않을 경우, 뷰를 만들 수 없을 수도 있음)
cmd>sqlplus / as sysdba - 최고권력자 sysdba로 로그인해서 권한을 줘야 함 SQL>grant create view to java0514 |
4) 뷰 생성 형식
creat or replace view 뷰이름 ★정리 ★ create or replace view 뷰이름 as 실제로실행할SQL명령어 |
5) 뷰 생성하기
create view test_view as select * from emp; |
|
<테이블, 뷰 목록 확인> select * from tab; |
|
table | 물리적 테이블 |
view | 논리적 테이블 |
6) 뷰 삭제하기
⊙ drop view 뷰이름;
7) 예제
7-1) 뷰생성
create or replace view test_view
as
select empno, ename, job, sal, deptno
from emp;
7-2) 뷰로 등록된 SQL문 실행 (만들어진 emp에서 empno, ename, job, sal, deptno를 가져와 보임) - 생성된 뷰는 테이블처럼 사용가능
select * from test_view;
7-3) 뷰의 세부 정보 확인 (데이터 사전)
⊙ select * from user_view;
8) as 명령어
select ename as 이름
,sal 급여
, hiredate 입사일
from emp;
9) 예제
9-1) emp 테이블의 이름을 AA로 바꿔서 사용
① select * from emp AA;
② select * from emp AA order by AA.ename; - AA의 ename 을 기준으로 정렬
= select * from emp order by java0514.emp.ename; -java0514 : 우리가 원래 들어가 있는 첫번째인데 생략, AA를 쓰지 않는다면 풀네임은 emp.ename;
9-2)
① select * from emp where ename='무궁화';
- deptno만보고 '무궁화'가 경리팀인지 총무팀인지 알수 없기 때문에 부서테이블과의 조인이 필요
② select emp.name, emp.deptno, dept.*
from emp join dept
on emp.deptno=dept.deptno;
- emp 테이블과 dept가 조인하여 emp의 deptno와 dept의 deptno가 같을 때 emp테이블의 이름, 부서번호, dept 테이블의 모든 것을 조회할 것
③ ② 과 동일한 결과
select AA.ename, AA.deptno, BB.*
from emp AA join dept BB
on AA.deptno=BB.deptno; - emp 테이블 명칭 : AA, dept 테이블 명칭 : BB (대소문자 불문 but 한글X)
→ 이런식으로 줄줄이 다 쓰게 되면 헷갈리고 힘듦, 이것을 한번에 만들어 놓고 끌어다 쓰기 쉽게 하는 것 : view
10) 9-2 의 내용을 veiw로 만들어줌
create or replace view test2_view
as
select AA.ename, AA.deptno, BB.dname, BB.loc
from emp AA join dept BB
on AA.deptno=BB,.deptno;
select * from test2_view;
create or replace view test2_view
as
select AA.ename, AA.deptno, BB. *
from emp AA join dept BB
on AA.deptno=BB,.deptno;
ORA-00957: duplicate column name 00957. 00000 - "duplicate column name"
▶ 테이블 조인시 양쪽 테이블에 존재하는 칼럼은 자신의 소속을 알려줘야함, 위에서처럼 BB.* 를 쓰게 되면 지정없이 다 들어가서 컬럼 이름이 중복된다고 하는 오류가 발생
select emp.ename, emp.deptno, dept.dname
from emp join dept
on emp.deptno=dept.deptno;
- 조인을 통해 부서명까지 확인할 수 있게 됨
select ename, sal, deptno, dname
from(select emp.ename, emp.deptno, dept.dname from emp join dept
on emp.deptno = dept.deptno) AA
where AA.deptno=10;
'DB > Oracle' 카테고리의 다른 글
[SQL] join 1 (0) | 2019.07.24 |
---|---|
[SQL] Index (0) | 2019.07.24 |
[SQL] 서브쿼리 (Sub Query) (0) | 2019.07.23 |
[SQL] group 외 예제 (0) | 2019.07.23 |
[SQL] 함수 (0) | 2019.07.22 |