SQL
<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;
선택된 레코드가 없습니다.