카테고리 없음

8/26

dlsgur0528 2024. 8. 26. 17:30

subquery exists

조회결과가 하나라도 존재하는 경우만 바깥 쿼리를 실행해야 할 때 사용하는 연산자.

서브쿼리에서 조회된 결과가 없다면 바깥 쿼리를 실행하지 않는다.

속도가 빠르다.

 

사용법)

where exists(select , , , ) //조회값을 가져오지않고 레코드가 존재하는지만 확인하는 용도의 subquery

                         //이 select의 조회컬럼은 실제 컬럼사용O가능하고 1이나 임의의 값을 사용해도 된다.

 

사원 테이블에서 사원번호가 7788인 사원이 존재하는 경우에만, 가장 마지막에 입사한 이전사원 부터

5명의 사원정보를 검색하자, 

 

조회컬럼: 번호,사원번호,사원명,입사일,연봉

단 번호는 마지막에 입사한 사원부터 1번으로 설정되어 보여진다,.

 

  select rnum ,empno, ename, hiredate, sal

from

  (select  rownum rnum, empno, ename, hiredate, sal

      from                  ( select empno, ename, hiredate, sal

                                  from emp

                           where exists (select 1 from emp where empno=7788)

                                         order by hiredate desc)

)

where rnum between 2 and 6;

 

 

constraints (제약사항)

  • 테이블에서 개발자가 원하는 값을 저장하기 위해서 사용하는 것.
  • primary key, foreign key, not null, check, default
  • user_constraints DD에서 테이블에 설정된 제약사항을 확인할 수 있다.
  • column 단위 제약사항 또는 table 단위 제약사항으로 설정할 수 있다.
  • alter를 사용해서 편집할 수 있다.

 

문법)

create table 테이블명( 

컬럼명 데이터형(크기) constraint 제약사항명 제약사항 종류 , ,//필요한만큼 정의

                                                            //컬럼단위 제약사항으로 제약사항을 적용받을 컬럼을 명시하지 않는다.  , )

 

컬럼단위 제약사항의 특징은 모든 제약사항을 사용할 수 있다,

제약사항을 적용받을 컬럼명 뒤에 선언하기 때문에 제야ㅕㄱ사항을 받을 컬럼을 명시하지 않는다

모든 제약사항을 사용할 수 있다

 

 

 

constraint 제약사항명 제약사항종류(적용컬럼명)

constraint 제약사항명 제약사항종류(적용컬럼명)

이렇게 작성하는것을 테이블단위 제약사항

컬럼의 선언이 모드 꿑난 다음에 제약사항을 선언하기 때문에

제약사항을 적용받을 컬럼을 받느시 명시 해야한다.

primary key, foreign key, unique, check만 사용 가능

 

priamry key(주키, 기본키)

  • 테이블에 하나만 설정할 수 있다.
  • 컬럼의 값이 null을 허용하지않고, 유일해야 하는 경우.
  • 단일 컬럼으로 구성될 수 도 있고, 복합 컬럼으로 구성될 수 있다.
  • 다른 테이블(자식테이블)에서 부모테이블로 참조할 수 있다(테이블간의 관계가 생성된다.)

deptno는 부모, emp는 자식테이블이다, deptno는 참조키이다

 

primary key를 생성하면 Oracle에는 index를 자동으로 생성해준다

후보키중 선정된다.

 

번호,이름,아이디,주민번호,이메일,의료보험번호,전화번호,주소를 저장하는 테이블

 

문법)

column level constraint 

create table 테이블명 (

컬럼명 데이터형(크기) constraint PK_테이블명 primary key         

);

 

-table levte constraint

create table 테이블명(

컬럼명 데이터형 (크기),

constraint PK 테이블명 primary key(적용컬럼명) 

);

 

 

여러 컬럼이 하나의 primary key로 구성된느 경우.

-테이블 단위 제약사항으로만 가능함.

 

문법)

create table 테이블명(

컬럼명 데이터형(크기)

,

,

constraint pk_테이블명 primary key( 컬럼명, , , ) 

여러개의 컬럼이 하나의 PK가 되는 경우

 

 

foreign key(외래키,참조키)

  • 다른테이블의 PK, unique 컬럼 값으로만 컬럼 값이 구성되어야 할 때
  • null허용한다. 값이 있을 때에는 부모테이블에 존재하는 값으로만 저장할 수 있다.
  • 테이블간 관계가 생성된다.(PK를 가진곳은 부모테이블 FK를 가진곳을 자식테이블이라고 한다.)
  • 컬럼단위 제약사항과 테이블단위 제약사항 두가지로 설정할 수 있다.
  • 자식테이블에서 컬럼명은 달라도 되나, 부모테이블의 데이터형과 크기는 동일하게 설정해야 한다.

 

문법)

컬럼단위

create table 테이블명(

컬럼명 데이터형(크기) constraint fk_테이블명_컬럼명 references 참조할 테이블명(참조컬럼명)

)

 

테이블단위

create table 테이블명(

컬럼명 데이터형(크기)

 

constraint FK_테이블명_컬럼명 foreign key(적용컬럼 , , ) references 참조할 테이블명(참조컬럼명, , )

 //여기서 참조할 테이블명이 부모테이블의 테이블명이다.

 

 

-on delete cascade  //부모테이블에 레코드가 삭제될때 참조하는 모든 자식테이블의 레코드를 함께 삭제할때,,,케스케이딩

 

 

 

unique

  • null을 허용하면서, 컬럼값이 유일해야할 때...
  • 컬럼단위 제약사항, 테이블단위 제약사항 두가지로 사용할 수 있다.
  • 값이 없을수도 있고, 있다면 유일해야하는 경우에 사용(ex카드번호,이메일,전화번호 등등,,,)
  • 하나의 테이블에 unique는 여러 개 설정할 수 있다
  • FK로 참조할 수 있다
  • unique를 설정하면 index가 자동 생성된다.

 

문법)

 컬럽단위

 create table 테이블명 (

컬럼명 데이터형(크기) constraint UK(or UX)_테이블명_컬럼명 unique

)

 

 

 테이블 단위

create table 테이블명(

컬럼명 데이터형(크기)

 

constraint UX_테이블명_컬럼명_unique(적용컬럼명)

)

 

 

check 조건

컬럼에 개발자가 원하는 값으로 추가해야 할 때

컬럼단위 제약사항, 테이블단위 제약사항 두가지로 사용할 수 있다.

제약사항명을 잘 안씀.... 주로 컬럼단위 제약사항으로 사용한다.

check조건에는 다른 컬럼값을 참조할 수 없다

 

문법)

 컬럼단위)

create table테이블명(

컬럼명 데이터형(크기) constraint 제약사항명 check (조건)  )

//조건에는 check조건이 딸린 컬럼만 들어옴, 다른 컬럼은 사용할 수 없다.

 

테이블단위)

create table 테이블명(

컬럼명 데이터형(크기),

,

constraint C_테이블명_컬럼명 check(조건) ); 

     

 

not null 조건

  • 컬럼에 값을 반드시 입력해야하는 경우 사용
  • 컬럼단위 제약사항으로만 사용가능
  • user_constraint DD constraint_type이 체크와 ㅁ마찬가지로 'C'로 설정된다

 

문법)

create table 테이블명(

컬럼명 데이터형(크기) not null

 

 

default

insert시 컬럼이 생략되면 설정한 값으로 레코드를 추가할 때 사용함.

제약사항이 아니다. => user_tab_cols DD에서 확인가능(data_default_column)

컬럼 단위로만 설정 가능하다.

 

문법)

create table 테이블명(

컬럼명 데이터형(크기) default 기본값

 

 

 

테이블의 변경

DDL언어 사용

테이블의 변경,제약사항의 변경, 계정 비밀번호 변경,계정 잠그기 등 다양한 작업 수행가능.

 

계정의 비밀번호 바꾸기

 모든 계정은 자신의 비밀번호를 바꿀 수 있다

 관리자는 모든 계정의 비밀번호를 변경할 수 있다.

 

문법)

alter user 계정명 identified by 비번;

 

계정 잠그기/열기 - 관리자 계정만 간으

잠그기:alter user 계정명 account lock;

열기: alter user 계정명 accoutn unlock;

 

 

 

 

테이블의 변경

컬럼추가

추가된 컬럼은 테이블의 가장 마지막 컬럼으로만 추가된다.

 

문법)

alter table 테이블명 add 컬럼명 데이터형(크기) 컬럼단위 제약사항

      //레코드의 존재유무에 따라 사용가능한제약사항이 다름

      //레코드가 없다면 모든 제약사항 추가가능

     //레코드가 존재하면 null을 허용하는 제약사항만 설정가능(FK,unique,default)

 

컬럼삭제

문법)

alter table 테이블명 drop column 컬럼명; 

 

데이터형 변경

레코드가 존재: 동일 데이 형에서 크기만 변경

레코드가 없음: 데이터 형 자체의 변경 가능

 

문법)

alter table 테이블명 modify 컬럼명 데이터형(크기) 컬럼별 제약사항

 

컬럼명 변경

문법) 

alter table 테이블명 rename 이전 컬럼명 to 변경할 컬럼명

 

테이블 명 변경

문법)

alter table 테이블명 rename to 변경할 테이블명

 

제약사항 변경

-제약사항 추가: 테이블단위 제약사항 문법으로만 가능.

 

문법)

alter table 테이블명 add constraint 제약사항명 제약사항 종류(적용컬럼);

 

제약사항 삭제

문법)

alter table 테이블명 drop constraint 제약사항 명

 

제약사항 활성화/비활성화

문법)

alter table 테이블명 enable constraint 제약사항명 //활성화 disable=>비활성화