SQL은 관계형 데이터베이스에서 데이터 정의, 데이터 조작, 데이터 제어 등을 위하여 사용하는 언어다. SQL의 종류로는 DDL, DML, DCL, TCL 이 있다.
DDL 은 테이블이나 인데스 같은 데이터의 구조를 정의하거나 수정, 삭제하는데 사용되는 명령어다. 이제 DDL 에 대하여 더 알아보자.
DDL 의 대상
DDL 대상 설명 Table 데이터를 저장하는 기본 저장단위, 행과 열로 구성 View 하나 이상의 물리 테이블에서 유도되는 가상의 테이블 Index 검색 속도를 향상시키기 위한 데이터베이스 오브젝트 Schema 데이터베잉스의 구조와 제약조건에 관한 전반적인 명세를 기술한 메타데이터의 집합 데이터 유형
컬럼을 정의할 때 선언한 데이터 유형은 해당 컴럼이 받아드리는 자료형을 규정해야한다. 또 선언한 데이터의 자료형이 아닌 데이터가 입력되거나 지정한 데이터 크기를 초과하면 에러가 발생한다.
자료형 설명 CHARACTER(size) 길이가 size인 고정 길이 문자열 데이터 VARCHAR(size) 가변 길이 문자 데이터(size 는 최대 크기, 가변 길이로 조정되므로 할당된 변수값 만큼의 byte 만 적용됨) NUMERIC 정수 데이터 DATETIME 날짜와 시각 데이터 명령어
DDL 명령어는 생성, 수정, 삭제로 나뉜다.
유형 명령어 설명 생성 CREATE 새로운 데이터베이스 개체 생성 수정 ALTER 이미 존재하는 데이터베이스 개체에 대한 변경 삭제 DROP
TRUNCATE이미 존재하는 데이터베이스 개체 삭제
데이터베이스 개체에서 내용 삭제
CREATE TABLE 을 사용하여 테이블을 생성할 때는 다음을 주의해야한다. 테이블 이름에는 단수형 객체를 의미하는 적절한 이름을 사용하고, 다른 테이블과 중복된 이름을 가져서는 안된다. 또한 한 테이블안에 같은 이름의 컬럼이 존재해서도 안되며 컬럼 뒤에는 반드시 자료형을 지정해주어야한다. 또 모든 컬럼은 반드시 문자로 시작해야하며 예약어는 사용이 불가능하다. 이제 예제를 통해 CREATE TABLE 을 사용하는 법을 알아보자.
CREATE TABLE 문법
명령어 설명 NOT NULL NULL 값 불허 PRIMARY KEY 기본키 선언 UNIQUE 고유키 선언 FOREIGN KEY 외래키 선언 CONSTRAINT 제약조건 설명 테이블 생성 조건
대상 조건 테이블 명 STUDNET 컬럼 ST_ID 고정문자 8자리
ST_NAME 가변문자 20자리
CLASS_ID 고정문자 4자리
BIRTH 날짜제약 조건 Primary Key: ST_ID(제약조건 명은 ST_PK)
NOT NULL: ST_NAME, ST_IDCREATE TABEL STUDENT( ST_ID CHAR(8) NOT NULL, ST_NAME VARCHAR2(20) NOT NULL, CLASS_ID CHAR(4), BIRTH DATE, CONSTRAINT ST_PK PRIMARY KEY(ST ID) );
ALTER 명령어는 컬럼이나 제약조건을 추가/삭제 하기 위하여 사용한다.
ALTER TABLE 문법
구분 문법 설명 ADD ALETER TABLE 테이블명 ADD 컬럼명 데이터유형 NOT NULL 테이블에 컬럼 추가 MODIFY ALTER TABLE 테이블명 MODIFY 컬럼명 데이터 유형 NOT NULL 컬럼의 제약조건 변경 DROP COLUMN ALTER TABLE 테이블명 DROP COLUNM 컬럼명 컬럼을 삭제 RENAME COLUNM ALTER TABLE 테이블명 RENAME COLUNM 컬럼명 TO 바꿀 컬럼명 컬럼의 이름 변경 DROP CONSTRAINT ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건 기존 제약조건 삭제 ADD CONSTRAINT ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건 테이블에 제약조건 추가
DROP 은 불필요한 테이블을 삭제하기 위한 명령어다.
DROP TABLE 문법
문법 설명 DROT TABLE 테이블 명 [CASCADE CONSTRAINT] 테이블의 모든 데이터와 구조까지 완전히 삭제
CASECADE CONSTRAINT 는 PRIMARY KEY, UNIQUE KEY 를 참조하는 다른 테이블의 참조 무결성 제약도 함께 삭제시키는 명령이다.
TRUNCATE TABLE 은 테이블에 저장된 모든 행을 제거하고 저장공간을 재사용 할 수 있도록 해제하는 명령어다.
TRUNCATE 문법
문법 설명 TURNCATE TABLE 테이블명 테이블의 모든 행을 삭제
최초로 생성된 초기의 상태로 만듦
구분 DROP TRUNCATE DELETE 명령어 종류 DDL DDL DML Rollback 불가능 불가능 COMMIT 안했으면 가능 Commit Auto Auto 사용자가 직접 COMMIT Release 테이블이 사용한 모든 저장소 모두 테이블이 사용했던 저장소 중 최초 테이블 생성 시 할당된 저장소만 남기고 Realese 사용했던 저장소는 Reelase 되지 않음 삭제 상태 테이블 정의까지 완전삭제 최초 생성된 초기상태로 만듦 테이터만 삭제 삭제 로그 없음 없음 있음
DML 은 데이터베이스에 저장된 데이터를 조회, 입력, 수정, 삭제하는 데 사용하는 질의어다. DML은 비절차적 데이터 조작어이고, 사용자가 무슨 데이터를 원하는지 명세한다.
DML 의 유형
유형 동작 설명 SELECT 데이터 조회 테이블을 구성하는 레코드 중 전체 또는 조건을 만족하는 레코드를 조회 INSERT 데이터 입력 테이블에 새로운 *레코드를 입력 UPDATE 데이터 수정 테이블에 특정 레코드를 변경 DELETE 데이터 삭제 테이블에 특정 레코드를 삭제 레코드: 관계형 DB에서는 행을 레코드 또는 튜플로 정의함
SELECT 명령어는 데이터의 내용을 조회할 때 사용하는 명령어다.
SELECT 문법
문법 설명 SELECT [ALL | DISTINCT]
컬럼명 AS 별명
FROM 테이블명SELECT절에서 명시한 컬럼을 FROM 절의 테이블에서 조회
ALL(중복된 데이터 O), DISTINCT(중복된 데이터 X) 는 생략 가능
AS 를 사용하면 별명 지을수 있음
AS도 생략 가능
INSERT 명령어는 데이터의 내용을 입력할 떄 사용하는 명령어다.
INSERT 문법
문법 설명 INSERT INTO 테이블명(컬럼명) VALUES(입력값) 데이터를 입력하고자 하는 테이블의 컬럼을 정의하여 데이터를 입력
컬럼은 생략 가능
UPDATE 명령어는 데이터의 내용을 수정할 떄 사용하는 명령어다.
UPDATE 문법
문법 설명 UPDATE 테이블명
SET 컬럼명=입력값
WHERE 조건UPDATE 문의 테이블에서 SET 절의 컬럼을 입력값으로 수정
WHERE 절에서 데이터 수정 조건 정의
DELETE 명령어는 데이터의 내용을 삭제할 떄 사용하는 명령어다.
DELETE 문법
문법 설명 DELETE[FROM] 테이블명
WHERE 조건DELETE 문의 테이블에서 WHERE 절의 조건에 맞는 데이터를 제거
FROM 은 생략 가능
TCL은 트랜재견을 제어하는 명령어다. 트랜잭션은 업무 처리를 위한 데이터베이스의 논리적인 작업 단위를 의미한다. 하나의 트랜잭션은 한 개 이상의 연산으로 이루어질 수 있고, 이 연산들은 완전히 처리되거나 아예 한 개도 처리가 되지 않아야 한다. 트랜잭션의 특징은 다음과 같다.
COMMIT 은 하나의 트랜잭션을 정상적으로 완료하고 그 결과를 데이터베이스에 반영하는 명령어다. 쉽게 GitHub 커밋이라 생각하면 된다.
COMMIT 예제
INSERT INTO ARSENAL VALUES(100,'은케티아',14,101,'아스널 공격수','축신',1400000); COMMIT;
위 코드에서 INSERT 키워드를 사용하여 데이터를 입력하고 COMMIT 을 통하여 트랜잭션을 완료하고 데이터베이스에 추가한 정보가 반영된 것을 알 수 있다.
ROLLBACK 은 문제가 발생한 트랜잭션을 취소하기 위한 명령어다. 데이터베이스가 비정상적으로 종료된다면 자동으로 ROLLBACK 된다.
ROLLBACK 예제
UPDATE COACH SET COACH_NAME = "아르테타" WHERE COACH_NAME = "뱅거"; ROLLBACK;
위 코드에서는 UPDATE 문장으로 COACH 테이블에서 COACH_NAME이 '뱅거' 라면 '아르테타'로 수정한다. 그리고 ROLLBACK 명령어를 통해 UPDATE 문장이 데이터베이스에 반영되지 않게 함.
SAVEPOINT 는 하나의 트랜잭션을 작게 분할하여 저장하는 명령어다. 하나의 트랜잭션에는 여러개의 SQVEPOINT 지정이 가능하다. 다음 예제를 통해 더 알아보자.
SAVEPOINT 예제
SAVEPOINT SP1; INSERT INTO MEMBERS VALUES( 102, '트로사르', 19, 101, '최소 아자르', 'FW', 999999 ); SAVEPOINT SP2; UPDATE MEMBERS SET MEMBER_NAME = '외데고르' WHERE MEMBER_NAME = '외질'; ROLLBACK TO SP2;
다음 코드에서 알 수 있는 동작은 먼저 저장점 SP1을 지정 후 INSERT 문으로 데이터를 입력했다. 그 다음 저장점 SP2 를 지정한 뒤 UPDATE 문으로 MEMBER_NAME을 '외질' 에서 '외데고르'로 수정했다. 그 다음 ROLLBACK 명령어로 SP2 지점까지 롤백했다.
SQL 구문의 종류는 다음과 같다.
구문 | 설명 |
---|---|
FROM | 테이블 고르기 |
WHERE | 테이블에 주어진 조건 |
GROUP BY | 공통적인 데이터들끼리 그룹 묶기 |
HAVING | 주어진 조건에 맞는 그룹들을 추출 |
SELECT | 최종적으로 추출된 데이터 조회 |
ORDER BY | 추출된 데이터 정렬 |
SQL 구문의 작성/실행 순서는 다음 코드에서 확인할 수 있다.
SELECT 컬럼명 //5
FROM 테이블명 //1
WHERE 테이블 조건 //2
GROUP BY 컬럼명 //3
HAVING 그룹조건 //4
ORDER BY 컬럼명 //6
오늘은 SQL의 3가지 종류 DML, DCL, TCL 에 대하여 알아보았다.
(사실 내일 SQLD 시험이라 마지막 정리 느낌으로 했는데 붙었으면...)