제3절_DML(DATA_MANIPULATION_LANGUAGE)
2012.03.09 14:38
1. INSERT
테이블에 데이터를 입력하는 방법은 두 가지 유형이 있으며 한 번에 한 건만 입력된다.
[예제] 선수 테이블에 박지성 선수의 데이터를 일부 칼럼만 입력한다.
[예제] 이청용 선수의 데이터를 입력해본다.
INSERT INTO PLAYER
VALUES ('2002010','이청용','K07','','BlueDragon','2002','MF','17',NULL, NULL,'1',180,69); 1개의 행이 만들어졌다.
2. UPDATE
[예제] 선수 테이블의 백넘버를 일괄적으로 99로 수정한다.
UPDATE PLAYER SET BACK_NO = 99;
480개의 행이 수정되었다.
[예제] 선수 테이블의 포지션을 일괄적으로 ‘MF’로 수정한다.
UPDATE PLAYER SET POSITION = 'MF';
480개의 행이 수정되었다.
3. DELETE
[예제] 선수 테이블의 데이터를 전부 삭제한다.
DELETE FROM PLAYER;
480개의 행이 삭제되었다.
참고로 데이터베이스는 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 TABLE 보다는
시스템 부하가 적은 TRUNCATE TABLE을 권고한다.
단, TRUNCATE TABLE의 경우 삭제된 데이터의 로그가 없으므로 ROLLBACK이 불가능하므로 주의해야 한다.
그러나 SQL Server의 경우 사용자가 임의적으로 트랜잭션을 시작한 후 TRUNCATE TABLE을 이용하여 데이터를 삭제한 이후 오류가 발견되어,
다시 복구를 원할 경우 ROLLBACK 문을 이용하여 테이블 데이터를 원 상태로 되돌릴 수 있다.
트랜잭션과 COMMIT, ROLLBACK에 대해서는 다음 절에서 설명한다.
4. SELECT
[예제] SELECT PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, HEIGHT, WEIGHT, BACK_NO
* DISTINCT 옵션
[예제 및 실행 결과]
SELECT ALL POSITION FROM PLAYER;
SELECT DISTINCT POSITION FROM PLAYER;
SELECT * FROM 테이블명;
- 조회된 결과에 일종의 별명(ALIAS, ALIASES)을 부여해서 칼럼 레이블을 변경할 수 있다.
- 칼럼명과 ALIAS 사이에 AS, as 키워드를 사용할 수도 있다. (option)
- 이중 인용부호(Double quotation)는 ALIAS가 공백, 특수문자를 포함할 경우와 대소문자 구분이 필요할 경우 사용된다.
[예제] SELECT PLAYER_NAME AS 선수명, POSITION AS 위치, HEIGHT AS 키, WEIGHT AS 몸무게
FROM PLAYER;
칼럼 별명에서 AS를 꼭 사용하지 않아도 되므로, 아래 SQL은 위 SQL과 같은 결과를 출력한다.
SELECT PLAYER_NAME 선수명, POSITION 위치, HEIGHT 키, WEIGHT 몸무게
FROM PLAYER;
[예제] 칼럼 별명을 적용할 때 별명 중간에 공백이 들어가는 경우 『" " 』를 사용해야 한다. SQL Server의 경우『" "』, 『' 』', 『[ ]』와 같이 3가지의 방식으로 별명을 부여할 수 있다.
[예제] SELECT PLAYER_NAME "선수 이름", POSITION "그라운드 포지션", HEIGHT "키", WEIGHT "몸무게"
FROM PLAYER;
5. 산술 연산자와 합성 연산자
* 산술 연산자
[예제] 선수들의 키에서 몸무게를 뺀 값을 알아본다.
SELECT PLAYER_NAME 이름, HEIGHT - WEIGHT "키-몸무게"
FROM PLAYER;
[예제] 선수들의 키와 몸무게를 이용해서 BMI(Body Mass Index) 비만지수를 측정한다. ※ 예제에서 사용된 ROUND( ) 함수는 반올림을 위한 내장 함수로써 6절에서 학습한다
SELECT PLAYER_NAME 이름, ROUND(WEIGHT/((HEIGHT/100)*(HEIGHT/100)),2) "BMI 비만지수"
FROM PLAYER;
- 문자와 문자를 연결하는 경우 2개의 수직 바(||)에 의해 이루어진다. (Oracle)
- 문자와 문자를 연결하는 경우 + 표시에 의해 이루어진다. (SQL Server)
- 두 벤더 모두 공통적으로 CONCAT (string1, string2) 함수를 사용할 수 있다.
- 칼럼과 문자 또는 다른 칼럼과 연결시킨다.
- 문자 표현식의 결과에 의해 새로운 칼럼을 생성한다.
[예제] 다음과 같은 선수들의 출력 형태를 만들어 본다.
출력 형태) 선수명 선수, 키 cm, 몸무게 kg 예) 박지성 선수, 176 cm, 70 kg
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
18 |
제5절_WHERE_절
![]() | 보라빛고양이 | 2012.03.10 | 15070 |
17 | 제4절_TCL(TRANSACTION_CONTROL_LANGUAGE) | 보라빛고양이 | 2012.03.10 | 8338 |
» | 제3절_DML(DATA_MANIPULATION_LANGUAGE) | balto | 2012.03.09 | 7037 |
15 |
제2절_DDL(DATA_DEFINITION_LANGUAGE)
[1] ![]() | balto | 2012.03.09 | 11935 |
14 | 제1절_관계형_데이터베이스_개요 | balto | 2012.03.09 | 10647 |
13 | 제5절_데이터베이스_구조와_성능 | 오예스 | 2012.03.07 | 6268 |
12 | 제4절_대량_데이터에_따른_성능 | 오예스 | 2012.03.07 | 7252 |
11 |
제3절_반정규화와_성능
![]() | ljw | 2012.03.04 | 15483 |
10 |
제2절_정규화와_성능
![]() | ljw | 2012.03.04 | 10576 |
9 |
제1절_성능_데이터_모델링의_개요
![]() | ljw | 2012.03.04 | 44725 |
8 | 제4절_관계(Relationship) [1] | 실천하자 | 2012.03.04 | 13216 |
7 | 제3절_속성(Attribute) | 실천하자 | 2012.03.04 | 7434 |
6 | 제2절_엔터티(Entity) | 실천하자 | 2012.03.04 | 9875 |
5 | 제1절_데이터_모델의_이해 | 실천하자 | 2012.03.03 | 22777 |
4 |
제5절_식별자
![]() | ljw | 2012.03.03 | 19131 |
3 |
Front Page
![]() | 운영자 | 2012.02.20 | 186898 |
2 | 제3절_조인_수행_원리 | 실천하자 | 2012.04.11 | 7163 |
1 | 제3절_조인_기본_원리 | 보라빛고양이 | 2012.05.30 | 4108 |