해당 포스트는
SQLD
를 학습하며 정리한 내용에 대한 포스트입니다.
이론을 학습한 내용을 정리하고 퀴즈, 기출문제 등을 기록하려고 합니다.
🌈 SQL
💻 SQL이란?
SQL은 관계형 데이터베이스에 대해서 데이터의 구조를 정의, 데이터 조작, 데이터 제어 등을 할 수 있는 절차형 언어이다.
관계형 데이터베이스는 데이터베이스를 연결하고 SQL문을 사용하여 데이터베이스를 누구나 쉽게 사용할 수 있도록 한다.
SQL은 ANSI/ISO 표준을 준수하기 때문에 데이터베이스 관리 시스템이 변경되어도 그대로 사용할 수 있다.
SQL 표준
ANSI/ISO SQL 표준 | INNER JOIN, NATURAL JOIN, USING 조건, ON 조건절을 사용한다. |
ANSI/ISO SQL3 표준 | DBMS 벤더별로 차이가 있었던, SQL을 표준화하여 제정했다. |
💻 SQL 종류 🎯
SQL은 데이터 정의
, 데이터 조작
, 데이터 제어
등의 기능을 지원한다.
SQL 문장들의 종류
종류 | 명령어 | 설명 |
---|---|---|
데이터 조작어 DML (Data Manipulation Language) | SELECT | 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 한다. |
INSERT UPDATE DELETE | 데이터베이스의 테이블에 들어 있는 데이터에 변형을 하는 종류의 명령어들 데이터를 테이블에 새로운 행을 집어넣거나 원하지 않는 데이터를 수정/삭제하는 것들의 명령어들을 DML이라고 한다. | |
데이터 정의어 DDL (Data Definition Language) | CREATE ALTER DROP RENAME | 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을 DDL 이라고 부른다. |
데이터 제어어 DCL (Data Control Language) | GRANT REVOKE | 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 DCL이라고 한다. |
트랜잭션 제어어 TCL (Transaction Control Language) | COMMIT ROLLBACK | 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어 |
DDL문은 데이터베이스 테이블을 생성하거나 변경, 삭제하는 것으로 데이터를 저장할 구조를 정의하는 언어이다.
DML은 데이터 구조가 DDL로 정의되면 해당 데이터 구조에 데이터를 입력하거나 수정, 삭제, 조회할 수 있다.
DCL은 DDL로 정의된 구조에 어떤 사용자가 접근할 수 있는지 권한을 부여하는 것이다.
DROP vs DELETE vs TRUNCATE
DROP | TRUNCATE | DELETE |
---|---|---|
DDL | DDL (일부 DML 성격을 가짐) | DML |
ROLLBACK ❌ | ROLLBACK ❌ | COMMIT이전 ROLLBACK ✅ |
AUTO COMMIT | AUTO COMMIT | 사용자 COMMIT |
WHERE절 ❌ | WHERE절 ❌ | WHERE절 ✅ |
데이블 정의 자체 완전 삭제 | 테이블을 최초 생성된 초기상태로 만듦 | 데이터만 삭제 |
DROP | - 테이블이 사용했던 STORAGE 모두 RELEASE - 테이블 정의 자체를 완전히 삭제함 - 테이블 자체를 완전히 제거 - 관련된 모든 것들도 함께 제거 ( 데이터 인덱스, 트리거, 제약조건 등) -테이블 구조, 모든 데이터 한번에 삭제 - 속도 빠름 |
TRUNCATE | - 테이블이 사용했던 STORAGE 중 최초 테이블 생성 시 할당된 STORAGE만 남기고 RELEASE - 전체 테이블을 빠르게 제거 - 로그를 기록하지 않음 - 데이터만 제거, 구조는 그대로 유지 - 매우 빠름 - 로그없이 전체 테이블을 비움 |
DELETE | 데이터를 모두 DELETE해도 사용했던 STORAGE는 RELEASE되지 않음 - 테이블에서 하나 이상의 레코드를 제거 - WHERE절을 사용하여 특정 레코드 지정가능 - 데이터만 삭제, 구조는 그대로 유지 - 상대적으로 느림 - 개별 로우를 삭제하고 각각의 삭제 작업을 로깅 |
TRUNCATE
TRUNCATE TABLE은 테이블 자체가 삭제되는 것이 아니라, 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제한다.
테이블 구조를 완전히 삭제하기 위해서는 DROP TABLE을 실행하면 된다.
작업의 순서를 보면 데이터베이스의 사용자에게 권한을 부여하고 권한이 부여되면 DDL로 데이터 구조를 정의한다.
데이터 구조가 정의되면 데이터를 입력한 후에 개발자 및 사용자가 그 데이터를 조회하는 것이다.
SQL문의 실행 순서
개발자가 작성한 SQL문(DDL, DML, DCL 등)은 3단계를 걸쳐서 실행된다.
SQL문의 문법을 검사하고 구문분석을 한다.
구문분석 이후에 SQL을 실행한다.
SQL이 실행되면 데이터를 인출하게 된다.
SQL 실행 순서 | 설명 |
---|---|
파싱 (Parsing) | - SQL문의 문법을 확인하고 구문분석한다. - 구문분석한 SQL문은 Library Cache에 저장한다. |
실행 (Execution) | - 옵티마이저(Optimizer)가 수립한 실행 계획에 따라 SQL을 실행한다. |
인출 (Fetch) | - 데이터를 읽어서 전송한다. |
🎯 추가 내용
PL/SQL
PL/SQL은 SQL프로그래밍을 오라클에서 부르는 명칭이다.
CURCOR는 테이블의 레코드(행,듀플)의 위치를 저장하고 있는 부분이다.
인출(FETCH)는 DML구문에서 조건에 해당하는 레코드를 가져오는 행위이다.
FETCH 이전에 CURSOR ~ FETCH ~ CLOSE CURSOR의 구문을 지닌다.
PK순서를 결정하는 기준
인덱스 정렬구조를 이해한 상태에서 인덱스를 효율적으로 이용할 수 있도록 PK순서를 지정해야한다.
인덱스의 특징은 여러개의 속성이 하나의 인덱스로 구성되어 있을 때 앞쪽에 위치한 속성의 값이 비교자로 있어야 인덱스가 좋은 효율을 낼 수 있다.
앞쪽에 위치한 속성 값이 가급적
=
아니면 최소한 범위BETWEEN
,<>
가 들어와야 인덱스를 이용할 수 있는 것이다.즉,
=
로 들어온 조건에 해당하는 컬럼이 인덱스의 가장 앞쪽에 위치할 때 인덱스의 이용 효율성이 가장 높다고 할 수 있다.
📚 레퍼런스
정미나. (유튜브 선생님에게 배우는) 유선배 SQL개발자(SQLD) 과외노트 / [정미나 저] (2023). Print.
한국데이터산업진흥원. SQL 자격검정 실전문제 : 국가공인 SQL전문가·국가공인 SQL개발자 / 한국데이터산업진흥원 [편] (2020). Print.