배경

  • 관계 대수나 관계 해석은 확실한 이론적 배경을 제공하나 상용으로 쓰이기에는 어렵고 적절치 않음
  • SQL은 자연어와 유사하고 비절차적 언어이므로 사용하기 용이함
  • SQL로 풀 수 없는 문제를 프로그래밍을 통해 풀 수 가 있음
  • 표준 질의어로 채택되어 널리 쓰이는 관계형 질의언어

SQL 기본 명령어

  • 데이터 정의 언어(data definition language) DDL: CREATE, ALTER, DROP
  • 데이터 조작 언어(data manipulation language) DML: SELECT, INSERT, DELETE, UPDATE
  • 데이터 제어 언어(data control language) DCL: GRANT, REVOKE, COMMIT, ROLLBACK

DDL VS DML

  • 둘다 SQL 언어
  • 테이블을 정의하는 것을 DDL (데이터 생성)
    • SQL 문을 입력시 자동으로 commit 명령이 들어감(저장)된
    • rollback이 불가능
  • 테이블을 넣고 삽입 삭제 하는 것을 DML (데이터 처리)
    • SQL 문 입력 후 exit 나 commit 을 입력해야  해당 데이터가 저장됨
    • rollback시 취소 가능

필드의 Data type 종류 (Oracle)

  • 문자
    • char(n): (길이가 n인 고정 길이의 문자열)
    • varchar2(n): (길이가 n인 가변 길이의 문자열)
  • 숫자
    • int(정수), float(실수)
    • number(6): (10진수 6자리 자연수 0~999999)
    • number(6,2): (10진수 6자리 중 소수점 자리 2개 0~9999.99)
      • 사용 이유: 필요한 메모리 공간을 절약하기 위해서 int 로 선언시 number(38) 로 처리되는데 이는 데이터의 범위에 비해 공간적으로 과도하게 잡아먹는 경우가 있음
  • 날짜 시간
    • data: 년월일
    • timestamp: 시분초

테이블 생성

create table member(
	id int not null ato_increment,
    name varchar(10) not null,
    passwd varchar(50) not null,
    primary key(id)
)
  • 형식 create table <테이블이름> (<필드리스트>)

  • not null은 해당 필드에 널을 허용하지 않는다는 것을 의미함

기본키, 외래키 설정

  • pk_department: 제약식의 이름 (not null 이 디폴트로 설정 됨)
    • 어느 테이블에서 작업을 할때 에러가 발생했는지 알기 쉽기 때문에 사용
  • 외래키는 반드시 프라이머리 키(기본 키)로 참조하여야 함
    • 기본키와 외래키는 이름이 같을 필요는 없다.
    • 외래키는 테이블과 테이블 사이의 조인 연산을 할때 이용되기 때문에 필요 (관계 정의 요소)
  • 기본키, 외래키 관련 주의사항
    • 외래키를 필드로 갖는 테이블을 생성 할 때
      • 외래키가 참조하는 테이블을 먼저 생성 해야 한다.
    • 만일 외래키가 참조하는 테이블을 먼저 생성하지 않으면 "ORA-00942" 테이블 또는 뷰가 존재하지 않습니다." 라는 오류가 발생하게 된다.
    • 테이블을 삭제할 때도 같은 문제가 발생함
      • 외래키를 먼져 해제하거나 제거 하여 관계를 끊은 다음에 삭제를 진행해야 테이블 간의 일관성을 유지 할 수 있다.

테이블 추가와 삭제

  • 형식 alter table <테이블이름> add <추가할필드>
  • 새로운 필드가 생성시 기존의 레코드 값들은 null 값으로 배치가 된다.

  • 형식 alter table <테이블이름> drop column <삭제할필드>

레코드 삽입

  • 형식: insert into <테이블이름> (<필드리스트>) values (<값리스트>)
    • <필드리스트>: 삽입에 사용될 테이블의 필드들
    • <값리스트>: <필드리스트>의 순서에 맞춰 삽입될 값
    • <필드리스트>에 나열되지 않은 필드에 대해서는 널값이 입력됨
    • <필드리스트>를 생략할 경우 <값리스트>에는 테이블을 생성할 때 나열한 필드의 순서에 맞춰서 값을 나열
    • 테이블의 필드 중 생략된 필드에는 널이 입력됨
      • 단 not null이 설정된 필드가 있을 경우 해당 필드는 insert문에서 생략 할 수 없음

레코드 수정

  • <수정내역>
    • 대상 테이블의 필드에 들어가는 값을 수정하기위한 산술직
    • ,을 이용하여 여러 필드에 대한 수정 내역을 지정가능
  • <조건>
    • 대상이 되는 레코드에 대한 조건을 기술
    • 관계대수에서 선택 연산의 조건식과 같은 의미
    • 테이블의 모든 레코드에 대해 수정을 적용하려면 where 절을 생략

레코드 삭제

  • where절이 생략되면 테이블에서 모든 레코드를 삭제
    • DDL의 drop table과의 차이점: delete 문을 이용하여 테이블의 모든 레코드를 삭제하더라도 테이블은 삭제 되지 않음
  • 외래키로 참조되는 필드를 가지고 있는 테이블에서 레코드를 삭제 할 수 없음

'CS > DataBase' 카테고리의 다른 글

무결성과 보안  (1) 2023.04.07
집계 함수  (0) 2023.04.01
관계 대수  (1) 2023.03.17
Key  (0) 2023.03.11
릴레이션  (0) 2023.03.11

+ Recent posts