관리 메뉴

RUBY

SQL개발자 - 제 1장. SQL 기본 본문

자격증/SQL 개발자

SQL개발자 - 제 1장. SQL 기본

ruby-jieun 2022. 9. 4. 00:52

1. SQL 문장들의 종류

 

명령어의 종류 명령어 설명
데이터 조작어
(DML)
SELECT 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 한다.
INSERT
UPDATE
DELETE
데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 예를 들어 데이터를 테이블에 새로운 행을 집어 넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어들을 DML이라고 부른다.
데이터 정의어
(DDL)
CREATE
ALTER
DROP
RENAME
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을 DDL이라고 부른다.
데이터 제어어
(DCL)
GRANT
REVOKE
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 DCL이라고 부른다.
트랜잭션 제어어
(TCL)
COMMIT
ROLLBACK
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말한다.

2. 테이블 칼럼에 대한 정의 변경

  • Oracle
    ALTER TABLE 테이블명 MODIFY (칼럼명1 데이터 유형 [DERAULT 식][NOT NULL], 칼럼명2 데이터유형···);
  • SQL Server
    ALTER TABEL 테이블명 ALRER (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명 2 데이터유형···);

3. 제약조건의 종류

 1) PRIMARY KEY(기본키)

   UNUQUE & NOT NULL

 2) UNIQUE KEY(고유키)

   테이블 내에서 중복되는 값이 없지만, NULL입력이 가능하다.

 3) NOT NULL

   명시적으로 NULL입력을 방지한다.

 4) CHECK
   입력범위를 직접 지정해주는 것

 5) FOREIGN KEY(외래키)

  외래키로 테이블당 여러 개 생성이 가능하다.

 

4. 테이블 생성의 주의사항

 1) 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.

 2) 테이블명은 다른 테이블의 이름과 중복되지 않아야 한다.

 3) 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.

 4) 테이블 이름을 지정하고 각 칼럼들은 괄호 "()"로 묶어 지정한다.

 5) 각 칼럼들은 콤마 ","로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ";"으로 끝난다.

 6) 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다.(데이터 표준화 관점)

 7) 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다.

 8) 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.

 9) 벤더에서 사전에 정의한 예약어(Reserved word)는 쓸 수 없다.

 10) A-Z, a-z, 0-9, _, $, # 문자만 허용된다. 

 

5. 외래키

 1) 테이블 생성시 설정할 수 있다.

 2) 외래키 값은 널 값을 가질 수 있다.

 3) 한 테이블에 여러 개 존재할 수 있다.

 4) 외래키 값은 참조 무결성 제약을 받을 수 있다.

 

6. 데이터베이스 테이블의 제약조건(Constraint)

 1) Check 제약조건(Constraint)은 데이터베이스에서 데이터의 무결성을 유지하기 위하여 테이블의 특정 칼럼(Column)에 설정하는 제약이다.

 2) 기본키(Primary Key)는 반드시 테이블 당 하나의 제약만을 정의할 수 있다.

 3) 고유키(Unique Key)로 지정된 모든 칼럼들은 Null 값을 가질 수 있다.

 4) 외래키(Foreign key)는 테이블간의 관계를 정의하기 위해 기본키(Primary key)를 다른 테이블의 외래키가 참조하도록 생성한다.

 

7. 테이블의 불필요한 칼럼 삭제

 ALTER TABLE 테이블명 DROP COLUMN 삭제할 칼럼명;

 

8. 테이블명 변경

 RENAME 옛테이블명 TO 새테이블명;

 

9. 테이블에 데이터를 입력하는 두 가지 유형

 1) INSERT INTO 테이블명(COLUMN_LIST) VALUES (COLUMN_LIST에 넣을 VALUE_LIST);

 2) INSERT INTO 테이블명 VALUES(전체 COLUMN에 넣을 VALUE_LIST);

 

10. 입력된 데이터의 수정

 1) UPDATE 테이블명 SET 수정되어야 할 칼럼명 = 수정되기를 원하는 새로운 값

 

11. FK의 사용

  1. DELETE / MODIFIED Action :  CASCADE, Set Null, Set Default, Restrict (부서-사원)
    1) CASCADE : Master 삭제 시, Child도 같이 삭제
    2) Set Null :  Master 삭제 시, Child 필드 null
    3) Set Default :  Master 삭제 시, Child 필드 Default 값으로 설정
    4) Restrict : Child 테이블에 PK가 없는 경우에만 Master 삭제 허용
    5) No Action : 참조무결성 위반 시 삭제/수정 액션을 취하지 않음

  2. Insert Action : Automatic, Set Null, Set Default, Dependent (부서-사원)
    1) Automatic : Master 테이블에 PK가 없는 경우, Master 테이블에 PK 생성 후 Child 입력
    2) Set Null : Master 테이블에 PK가 없는 경우, Child의 외부키를 null 값으로 처리
    3) Set Default : Master 테이블에 PK가 없는 경우, Child의 외부키를 지정된 기본값으로 입력
    4) Dependent : Master 테이블에 PK가 존재할 때만 Child 입력 가능.
    5) No Action : 참조무결성 위반하는 입력 액션을 취하지 않음

12. 테이블 삭제

 DELETE FROM 테이블명;

 

13. 중복 제거

 SELECT DISTINCT 거주지, 근무지 FROM 고객지역;

 SELECT 거주지, 근무지 FROM 고객지역 GROUP BY 거주지, 근무지;

 

14. 테이블 삭제

 1) TRUNCATE TABLE - 특정 테이블의 모든 데이터를 삭제하고, 디스크 사용량을 초기화

 2) DELETE TABLE - 테이블의 모든 정보를 삭제하지만, 디스크 사용량을 초기화하지는 않는다.

 3) DROP TABLE - 테이블의 데이터를 모두 삭제하고 디스크 사용량도 초기화 할 수 있지만, 테이블의 스키마정의도 같이 사라진다.

DROP TRUNCATE DELETE
DDL DDL
(일부 DML 성격 가짐)
DML
Rollback 불가능 Rollback 불가능 Commit 이전 Rollback 가능
Auto Commit Auto Commit 사용자 Commit
테이블이 사용했던
Storage를 모두 Release
테이블이 사용했던 Storage중 최초 테이블 생성시 할당된 Storage만 남기고 Release 데이터를 모두 Delete해도 사용했던 Storage는 Release되지 않음
테이블의 정의 자체를 완전히 삭제함 테이블을 최초 생성된 초기 상태로 만듬 데이터만 삭제

 

15. 트랜잭션의 속성

 1) 원자성(atomicity)

   트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다.

 2) 일관성(consistency)

   트랜잭션이 실행 되기 전의 데이터베이스 내용이 잘 못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 된다.

 3) 고립성(isolation)

   트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 된다.

 4) 지속성(durability)

   트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

 

16. 데이터베이스 트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점

 1) Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것을 말함

 2) Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행 했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상

 3) Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타나는 현상

 

17. 트랜잭션은 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리키낟. 트랜잭션의 종료를 위한 대표적 명령어로서는 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영하는 커밋과 데이터에 대한 변경사항을 모두 폐기하고 변경전의 상태로 되돌리는 롤백이 있다.

Comments