LeReve 2013. 5. 1. 12:14

<ANSI Inner조인(USING사용)>
 형식)
  select 컬럼명
  from 테이블1 INNER JOIN 테이블2
  USING (공통컬럼);
  
  select empno, ename, dname
  from emp inner join dept
 using(deptno);--같은 컬럼
 
 ※주의: 모든컬럼명에 특정테이블이름 안됨
  using(emp.deptno)--->X
  
  
<Natural조인>
 형식)
  select 컬럼명
  from 테이블명1 natural join 테이블명2
  
  select empno,ename,dname
  from emp natural join dept;
  
    
<ANSI Outer 조인>
 형식)
  select 컬럼명
  from 테이블명1 [left|right|full] outer join 테이블명2 --full:left,right 다 한다. (+)= : right, =(+): left
    
  
=====================================================

 

<서브쿼리>★★
- 하나의 테이블에서 검색한 결과를 다른 테이블에 전달하여
  새로운 결과를 검색할때 사용.

 

select dname ------------------------> 메인쿼리(주쿼리)
from dept--,(select empno,ename,sal from emp) ---> 서브쿼리(인라인뷰)
where deptno=(select deptno
     from emp    ----> 서브쿼리
     where ename='JONES');

select 컬럼명    ---> 메인쿼리
from 테이블명, (select 문)  ---> 서브쿼리
where 컬럼명 연산자 (select 문) ---> 서브쿼리


------------------------------------------------------

 


<단일 행 서브쿼리>
- 하나의 행만 검색하여 그 결과를 메인 쿼리에 보내는 것.
- 서브쿼리 내에 그룹함수사용이 가능.


 select ename, dname
 from emp, (select dname
    from dept
    where deptno = 10)
 where deptno=10; 
   
  
<다중 행 서브쿼리>
- 서브쿼리에서 반환되는 결과가 하나이상의 행일 때 사용하는 서브쿼리.
- 반드시 다중 행 연산자(Multiple Row Operator)와 함께 사용.

* 다중행연산자
    IN : 메인쿼리의 비교조건이 서브쿼리의 결과중에서
          하나라도 일치하면 참. ('='의 의미)
    ANY,SOME : 메인쿼리의 비교조건이 서브쿼리의 결과와
          하나이상 일치하면 참. (>,<)
    ALL : 메인쿼리의 비교조건이 서브쿼리의 결과와
           모든값이 일치하면 참.
    EXISTS: 메인쿼리의 비교조건이 서브쿼리의 결과중에서 만족하는
           값이 하나라도 존재하면 참.

 

 

========================================================
<<DDL>> Data Definition Lanquage(데이터 정의어)
- 객체에 대한 create, drop, alter, rename, truncate
- autoCommit


<테이블객체생성>
형식)

 create table 테이블명
 (
  컬럼명1 자료형,
  컬럼명2 자료형,
  컬럼명3 자료형
 );

 create table emp2
 (
  empno number(4),-- 4자리 ####
  ename varchar2(15), -- char는 길이가 고정되어 있을 때 쓰기
  sal number(7,2)
 );

 
이름                                      널?      유형
----------------------------------------- -------- ------------

EMPNO                                              NUMBER(4)
ENAME                                              VARCHAR2(15)
SAL                                                NUMBER(7,2)

 


<서브쿼리를 통한 테이블생성하기>
- 기존 테이블의 구조(컬럼명,자료형)와 데이터를 복사
- 원본테이블의 제약(constraint)은 복사에서 제외


형식)
 CREATE TABLE 테이블명
 AS
 서브쿼리;
 


 create table emp3
 as
 select * from emp;
 
이름                                      널?      유형
----------------------------------------- -------- ------------

EMPNO                                              NUMBER(4)
ENAME                                              VARCHAR2(10)
JOB                                                VARCHAR2(9)
MGR                                                NUMBER(4)
HIREDATE                                           DATE
SAL                                                NUMBER(7,2)
COMM                                               NUMBER(7,2)
DEPTNO                                             NUMBER(2)
 
 
<원하는 컬럼만 복사>

 create table emp4
 as
 select empno,ename,sal,hiredate
 from emp;
 
이름                                      널?      유형
----------------------------------------- -------- ------------

EMPNO                                              NUMBER(4)
ENAME                                              VARCHAR2(10)
SAL                                                NUMBER(7,2)
HIREDATE                                           DATE
 
 
<원하는 레코드(행)만 복사>
 create table emp5
 as
 select *
 from emp
 where deptno=10;
 
이름                                      널?      유형
----------------------------------------- -------- ------------

EMPNO                                              NUMBER(4)
ENAME                                              VARCHAR2(10)
JOB                                                VARCHAR2(9)
MGR                                                NUMBER(4)
HIREDATE                                           DATE
SAL                                                NUMBER(7,2)
COMM                                               NUMBER(7,2)
DEPTNO                                             NUMBER(2)
 
 
<테이블 구조(컬럼명,자료형)만 복사> - 테이블내의 데이터는 복사X

 형식)
 create table 테이블명
 as
 select *
 from 원본테이블명
 where 거짓조건;
 
 
 create table emp6
 as
 select *
 from emp
 where 13<0;
 
SQL> desc emp6
 이름                                      널?      유형
 ----------------------------------------- -------- ------------

 EMPNO                                              NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)
 
SQL> select * from emp6;

선택된 레코드가 없습니다.