최보름달

[SQL] DML(Date Manipulation Language) : INSERT, UPDATE, DELTE, SELECT 본문

문송한 회사생활/SQL 공부

[SQL] DML(Date Manipulation Language) : INSERT, UPDATE, DELTE, SELECT

PieMoon 2020. 8. 1. 21:24

DML(Date Manipulation Language) 

테이블에 자료를 입력, 수정, 삭제, 조회하는 명령어들

 

INSERT

데이터를 입력하는 명령어

한 번에 한 건만 입력된다. 

-- 자료를 입력하는 두 가지 방법

-- 컬럼을 정의한느 방법. 컬럼의 순서는 테이블 컬럼 순서와 매치할 필요가 없다. 
-- 정의되지 않은 컬럼은 디폴트로 NULL이 입력된다. 
-- 단, PK나 Not NULL로 지정된 컬럼은 NULL이 허용되지 않는다. 

INSERT INTO   테이블명(COLUMN_LIST)
VALUES        (COLUMN_LIST에 넣을 VALUE_LIST) ;


-- 모든 컬럼에 데이터를 입력하는 방법.
-- 컬럼 순서대로 빠짐없이 데이터가 입력되어야 한다. 

INSERT INTO   테이블명
VALUES        (전체 COLUMN에 넣을 VALUE_LIST) ;

 

해당 컬럼명과 입력되어야 하는 값을 1:1로 매핑해서 입력하면 된다. 

컬럼의 데이터 유형이 CHAR나 VARCHAR2 등의 문자 유형일 경우 '

숫자일 경우 ' 를 불이지 않는다. 

 

-- 예시

INSERT INTO PLAYER
VALUES ('2002010', '이청용', 'K07','', 'BlueDragon', '2002', 'MF', '17', NULL, NULL, '1', 180, 69) ;

single quotation 두 개 ('') 를 이용해서 정의되지 않은 미지의 값을 표현하거나, 

NULL이라고 명시적으로 표현할 수도 있다. 

 

 

UPDATE

데이터를 수정하는 명령어

UPDATE  테이블명
SET     수정되어야 할 컬럼명 = 수정되기를 원하는 새로운 값 ;

-- 예시
-- 선수 테이블의 백넘버를 일괄적으로 99로 수정한다. 
UPDATE  PLAYER
SET     BACK_NO = 99

 

DELETE

데이터를 삭제하는 명령어

DELETE [FROM] 삭제를 원하는 정보가 들어있는 테이블 명

-- 예시
-- 선수 테이블 데이터를 전체 삭제한다. 
DELETE FROM PLAYER ; 

 

참고로 DDL 명령어와 DML명령어를 처리는 방식의 차이가 있다. 

DDL(CREATE, ALTER, RENAME, DROP)는 직접 데이터베이스의 테이블에 영향을 미치기 때문에 명령어를 입력하면 즉시 완료된다. (Auto Commit)

DML(INSERT, UPDATE, DELTE, SELECT)은 조작하려는 테이블을 메모리 버퍼에 올려놓고 작업을 하기 때문에 COMMIT 명령어를 입력해서 트랜잭션을 종료해줘야 한다. 단, SQL Server는 DML도 Auto Commit처리된다. 

 

테이블 전체 데이터를 삭제할 때, 시스템 활용 측면에서는 삭제된 테이터 로그로 저장하는 DELETE TABLE 보다는 TRUNCATE TABLE 을 권고한다. 단, TRUNCATE TABLE 은 ROLLBACK이 불가능하므로 주의해야 한다.  SQL Server는 ROLLBACK 이 가능하다. 

(COMMIT, ROLLBACK은 추후 다시 설명한다)

 

 

SELECT 

데이터를 조회하는 명령어

SELECT [ALL/ DISTINCT] 보고싶은 컬럼명, 보고싶은 컬럼명, ....
FROM   해당 컬럼들이 있는 테이블명

-- ALL : 디폴트라서 별도 표시하지 않아도 된다. 중복된 데이터가 있어도 모두 출력한다. 
-- DISTINCT: 중복된 데이터가 있는 경우 1건으로 처리해서 출력한다. 
-- 와일드카드(*) : 모든 컬럼 정보를 보고 싶을 경우 애스터리스크(*)를 이용하여 조회할 수 있다. 


-- 예시 
SELECT ALL POSITION
FROM   PLAYER ; 

SELECT DISTINCT POSITION
FROM   PLAYER ; 

SELECT *
FROM   PLAYER ; 

 

실행 결과 화면을 보면 컬럼 테이블(레이블)이 맨 위에 있고, 실질적 자료는 다음 줄부터 시작된다. 

레이블은 기본적으로 대문자로 보인다. 

레이블 정렬은 다음과 같다. 

- 좌측 정렬: 문자 및 날짜

- 우측 정렬: 숫자 

 

SELECT 레이블에 ALIAS 부여하기 

조회된 결과에 일종의 별명을 부여할 수 있는 명령

 

- 컬럼명 바로 뒤에 온다. 

- 컬럼명과 ALIAS 사이에 AS, as 키워드를 사용할 수 있다. (안해도 된다)

- 이중 부호("") 는 ALIAS가 공백, 특수문자를 포함할 경우와 대소문자 구분이 필요할 경우 사용된다. 

SELECT PLAYER_NAME AS 선수명, POSITION AS 위치 
FROM   PLAYER ;

-- AS는 입력하지 않아도 되므로 아래와 같이 입력해도 결과는 동일하다. 
SELECT PLAYER_NAME 선수명, POSITION 위치 
FROM   PLAYER ;

-- 중간에 공백이 있다면 ""를 사용해야 한다. 
SELECT PLAYER_NAME "선수 이름", POSITION "그라운드 포지션"
FROM   PLAYER ;

 

산술 연산자와 합성 연산자

산술 연산자 

수학의 4칙 연산과 동일하다. 

() 괄호. 괄호 안의 연산이 우선된다.

* 곱하기

/ 나누기

+ 더하기

- 빼기

-- 이런식으로 키에서 몸무게를 뺀 값을 구할 수도 있다. 
SELECT PLAYER_NAME 이름, HEIGHT - WEIGHT "키-몸무게" 
FROM   PLAYER ;

합성 연산자

- 문자와 문자를 연결하는 경우 (오라클) 2개의 수직 자 || , (sql server) + 를 이용할 수 있다. 

- 두 벤더 모두 공통적으로 CONCAT 함수를 사용할 수 있다. 

- 컬럼과 문자 또는 다른 컬럼과 연결시킨다. 

- 문자 표현식의 결과에 의해 새로운 컬럼을 생성한다. 

 

 

 

 

 

 

 

* kdata 한국데이터진흥원에서 출간한 SQL 전문가 가이드 2013 Edition을 요약했습니다. 

'문송한 회사생활 > SQL 공부' 카테고리의 다른 글

[SQL] WHERE 절, 연산자 종류, 우선순위  (0) 2020.08.08
[SQL] TCL (COMMIT, ROLLBACK, SAVEPOINT)  (0) 2020.08.08
[SQL] TRUNCATE TABLE  (0) 2020.07.29
[SQL] DROP TABLE  (0) 2020.07.29
[SQL] RENAME TABLE  (0) 2020.07.29