제 3절 DML(Data Manipulation Language)
1. INSERT
테이블에 데이터를 입력하는 방법은 두 가지 유형이 있으며 한번에 한건만 입력된다.
첫번째 유형 : 몇 개의 컬럼에만 데이터를 삽입하는 경우
- INSERT INTO 테이블명 (컬럼리스트) VALUES (컬럼리스트에 넣을 값리스트);
두번째 유형 : 모든 칼럼에 데이터를 삽입하는 경우
- INSERT INTO 테이블명 VALUES (전체컬럼리스트에 넣을 값리스트);
- 데이터 유형이 문자일 경우 ' (single quotation)로 입력할 값을 입력
- 데이터 유형이 숫자일 경우 그냥 입력
- Primary key나 not null로 지정된 칼럼은 null이 허용되지 않는다.
- 두번째 유형은 칼럼의 순서대로 빠짐없이 데이터가 입력되어야 한다.
예제)
몇 개의 컬럼에만 데이터를 입력할 때
INSERT INTO PLAYER
(PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, HEIGHT, WEIGHT, BACK_NO)
VALUES('2002007', '박지성', 'K07', 'MF', 178, 73, 7);
모든 컬럼에 데이터를 입력할 때
INSERT INTO PLAYER VALUES ('2002010', '이청용', 'K07', '', 'BlueDragon', '2002', 'MF', '17', NULL, NULL, '1', 180, 69);
2. UPDATE
입력한 정보 중에 잘못 입력되거나 변경이 발생하여 정보를 수정해야 하는 경우가 발생할 수 있다. 다음은 UPDATE 문장의 기본 형태이다. UPDATE 다음에 수정되어야 할 칼럼이 존재하는 테이블명을 입력하고 SET 다음에 수정되어야 할 컬럼명과 해당 칼럼에 수정되는 값으로 수정이 이루어진다.
UPDATE 테이블명 SET 수정되어야할칼럼명 = 수정되기를원하는새로운값 ;
예제)
UPDATE PLAYER SET BACK_NO = 99;
UPDATE PLAYER SET POSITION ='MF';
3. DELETE
테이블의 정보가 필요 없게 되었을 경우 데이터 삭제를 수행한다. 다음은 DELETE 문장의 기본적인 형태이다. FROM문구는 생략이 가능한 키워드이며, 뒤에서 배울 WHERE 절을 사용하지 않는다면 테이블의 전체 데이터가 삭제된다.
DELETE [FROM] 삭제를 원하는 정보가 들어있는 테이블명;
예제)
DELETE FROM PLAYER;
참고로 데이터베이스는 DDL 명령어와 DML 명령어를 처리하는 방식에 있어서 차이를 보인다.
- DDL(CREATE, ALTER, RENAME, DROP) 명령어인 경우, 직접 데이터베이스의테이블에 영향을 미치기 때문에 DDL 명령어를 입력하는 순간 명령어에 해당하는 작업이 즉시(Auto Commit) 완료된다.
- DML(INSERT, UPDATE, DELETE, SELECT) 명령어의 경우, 조작하려는 테이블을 메모리 버퍼에 올려놓고 작업을 하기 때문에 실시간으로 테이블에 영향을 미치는 것은 아니다. 따라서 버퍼에서 처리한 DML 명령어가 실제 테이블에 반영되기 위해서는 COMMIT 명령어를 입력하여 TRANSACTION을 종료해야한다.
- SQL Server의 경우 DML의 경우도 AUTO COMMIT으로 처리되기 때문에 실제 테이블에 반영하기 위해 COMMIT 명령어를 입력할 필요가 없다.
- DELETE TALBE 보다는 시스템 부하가 적은 TRUNCATE TABLE을 권고
- TRUNCATE TABLE 의 경우 삭제된 데이터의 로그가 없으므로 ROLLBACK이 불가능하므로 주의해야 한다.
- SQL Server의 경우 복구를 원할 경우 ROLLBACK 문을 이용하여 테이블 데이터를 원 상태로 되돌릴 수 있다.
4. SELECT
사용자가 입력한 데이터는 언제라도 조회가 가능하다. 앞에서 입력한 자료들을 조회해보는 SQL 문은 다음과 같다.
SELECT [ALL/DISTINCT] 보고싶은칼럼명1, 보고싶은칼럼명2, ... FROM 해당칼럼들이있는테이블명;
- ALL : Default 옵션이므로 별도로 표기하지 않아도 된다. 중복된 데이터가 있더라도 모두 출력한다.
- DISTINCT : 중복된 데이터가 있는 경우 1건으로 처리해서 출력한다.
SELECT DISTINCT POSITION FROM PLAYER;
POSITION
-----------
GK
DF
FW
MF
- WILDCARD 사용하기
입력한 정보들을 보기우해 PLAYER 테이블에서 보고싶은 정보들이 있는 칼럼들을 선택하여 조회해보는 것이다. 해당 테이블의 모든 칼럼정보를 보고 싶은 경우에는 와일드카드로 에스터리스크(*)를 사용하여 조회할 수 있다.
예제)
SELECT * FROM 테이블명;
테이블명의 모든 칼럼들의 정보를 조회하게 된다.
- 실행결과는 레이블이 맨 위에 보이게 되고, 레이블 밑에 점선이 보이는 형태
- 레이블은 기본적으로 대문자로 보임
- 문자 및 날짜 데이터는 좌측정렬
- 숫자 데이터는 우측정렬
- ALIAS 부여하기
조회된 결과에 일종의 별명(Alias, Aliases)을 부여해서 칼럼 레이블을 변경할 수 있다.
- 칼럼명 바로 뒤에 위치
- 칼럼명과 ALIAS 사이에 AS or as 키워드를 사용
- 이중 인용부호(Double quotation)는 Alias가 공백, 특수문자를 포함할 경우와 대소문자구분이 필요할 경우 사용
- 칼럼 별명을 적용할 때 별명 중간에 공백이 들어가는 경우 (ex : 곰 돌 이) 쌍따옴표(" ")를 사용
- SQL Server의 경우 쌍따옴표, 따옴표, [] 와 같이 세가지 방식으로 별명을 부여할 수 있음
예제)
SELECT PLAYER_NAME AS 선수명, POSITION AS 위치, HEIGHT AS 키, WEIGHT AS 몸무게 FROM PLAYER;
= SELECT PLAYER_NAME 선수명, POSITION 위치, HEIGHT 키, WEIGHT 몸무게 FROM PLAYER;
[실행 결과]
선수명 위치 키 몸무게
----- --- -- ----
정경량 MF 173 65
정은익 MF 176 63
레오마르 MF 183 77
명재용 MF 173 63
변재섭 MF 170 63
보띠 MF 174 68
비에라 MF 176 73
서동원 MF 184 78
안대현 MF 179 72
양현정 MF 176 72
유원섭 MF 180 77
김수철 MF 171 68
임다한 DF 181 67
480개의 행이 선택되었다.
5. 산술 연산자와 합성 연산자
- 산술 연산자
산술연산자는 NUMBER와 DATE 자료형에 대해 적용되며 일반적으로 수학에서의 4칙 연산과 동일하다. 그리고 우선순위를 위한 괄호 적용이 가능하다.
일반적으로 산술 연산을 사용하거나 특정 함수를 적용하게 되면 칼럼의 LABEL이 길어지고, 기존의 칼럼에 대해 새로운 의미를 부여한 것이므로 적절한 별명을 새롭게 부여하는 것이 좋다.
그리고 산술 연산자는 수학에서와 같이 (), *, /, +, - 의 우선순위를 가진다.
예제)
SELECT PLAYER_NAME 이름, HEIGHT - WEIGHT "키-몸무게"
- 합성(CONCATENATION) 연산자
문자와 문자를 연결하는 합성 연산자를 사용하면 별도의 프로그램 도움 없이도 SQL 문장만으로도 유용한 결과를 출력할 수 있다.
- 문자와 문자를 연결하는 경우 2개의 수직 바 (| |)에 의해 이루어짐 (Oracle)
- 문자와 문자를 연결하는 경우 + 표시에 의해 이루어짐 (SQL Server)
- 두 벤더 모두 공통적으로 CONCAT (string1, string2) 함수를 사용할 수 있음
- 칼럼과 문자 또는 다른 칼럼과 연결시킴
- 문자 표현식의 결과에 의해 새로운 칼럼을 생성
'Computer Science > SQL-D' 카테고리의 다른 글
[SQLD] 2016년 SQLD 시험일정 및 시험내용 (0) | 2016.08.13 |
---|---|
[SQLD] 15. TCL(Transaction Control Language) (0) | 2016.08.12 |
[SQLD] 13. DDL(Data Definition Language) (0) | 2016.08.11 |
[SQLD] 12. 관계형 데이터베이스 개요 (0) | 2016.08.10 |
[SQLD] 11. 분산 데이터베이스와 성능 (0) | 2016.08.08 |