[ SQLD : II. SQL 기본 및 활용] 1-3. DML(Data Manipulation Language)

문지은·2023년 6월 4일
0

SQLD

목록 보기
13/30
post-thumbnail

[SQLD 시험 대비] 2과목. SQL 기본 및 활용 : 1장. SQL 기본 - 3. DML(DATA MANIPULATION LANGUAGE)

DML(Data Manipulation Language)

  • 만들어진 테이블에 관리하기를 원하는 자료들을 입력, 수정, 삭제, 조회

INSERT

  • 테이블에 데이터를 입력
  • 해당 칼럼명과 입력되어야 하는 값을 서로 1:1로 매핑해서 입력하면 된다.
    • 해당 칼럼의 데이터 유형이 CHAR나 VARCHAR2 등 문자 유형일 경우 ' (SINGLE QUOTATION)로 입력할 값을 입력한다.
    • 숫자일 경우 '(SINGLE QUOTATION)을 붙이지 않는다.
  • 첫 번째 방법
    • 테이블의 칼럼을 정의할 수 있는데, 이때 칼럼의 순서는 테이블의 칼럼 순서와 매치할 필요는 없다.
    • 정의하지 않은 칼럼은 Default로 NULL 값이 입력된다.
    • 단, Primary Key나 Not NULL 로 지정된 칼럼은 NULL이 허용되지 않는다.
INSERT INTO 테이블명 (COLUMN_LIST) 
VALUES (COLUMN_LIST에 넣을 VALUE_LIST);
  • 두 번째 방법
    • 모든 칼럼에 데이터를 입력하는 경우로 굳이 COLUMN_LIST를 언급하지 않아도 되지만, 칼럼의 순서대로 빠짐없이 데이터가 입력되어야 한다.
INSERT INTO 테이블명
VALUES (전체 COLUMN에 넣을 VALUE_LIST);

예제

  • 선수 테이블에 박지성 선수의 데이터를 일부 칼럼만 입력해보자.
    • INSERT 문장에서 BACK_NO가 마지막에 정의가 되었더라도 테 이블에는 칼럼 순서대로 데이터가 입력된다.
    • 칼럼명이 정의되지 않은 경우 NULL 값이 입력된다.
INSERT INTO PLAYER
              (PLAYER_ID, PLAYER_NAME, TEAM_ID, POSITION, HEIGHT, WEIGHT, BACK_NO)
              VALUES ('2002007', '박지성', 'K07', 'MF', 178, 73, 7);

  • 이번에는 해당 테이블에 이청용 선수의 데이터를 입력해보자.
    • 데이터를 입력하는 경우 정의되지 않은 미지의 값인 E_PLAYER_NAME은 두 개의 『 '' 』SINGLE QUOTATION을 붙여서 표현하거나, NATION이나 BIRTH_DATE의 경우처럼 NULL이라고 명시적으로 표현할 수 있다.
INSERT INTO PLAYER
VALUES ('2002010','이청용','K07','','BlueDragon','2002','MF','17',NULL,NULL,'1',180,69);

UPDATE

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

예제

  • 선수 테이블의 백넘버를 일괄적으로 99로 수정해보자.
UPDATE PLAYER
SET BACK_NO = 99;
  • 선수 테이블의 포지션을 일괄적으로 ‘MF’로 수정해보자.
UPDATE PLAYER
SET POSITION = 'MF';

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 TABLE 보다는 시스템 부하가 적은 TRUNCATE TABLE을 권고
    • 단, TRUNCATE TABLE의 경우 삭제된 데이터의 로그가 없으므로 ROLLBACK이 불가능하므로 주의해야 함.
    • SQL Server의 경우 사용자가 임의적으로 트랜잭션을 시 작한 후 TRUNCATE TABLE을 이용하여 데이터를 삭제한 이후 오류가 발견되어, 다시 복구를 원할 경우 ROLLBACK 문을 이용하여 테이블 데이터를 원 상태로 되돌릴 수 있음.
    • 트랜잭션과 COMMIT, ROLLBACK에 대해서는 다음 절에서 알아보겠다.

SELECT

  • 데이터 조회
SELECT [ALL/DISTINCT] 보고 싶은 칼럼명, 보고 싶은 칼럼명, ... 
FROM 해당 칼럼들이 있는 테이블명;

DISTINCT 옵션

  • 중복된 데이터가 있는 경우 1건으로 처리해서 출력한다.
  • 지정하지 않을 경우 ALL이 Default 옵션
    • 중복된 데이터가 있어도 모두 출력한다.

WILDCARD 사용하기

  • 해당 테이블의 모든 칼럼 정보를 보고 싶을 경우에는 와일드카드로 애스터리스크(*)를 사용하여 조회할 수 있다.
SELECT * 
FROM 테이블명;

ALIAS 부여하기

  • 조회된 결과에 일종의 별명(ALIAS, ALIASES)을 부여해서 칼럼 레이블을 변경할 수 있다.
  • 칼럼 별명(ALIAS)에 대한 사항을 정리하면 다음과 같다.
    • 칼럼명 바로 뒤에 온다.
    • 칼럼명과 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;

산술 연산자와 합성 연산자

산술 연산자

  • 산술 연산자는 NUMBER와 DATE 자료형에 대해 적용되며 일반적으로 수학에서의 사칙연산과 동일하며 우선순위를 위한 괄호 적용이 가능하다.
  • 일반적으로 산술 연산을 사용하거나 특정 함수를 적용하게 되면 칼럼의 LABEL이 길어지게 되고, 기존의 칼럼에 대해 새로운 의미를 부여한 것이므로 적절한 ALIAS를 새롭게 부여하는 것이 좋다.
  • 산술연산자 종류
    • (), *, /, +, -

예제

  • 선수들의 키에서 몸무게를 뺀 값을 알아보자.
SELECT PLAYER_NAME 이름, HEIGHT - WEIGHT "키-몸무게" 
FROM PLAYER;
  • 선수들의 키와 몸무게를 이용해서 BMI(Body Mass Index) 비만지수를 측정해보자.
SELECT PLAYER_NAME 이름, ROUND(WEIGHT/((HEIGHT/100)*(HEIGHT/100)),2) "BMI 비만지수"
FROM PLAYER;

합성(CONCATENATION) 연산자

  • 문자와 문자를 연결하는 합성(CONCATENATION) 연산자를 사용하면 별도의 프로그램 도움 없이도 SQL 문장만으로도 유용한 리포트를 출력할 수 있다.
  • 합성(CONCATENATION) 연산자의 특징은 다음과 같다.
    • 문자와 문자를 연결하는 경우 2개의 수직 바(||)에 의해 이루어진다. (Oracle)
    • 문자와 문자를 연결하는 경우 + 표시에 의해 이루어진다. (SQL Server)
    • 두 벤더 모두 공통적으로 CONCAT (string1, string2) 함수를 사용할 수 있다.
    • 칼럼과 문자 또는 다른 칼럼과 연결시킨다.
    • 문자 표현식의 결과에 의해 새로운 칼럼을 생성한다.

예제

  • 다음과 같은 선수들의 출력 형태를 만들어 보자.
출력 형태) 선수명 선수, 키 cm, 몸무게 kg 
예) 박지성 선수, 176 cm, 70 kg
  • Oracle
SELECT PLAYER_NAME || '선수,' || HEIGHT || 'cm,' || WEIGHT || 'kg' 체격정보 
FROM PLAYER;
  • SQL Server
SELECT PLAYER_NAME +'선수, '+ HEIGHT +'cm, '+ WEIGHT +'kg'체격정보 
FROM PLAYER;
profile
코드로 꿈을 펼치는 개발자의 이야기, 노력과 열정이 가득한 곳 🌈

0개의 댓글