해당 포스트는
SQLD
를 학습하며 정리한 내용에 대한 포스트입니다.
이론을 학습한 내용을 정리하고 퀴즈, 기출문제 등을 기록하려고 합니다.
⚡ DDL(Data Definition Language)
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에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어 |
💾 테이블(Table) 생성
테이블 생성
데이터베이스를 사용하기 위해서는 테이블을 먼저 생성해야 한다.
테이블 생성은 Create Table문을 사용
테이블 변경은 Alter Table문을 사용
테이블 삭제은 Drop Table문을 사용
테이블 관리 SQL문
SQL문 | 설명 |
---|---|
Create Table | - 새로운 테이블을 생성한다. - 테이블을 생성할 때 기본키, 외래키, 제약사항 등을 설정할 수 있다. |
Alter Table | - 생성된 테이블을 변경한다. - 컬럼을 추가하거나 변경,삭제할 수 있다. - 기본키를 설정하거나, 외래키를 설정할 수 있다. |
Drop Table | - 해당 테이블을 삭제한다. - 테이블의 데이터 구조뿐만 아니라 저장된 데이터도 모두 삭제한다. |
기본적인 테이블 생성
테이블을 생성하는 방법은 여러 가지가 있다. 먼저 아주 간단한 테이블 생성 방법을 확인해 보자.
VARVHAR vs CHAR
VARVHAR(n)은 가변형으로 최대 n의 길이의 문자열을 저장할 수 있지만, 실제 사용하는 만큼만 공간을 차지, 비교 시 서로 길이가 다른 경우, 다른 내용으로 판단.
CHAR(n)은 항상 n의 길이의 문자열을 저장. 만약 입력 문자열의 길이가 n보다 작으면, 나머지 공간은 공백으로 채워짐, 길이가 서로 다른 경우, 길이가 짧은 쪽에 공백을 추가하여 같은 내용인지 판단.
CHAR 필드의 처리 속도가 빠르고, VARCHAR 필드는 메모리를 보다 효율적으로 사용한다고 볼 수 있다.
테이블 생성의 주의사항
- 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용, 가능한 단수형 권고
- 테이블명은 중복되지 않아야 한다.
- 한 테이블 내에서 컬럼명이 중복되게 지정될 수 없다.
- 테이블 이름을 지정하고 각 컬럼들은 괄호
()
로 묶어 지정한다.- 각 컬럼들은 콤마
,
로 구분되고, 테이블 생성문의 끝은 항상 세미콜론;
으로 끝난다.- 컬럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성있게 사용하는 것이 좋다. (데이터 표준화 관점)
- 컬럼 뒤에 데이터 유형은 꼭 지정되어야 한다.
- 테이블명과 컬럼명은 반드시 문자로 시작해야하고, 벤더 길이에 대한 한계가 있다.
- 벤더에서 사전에 정의한 예약어(Reserved Word)는 사용할 수 없다.
A-Z
,a-z
,0-9
,_
,$
,#
문자만 허용한다.
Create Table문 구조
1
2
3
4
CREATE TABLE 테이블명 (
컬럼명 1 데이터 타입 (DEFAULT / NULL 여부)
...
)
- NULL : 공백(‘‘)과는 다르며 존재하지 않는 값이란 의미
- DEFAULT : 데이터의 기본값을 의미한다.
Create Table | - 새로운 테이블을 생성한다. - 테이블을 생성할 때 기본키, 외래키, 제약사항 등을 설정할 수 있다. |
Alter Table | - 생성된 테이블을 변경한다. - 컬럼을 추가하거나 변경,삭제할 수 있다. - 기본키를 설정하거나, 외래키를 설정할 수 있다. |
Drop Table | - 해당 테이블을 삭제한다. - 테이블의 데이터 구조뿐만 아니라 저장된 데이터도 모두 삭제한다. |
테이블의 구조를 확인하고 싶다면 SQL 중에 DESC문이 있다.
DESC(Describe)
문은 테이블의 구조를 확인할 때 사용된다.
즉 , Create Table로 생성된 테이블의 구조를 보고 싶을 때 사용한다.
ORDER BY 의 desc와는 다른 것이므로 주의
🧷 제약조건 사용
테이블을 생성할 때부터 제약조건을 설정하는 것이 좋다.
기본키, 외래키, 기본값, not null 등은 테이블을 생성할 때 지정할 수 있다.
위의 예를 보면,
constraint
를 사용하여 기본키와 기본키의 이름을 지정할 수 있다.만약 위의 예에서 두 개의 기본키를 지정하고자 한다면
constraint emppk primary key(empno, ename)
으로 지정하면 된다.sal 컬럼은
number(10,2)로 지정
했다. 이것은소수점 둘째 자리까지 저장
하게 된다.Oracle 데이터베이스에서
sysdate
는오늘의 날짜를 조회
한다. 이를default
옵션을 사용해서 오늘 날짜를 기본값으로 지정할 수 있다.
외래키를 지정하려면, 먼저 마스터(부모) 테이블이 생성되어야 한다.
즉, 사원과 부서 테이블에서는 부서가 마스터 테이블이 된다.
사원 테이블이 부서 테이블의
deptno
를 참조해야 하는 것이다.그리고 EMP 테이블을 생성할 때
constraint
를 사용하여 외래키 이름인“deptkf”
를 입력 후 외래키를 생성한다.
테이블 생성 시 CASCADE 사용
테이블을 생성할 때 CASCADE 옵션을 사용할 수 있다.
CASCADE 옵션은 참조 관계(기본 키와 외래키 관계)가 있을 경우 참조되는 데이터를 자동으로 반영할 수 있는 것이다.
먼저, 마스터 테이블을 생성한다. 즉, DEPT 테이블을 생성하고 데이터를 입력한다.
그 다음 EMP 테이블을 생성하고 데이터를 입력한다.
단, EMP 테이블을 생성할 때,
On Delete Cascade
옵션을 사용한다.
- EMP 테이블을 생성하고 데이터 두개를 입력한다.
위의 예제를 보면 DEPT 테이블에서 DEPTNO가 ‘1000’번인 인사팀을 삭제했다.
그리고 EMP 테이블의 데이터를 조회한 결과, DEPTNO ‘1000’번이였던 ‘임베스트’ 데이터도 자동으로 삭제된 것을 알 수 있다.
즉, ON DELETE CASCADE 옵션은 자신이 참조하고 있는 테이블(DEPT)의 데이터가 삭제되면 자동으로 자신(EMP)도 삭제되는 옵션이다.
ON DELETE CASCADE 옵션을 사용하면 참조 무결성을 준수할 수 있다.
참조 무결성이란,
마스터 테이블(DEPT)에는 해당 부서번호(DEPTNO)가 없는데, 슬레이브 테이블(EMP)에는 해당 부서번호가 있는 경우를 참조 무결성 위배로 볼 수 있다.
마스터 테이블(DEPT) VS 슬레이브 테이블(EMP)
종종 관계형 데이터베이스에서의
부모-자식 관계
또는참조 관계
를 설명하는 데 사용되는 용어마스터 테이블은 주로 참조의 기준점으로 사용되는 테이블이다. 종종
부모테이블
로도 부른다.
- 예를 들어, 사원들의
부서 정보
가 저장된 ‘DEPT’ 테이블을 생각해보면, 각 부서에는 고유한 ID가 있고, 이 ID는 다른 테이블에서 부서를 참조할 때 사용된다.슬레이브(또는 자식)테이블은 마스터(또는 부모)테이블을 참조하는 행을 가지고 있는 테이블이다.
- 예를 들어,
사원 정보
가 저장된 ‘EMP’테이블을 생각해보면 각 사원에 대한 정보와 함께 해당 사원의 부서 ID도 저장된다. 이 경우, ‘EMP’테이블은 슬레아비(자식)테일반이며, 그들의 부서 ID 컬럼은 ‘DEPT’(마스터/부모)텍스트을 참조한다.참조 무결성은 이러한 관계를 유지하면서 데이터의 일관성을 보장하는 개념
- 즉, EMP(슬레아비/자식)텍스트에 있는 모든 부서 ID(DEPTNO) 값들은 반드시 DEPT(마스터/부모)텍스트에 존재해야 한다.
🔨 테이블 변경
테이블명 변경
테이블명 변경은 ALTER TABLE ~ RENAME TO
문을 사용하면 된다.
컬럼 추가
생성된 EMP 테이블에 ALTER TABLE ~ ADD
문을 사용해서 컬럼을 추가한다.
삽입 컬럼을 명시하지 않았을 경우 모든 컬럼을 삽입해야 한다.
컬럼 변경
**컬럼의 변경은 ALTER TABLE ~ MODIFY문을 사용하면 된다. **
컬럼 변경을 통해 데이터 타입을 변경하거나 데이터의 길이를 변경할 수 있다.
컬럼을 변경할 때 제약조건을 설정할 수도 있다.
컬럼의 데이터 타입을 변경할 때 기존 데이터가 있는 경우 에러가 발생한다.
- 예를 들어 숫자 타입이고 숫자 데이터가 저장되어 있는데 문자형 데이터 타입으로 변경하면 에러가 발생하는 것이다.
컬럼 삭제
컬럼에 대한 삭제는 ALTER TABLE ~ DROP COLUMN문으로 삭제한다.
컬럼명 변경
컬럼명 변경은 ALTER TABLE ~ RENAME COLUMN ~ TO 문으로 변경할 수 있다.
테이블 컬럼에 대한 정의 변경
ORACLE
ALTER TABLE 테이블명
MODIFY
(칼럼명 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터 유형…);SQL Server
ALTER TABLE 테이블명
ALTER
(칼럼명 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터 유형…);
🪓 테이블 삭제
테이블 삭제는 DROP TABLE 문을 사용해서 삭제할 수 있다.
DROP TABLE은 테이블의 구조와 데이터를 모두 삭제한다.
DROP TABLE에서 “CASCADE CONSTRAINT” 옵션을 사용할 수 있다. “CASCADE CONSTRAINT” 옵션은 해당 테이블의 데이터를 외래키로 참조한 슬레이브 테이블과 관련된 제약사항도 삭제할 때 사용된다.
🎯 추가 내용
❌테이블의 제약 조건
👉 설명
외래키(Foreign Key)는 두 개의 테이블 간의 참조 무결성을 제약한다.
기본키(Primary Key) 제약사항은 테이블 당 하나만 제약할 수 있다.
- Check 제약조건(Constraint)은 특정 값만 입력되게 제안한다.
- 데이터베이스에서 데이터의 무결성을 유지하기 위하여 테이블의 특정 컬럼(COLUMN)에 설정하는 제약
- 고유키(Unique Key)제약조건으로 NULL은 허용하는데 단 1개만 허용한다. NOT NULL 일 경우 하나도 불가능
❌
👉
📚 레퍼런스
정미나. (유튜브 선생님에게 배우는) 유선배 SQL개발자(SQLD) 과외노트 / [정미나 저] (2023). Print.
한국데이터산업진흥원. SQL 자격검정 실전문제 : 국가공인 SQL전문가·국가공인 SQL개발자 / 한국데이터산업진흥원 [편] (2020). Print.