본문 바로가기
SQLD

SQL 이론 - 2과목 1장 (1)

by Poorm 푸름 2023. 6. 17.

1. SQL 기본

 

DB : 필요에 의해 데이터를 일정한 형태로 저장

DBMS : 데이터 관리, 데이터 손상 예방, 복구 SW

SQL : 관계형 DB에서 사용하는 언어

 

 

- DML : SELECT, INSERT, UPDATE, DELETE

- DDL : CREATE, ALTER, DROP, RENAME

- DCL : GRANT, REVOKE

- TCL : COMMIT, ROLLBACK

 

 

2. DDL

 

[ 데이터 유형(DATATYPE) ]

 

1) CHAR(s) : 고정 길이 문자열 정보. 최대 길이 (SQL, Oracle 둘다 사용)

                     ‘AA’ = ‘AA ’ (공백포함)

 

2) VARCHAR(s) : 가변 길이 문자열 정보 (SQL 경우)

                           할당된변수 값의 바이트만 적용 ‘AA’ ‘AA ’ (공백포함 X)

                           OracleVARCHAR2(s)

 

3) NUMBER : 숫자 정보 (Oracle)

                      SQL은 10가지 이상의 숫자 타입 

 

4) DATETIME : 날짜와 시각 정보

                        OracleDATA

 

 

- 테이블명, 칼럼명은 중복 X, 문자로 시작

 

- 칼럼은 , 로 구분되고 ; 로 끝난다.

 

- 칼럼 뒤에 데이터 유형은 꼭 지정

 

- A-Z, a-z, 0-9, _, $, #만 사용 가능

 

 

[ 제약조건 (데이터의 무결성 유지) ]

 

1) PRIMARY KEY(기본키)

: 1개 테이블에 1개 기본키만 제약

: 자동으로 UNIQUE 인덱스 생성, NULL 입력 X

 

2) UNIQUE KEY(고유키)

: 고유키 정의, NULL 입력 O

 

3) NOT NULL

: NULL 값 입력금지

 

4) CHECK

: 입력 값 범위 제한, 데이터 무결성 유지

 

5) FOREIGN KEY(외래키)

: NULL 가능, 여러 속성가능

 

 

[테이블 생성 CREATE]

 

CREATE TABLE 테이블명 ( 칼럼명1 DATATYPE [DEFAULT 형식], 칼럼명2 DATATYPE [DEFAULT 형식] ) ;

 

(예제)

테이블명: PLAYER, 칼럼명: PLAYER_ID 문자 고정자릿수 7, PLAYER_NAME 문자 가변 자릿수 20

 

* SQL

CREATE TABLE PLAYER ( PLAYER_ID CHAER(7) NOT NULL, PLAYER_NAME VARCHAR(20) NOT NULL);

 

* Oracle (VARCHAR 표기 차이)

CREATE TABLE PLAYER ( PLAYER_ID CHAER(7) NOT NULL, PLAYER_NAME VARCHAR2(20) NOT NULL);

 

* SQL 테이블 확인 -> sp_help ‘dbo.테이블명

 

 

[테이블 구조 변경 ALTER]

 

ALTER TABLE (칼럼 추가/삭제, 제약조건 추가/삭제)

 

1) 칼럼 추가 : ALTER TABLE 테이블명 ADD 추가할 칼럼명 데이터 유형;

                     추가된 칼럼은 테이블 마지막 칼럼에 위치 (임의 위치지정 불가)

 

(예제)

PLAYER 테이블에 ADDRESS (가변 문자자릿수 80자리) 칼럼 추가

 

* SQL

ALTER TABLE PLAYER ADD ADDRESS VARCHAR(80);

 

* Oracle (괄호, VARCHAR 표기 차이)

ALTER TABLE PLAYER ADD (ADDRESS VARCHAR2(80));

 

 

2) 칼럼 삭제 : ALTER TABLE 테이블명 DROP CALUMN 칼럼명;

                     데이터 유무 상관없이 삭제 가능, 한번에 1개 칼럼 삭제가능, 삭제 복구 불가,

                     삭제 후 테이블엔 1개 이상의 칼럼이 존재해야해

 

ALTER TABLE PLAYER DROP COLUMN ADDRESS; (SQL/Oracle 동일)

 

 

3) 칼럼 수정 : [SQL] ALTER TABLE 테이블명 ALTER 칼럼명1 데이터 유형 [DEFAULT ] [NOT NULL],

                      칼럼명2 데이터 유형 ;

                    : [Oracle] ALTER TABLE 테이블명 MODIFY (칼럼명1 데이터 유형 [DEFAULT ] [NOT NULL],

                      칼럼명2 데이터 유형 );

 

(예제) TEAM 테이블의 ORIG_YYYY 칼럼 데이터 유형을 CHAR(4)VARCHAR2(8)으로 변경

          향후 입력되는 데이터의 DEFAULT 값으로 '20020129'을 적용

          모든 행의 ORIG_YYYY 칼럼에 NULL이 없으므로 제약조건을 NULL NOT NULL로 변경

 

* SQL (2줄로 변경/괄호 없어도 ok)

ALTER TABLE TEAM ALTER COLUMN ORIG_YYYY VARCAHR(8) NOT NULL;

ALTER TABLE TEAM ADD CONSTRAINT DF_ORIG_YYYY DEFAULT '20020129' FOR ORIG_YYYY;

 

* Oracle (1줄로 해결가능)

ALTER TABLE TEAM MODIFY (ORIG_YYYY VARCHAR2(8) DEFAULT '20020129' NOT NULL);

 

 

4) 제약조건 추가 : ADD CONSTRAINT 조건명 조건 (칼럼명);

 

(예제) PLAYER 테이블에 TEAM 테이블과의 외래키 제약조건을 추가/ 제약조건명 = PLAYER_FK

          PLAYER 테이블의 TEAM_ID 칼럼이 TEAM 테이블의 TEAM_ID를 참조하는 조건

 

* SQL/Oracle

ALTER TABLE PLAYER ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);

 

 

5) 제약조건 삭제 : DROP CONSTRAINT 조건명;

 

* SQL/Oracle

ALTER TABLE PLAYER DROP CONSTRAINT PLAYER_FK;

 

 

[테이블명 변경 / 컬럼명 변경 RENAME]

 

: [Oracle] RENAME 변경 전 테이블명 TO 변경 후 테이블명; / RENAME COLUMN 전이름 TO 새이름

: [SQL] sp_rename ‘dbo.전 테이블명‘, ’변경 후 테이블명’; / sp_rename ‘dbo.전이름’,‘후이름’,‘CALUMN’

 

(예제) TEAM 테이블명을 다른 이름으로 변경/ 다시 TEAM 테이블로 변경

 

* Oracle * SQL

RENAME TEAM TO TEAM_BACKUP; sp_rename 'dbo.TEAM','TEAM_BACKUP';

RENAME TEAM_BACKUP TO TEAM;

 

 

[테이블/ 테이블 데이터 삭제 DROP]

 

: DROP TABLE 테이블명; / TRUNCATE TABLE 테이블명; (SQL=Oracle)

 

 

2. DML

 

: DDL 명령어의 경우 실행 시 즉시 AUTO COMMIT, 하지만 DML의 경우 실시간은 X, COMMIT을 입력해

  트래잭션 종료

 

 

[데이터 입력 INSERT]

 

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

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

 

 

[데이터 수정 UPDATE]

 

: UPDATE 테이블명 SET 수정될 칼럼명 = 수정할 새로운 값;

 

 

[데이터 삭제 DELETE]

 

: DELETE [FROM] 삭제를 원하는 정보가 들어있는 테이블명;

 

 

[데이터 조회 SELCET]

 

: SELECT 조회하길 원하는 칼럼명 1, 2, 3 FROM 해당 칼럼이 존재하는 테이블명;

 

- DISTINCT 옵션 : 중복되는 데이터를 한번만 출력

                              SELECT DISTINCT POSITION FROM PLAYER;

 

- 와일드카드 :  *  = 모든

                        % = 모든

                         -  = 한 글자

 

- 합성 연산자 : 문자와 문자 연결 = || (Oracle) , + (SQL)

 

- ALIAS : ALIAS(칼럼 별명)는 칼럼명 AS 바로 뒤에 붙여 (꼭 사용안해도 된다)

               SELECT PLAYER_NAME AS 선수명 FROM PLAYER;

             : 별명에 공백이 들어갈 경우 “”를 사용

 

 

3. TCL

 

- 트랜잭션 : 밀접히 관련되어 분리될 수 없는 1이상의 DB 조작. 논리적 연산단위

 

- COMMIT : 올바르게 반영된 데이터를 DB에 반영

 

- ROLLBACK : 트랜잭션 시작 이전의 상태로 복구, COMMIT 되지 않은 모든 트랜잭션 롤백함

 

- SAVEPOINT : 저장 지점

 

 

[ 트랜잭션의 특성 ] (---)

 

1) 원자성 : 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않아야함

 

2) 일관성 : 트랜잭션 실행 전 DB 내용이 잘못되지 않으면 실행 후도 잘못되지 않음

 

3) 고립성 : 트랜잭션 실행 도중 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들면 X

 

4) 지속성 : 트랜잭션이 성공적으로 수행되면 DB 내용은 영구적으로 저장

 

* Oracle

SAVEPOINT SVPT1;

ROLLBACK TO SVPT1;

COMMIT

 

* SQL

SAVE TRAN SVPT1;

ROLLBACK TRAN SVPT1;

COMMIT;

 

 

4. 트랜잭션 격리성이 낮은 경우 문제점


- Dirty Read
: 다른 트랜잭션에 의해 수정됐지만 아직 커밋되지 않은 데이터를 읽는 것

- Non-Repeatable Read
: 한 트랜잭션에서 같은 쿼리를 두 번 수행 했는데, 그 사이 다른 트랜잭션의 값이 수정/삭제되어 두쿼리 결과가
  다르게 나타나는 현상

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

 

** 참고사이트 **

https://dataonair.or.kr/db-tech-reference/d-guide/sql/?pageid=4&mod=list

'SQLD' 카테고리의 다른 글

SQL 이론 - 2과목 1장 (3)  (1) 2023.06.17
SQL 이론 - 2과목 1장 (2)  (0) 2023.06.17
SQL 이론 - 1과목 2장 (4)  (0) 2023.06.17
SQL 이론 - 1과목 2장 (3)  (1) 2023.06.17
SQL 이론 - 1과목 2장 (2)  (1) 2023.06.17