동아리에서 진행하는 SQLD 자격증 스터디를 하며 기억하고 싶은 내용들을 블로그 글에 정리해본다.
오늘은 SQL 기본 문법에 정리해보려고 한다.
내용은 책 'SQL 자격검정 실전문제' 그리고 사이트 'DATA ON-AIR'의 SQL 부문(링크)을 참고하여 정리하였다.
SQL 문장 종류
명령어 종류 | 명령어 | 설명 |
데이터 조작어 (DML: Data Manipulation Language) | SELECT | DB에 들어간 데이터 조회/검색하기 위한 명령어 (RETREIVE라고도 함) |
INSERT UPDATE DELETE |
DB의 table에 들어있는 데이터 변형(삽입/수정/삭제)하는 명령어 | |
데이터 정의어 (DDL: Data Definition Language) | CREATE ALTER DROP RENAME |
table과 같은 데이터 구조 정의(구조 생성/변경/삭제)하는데 사용하는 명령어 |
데이터 제어어 (DCL: Data Control Language) | GRANT REVOKE |
DB 접근하고 객체 사용하도록 권한 주고 회수하는 명령어 |
트랜잭션 제어어 (TCL: Transaction Control Language) | COMMIT ROLLBACK |
논리적인 작업 단위를 묶어서 DML에 조작된 결과를 작업 단위(트랜잭션)별로 제어하는 명령어 |
DDL 문법 정리
[1] CREATE TABLE
테이블 생성하는 구문 형식
CREATE TABLE 테이블명 (
칼럼명1 데이터타입 [DEFAULT 형식],
칼럼명2 데이터타입 [DEFAULT 형식],
);
- 테이블 생성시 대/소문자 구분 안 함
- 테이블명과 칼럼명은 반드시 문자로 시작, 벤더별로 길이 제한있음
- 벤더에서 사전에 정의한 예약어 사용 X
- A-Z, a-z, 0-9, _, $, # 문자만 허용됨
- 제약조건은 정의 방식에 따라 쓰는 위치가 변경된다.
- 제약조건 종류
구분 | 설명 |
PRIMARY KEY (기본키) | table의 행 데이터 고유하게 식별하기 위한 기본키. 기본키 제약 정의 시, 자동으로 UNIQUE, NOT NULL로 설정됨 |
UNIQUE KEY (고유키) | table의 행 데이터 고유하게 식별하기 위한 고유키. NULL이어도 괜찮음 |
NOT NULL | NULL 금지 (*NULL 은 공백이나 숫자 0과는 다른 것이며, 조건에 맞는 데이터가 없을때의 공집합과도 다르다. NULL은 '아직 정의되지 않은 미지의 값'이거나 '현재 데이터를 입력하지 못하는 경우'를 의미한다.) |
CHECK | 입력할 수 있는 값의 범위 제한 |
FOREIGN KEY (외래키) | RDB에서 table간의 관계 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우 외래키 생성됨. 외래키 지정시 참조 무결성 제약 옵션 선택할 수 있음 |
PK는 중복 X, NULL X
UNIQUE는 중복 X, NULL O
+ 외래키 NULL 가질 수 있고, 한 테이블에 여러개 존재 가능
더보기
예제
[ORACLE]
CREATE TABLE TEAM (
TEAM_ID CHAR(3) NOT NULL,
REGION_NAME VARCHAR2(8) NOT NULL,
TEAM_NAME VARCHAR2(40) NOT NULL,
E_TEAM_NAME VARCHAR2(50),
ORIG_YYYY CHAR(4),
STADIUM_ID CHAR(3) NOT NULL,
ZIP_CODE1 CHAR(3),
ZIP_CODE2 CHAR(3),
ADDRESS VARCHAR2(80),
DDD VARCHAR2(3),
TEL VARCHAR2(10),
FAX VARCHAR2(10),
HOMEPAGE VARCHAR2(50),
OWNER VARCHAR2(10),
CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID),
CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES STADIUM(STADIUM_ID)
);
[SQL Server]
CREATE TABLE TEAM (
TEAM_ID CHAR(3) NOT NULL,
REGION_NAME VARCHAR(8) NOT NULL,
TEAM_NAME VARCHAR(40) NOT NULL,
E_TEAM_NAME VARCHAR(50), ORIG_YYYY CHAR(4),
STADIUM_ID CHAR(3) NOT NULL,
ZIP_CODE1 CHAR(3),
ZIP_CODE2 CHAR(3),
ADDRESS VARCHAR(80),
DDD VARCHAR(3),
TEL VARCHAR(10),
FAX VARCHAR(10),
HOMEPAGE VARCHAR(50),
OWNER VARCHAR(10),
CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID),
CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES STADIUM(STADIUM_ID)
);
[2] ALTER TABLE
테이블 구조 변경
(1) ADD Column - 칼럼 추가
더보기
[기본 구조]
ALTER TABLE 테이블명 ADD 추가할 칼럼명 데이터 유형;
[ORACLE]
ALTER TABLE PLAYER ADD (ADDRESS VARCHAR2(80));
[SQL Server]
ALTER TABLE PLAYER ADD ADDRESS VARCHAR(80);
(2) DROP Column - 칼럼 삭제
더보기
[기본 구조]
ALTER TABLE 테이블명 DROP COLUMN 삭제할 칼럼명;
[ORACLE]
ALTER TABLE PLAYER DROP COLUMN ADDRESS;
[SQL Server]
ALTER TABLE PLAYER DROP COLUMN ADDRESS;
(3) MODIFY Column - 칼럼 수정 (데이터 유형, 제약조건 등 변경)
더보기
[ORACLE]
ALTER TABLE 테이블명 MODIFY (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터 유형 …);
ex.
ALTER TABLE TEAM_TEMP MODIFY (ORIG_YYYY VARCHAR2(8) DEFAULT '20020129' NOT NULL);
[SQL Server]
ALTER TABLE 테이블명 ALTER (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터 유형 …);
ex.
ALTER TABLE TEAM_TEMP ALTER COLUMN ORIG_YYYY VARCAHR(8) NOT NULL;
(4) ADD/DROP CONSTRAINT - 특정 칼럼에 제약 조건 추가/삭제
더보기
[기본 구조]
(삭제) ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
(추가) ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);
[ORACLE]
(삭제) ALTER TABLE PLAYER DROP CONSTRAINT PLAYER_FK;
(추가) ALTER TABLE PLAYER ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);
[SQL Server]
(삭제) ALTER TABLE PLAYER DROP CONSTRAINT PLAYER_FK;
(추가) ALTER TABLE PLAYER ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);
[3] DROP TABLE
테이블 삭제
DROP TABLE 테이블명 [CASCADE CONSTRAINT];
[4] RENAME TABLE
테이블 이름 변경
[ORACLE]
RENAME 변경전 테이블명 TO 변경후 테이블명;
(ex) RENAME TEAM TO TEAM_BACKUP;
[SQL Server]
sp_rename 변경전 테이블명, 변경후 테이블명;
(ex) sp_rename 'dbo.TEAM','TEAM_BACKUP';
[5] TRUNCATE TABLE
테이블 행모두 제거하고, 저장 공간을 재사용 가능하도록 해제함
(*데이블 구조를 완전 삭제하려면 DROP TABLE)
TRUNCATE TABLE PLAYER;
'#️⃣ CS (Computer Science) > SQL' 카테고리의 다른 글
[SQL] SQL 기본 - DML, TCL (0) | 2023.02.14 |
---|