◆DDL

 

1)데이터베이스 5가지 객체

객체

설명

테이블

기본 저장 단위

하나 이상의 테이블에 있는 데이터의 논리적 부분 집합

시퀀스

숫자 값을 생성

인덱스

일부 쿼리 성능 향상

동의어

객체에 다른 이름 부여

 

2)테이블 이름 명명 규칙

-문자로 시작

-길이는 1- 30

-특수문자 _,$,# 사용가능

-동일한 유저가 소유한 다른 객채의 이름과 중복되지 않아야 함.

-예약어(sum,table등 등) 사용할 수 없습니다.

 

3)데이터 유형

varchar char 무슨 차이일까?

 

char형은 처음 지정한 크기만큼 저장을 하지만

varchar는 처음 지정한 크기보다 적은 데이터가 들어간다면 그 데이터만큼만 할당을 하는 데이터 유형이다.

 

4)제약 조건

select * from user_constraints;  -- 접속 계정의 제약 조건들 보기

 

 

not null

create table employees(

employee_id number(6),

frist_name varchar2(20),

job_id varchar(10) CONSTRAINT emp_emp_job_nn not null,

CONSTRAINT emp_emp_id_pk

PRIMARY KEY (employee_id)

);

 

unique

create table employees(

    employee_id number(6) ,

    last_name varchar2(25) not null,

    email varchar2(25) constraint emp_email_uk unique,

    primary key(employee_id)

);

 

create table t_friend(

    user_id varchar2(20),

    f_id    varchar2(20)

);

 

alter table t_friend add constraint c_friend_uk unique(user_id,f_id);

 

foreign key

create table t_emp(

    empno number(4),

    ename varchar2(30) not null,

    hp varchar2(11),

    sal number,

    deptno number(2),

    constraint t_emp_no_pk primary key(empno),

    constraint t_emp_dept_fk foreign key (deptno) references t_dept(deptno)

);

 

 

foreign key 3가지 추가 제약 조건

1)     on delete cascade : 연쇄적으로 삭제 , 상위 테이블의 행이 삭제되면 하위에 연관되어있던 테이블의 종속 행들도 삭제한다.

2)     on delete set null : null로 대체 , 상위 테이블의 행이 삭제되면 하위에 연관되어있던 테이블들의 값은 null로 대체한다.

3)     default 기본 : 갱신이나 삭제를 허용하지 않음.

 

check

create table t_friend(

    user_id varchar2(20),

    f_id    varchar2(20),

    sal number

    constraint t_friend_sal_ck check(sal > 1000)

);

 

default

create table café(

 café_num number primary key,

 café_name varchar2(20) not null,

 café_cnt number defalut 1

);

 

서브 쿼리를 이용한 테이블 생성(ctas)

CREATE TABLE dept80

AS

SELECT employee_id, last_name,

salary*12 ANNSAL,

hire_date

FROM employees

WHERE department_id = 80;

 

테이블 변경

alter table employees read only;--읽기 전용

 

alter table employees read write;--읽기 쓰기 둘 다 가능


alter table [테이블명] modify ([컬럼명] [데이터타입] [제약조건]);

 

테이블 삭제

drop table dept purge;


◆서브 쿼리


메인이 아닌 쿼리 = 서브쿼리


서브 쿼리 - 1)단일 행 쿼리

   2)다중 행 쿼리




1)단일 행 서브쿼리

Abel의 급여보다 많거나 같은 사원들

select last_name, salary

from employees

where salary >= (select salary

                 from employees

                 where last_name = 'Abel');

 

Taylor와 같은 직업이고 Taylor보다 높은 급여를 받는 사원

select last_name, job_id, salary

from employees

where job_id = (select job_id

                from employees

                where last_name = 'Taylor')

and   salary > (select salary

                from employees

                where last_name = 'Taylor');

 

2)다중 행 서브쿼리

 

any

: 서브 쿼리에서 반환되는 값 들 중 하나라도 조건을 만족한다면 띄움

select employee_id, last_name, job_id, salary

from employees

where salary < any (select salary

                    from employees

                    where job_id = 'IT_PROG')

and job_id <>'IT_PROG';

 

all

: 서브 쿼리에서 반환되는 모든 값과 비교

select employee_id, last_name, job_id, salary

from employees

where salary < all (select salary

                    from employees

                    where job_id = 'IT_PROG')

and job_id <>'IT_PROG';

 

exists

: 테이블에 특정 행이 있는지 여부에 따라 결과가 달라짐

SELECT * FROM departments

WHERE NOT EXISTS

(SELECT * FROM employees

WHERE employees.department_id=departments.department_id);

 


※group by 와 select문의 distinct 알아보기

+ Recent posts