[SQLD] DML 정리 (INSERT, UPDATE, DELETE, SELECT 구문, 예제)

icebox127·2025년 9월 27일

SQLD

목록 보기
6/8

DML

데이터 조작어 data manipulation language

1. INSERT

테이블에 데이터를 입력하는 방법은 두 가지 유형이 있으며, 한 번에 한 건만 입력된다.

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

b. INSERT INTO 테이블명
		VALUES (전체 COLUMN에 넣을 VALUE_LIST);
  • 데이터 유형이 CHAR나 VARCHAR2 등 문자 유형일 경우 ‘(single quotation)로 입력할 값을 입력한다.
INSERT INTO STUDENT (STUDENT_ID, DEPT_ID, NAME, GRADE)
	VALUES ('20231111', 'MT2353', '김철수', 3);
  • a의 경우, 특정 칼럼만 값을 넣어 행을 삽입하는 방식으로, COLUMN_LIST의 순서에 맞춰 VALUE_LIST를 작성해야 한다.
  • 각 VALUE에 해당하는 칼럼의 이름을 명시하므로 COLUMN_LIST는 TABLE 내 칼럼 순서를 같지 않아도 된다.
  • 정의하지 않은 칼럼은 Default로 NULL값이 입력되며, PK나 Not NULL로 지정된 칼럼은 NULL이 허용되지 않는다. → 오류 발생
INSERT INTO STUDENT
	VALUES ('2023111', '김철수', 'MT2353', 3, '서울시 마포구', NULL); 
  • b의 경우, 전체 칼럼에 값을 다 넣는 방식으로, 처음 TABLE을 생성할 때 적은 칼럼 순서대로 빠짐없이 데이터가 입력되어야 한다.
  • 데이터를 입력하는 경우 정의되지 않은 미지의 값인 E_PLAYER_NAME은 두 개의 ‘를 붙여서 표현하거나, NULL이라고 명시적으로 표현할 수 있다.

2. UPDATE

UPDATE는 다음에 수정되어야 할 칼럼이 존재하는 테이블명을 입력하고, SET 다음에 수정되어야 할 칼럼명과 해당 칼럼 수정값으로 변경이 이루어진다.

  • 예) STUDENT 테이블의 성적을 일괄적으로 ‘미정’으로 수정한다.
UPDATE 테이블명
SET 수정되어야 할 칼럼명 = 수정되기를 원하는 새로운 값;)
UPDATE STUDENT
SET DEPT_ID = '미정';
  • 일반적으로는 WHERE절을 사용해서 UPDATE 대상 행을 선별한다.
UPDATE STUDENT
SET DEPT_ID = '미정' WHERE WHERE GRADE = 1;

3. DELETE

DELETE [FROM] 삭제를 원하는 정보가 들어있는 테이블명;
  • WHERE절을 사용하지 않을 시 테이블 전체 삭제됨

4. SELECT

SELECT [ALL/DISTINCT] 보고싶은 칼럼명, 보고싶은 칼럼명,...
FROM 해당 칼럼들이 있는 테이블명;)
SELECT STUDENT_ID, NAME
FROM STUDENT;
  • ALL: 중복된 데이터가 있어도 모두 출력한다. Default 옵션이므로 별도로 표시하지 않아도 된다. (생략 가능한 키워드)
    SELECT ALL GRADE
    FROM STUDENT; // NNN개의 행 선택됨
  • DEFAULT: 중복된 데이터가 있는 경우 1건으로 처리해서 출력한다.
    SELECT DISTINCT GRADE
    FROM STUDENT; // 5개의 행 선택됨 (1, 2, 3, 4, NULL)
  • 모든 칼럼 정보를 보고 싶을 경우 - *
    SELECT *
    FROM 테이블명;
  • ALIAS 조회 결과에 일종의 별명(ALIAS)을 부여해서 칼럼 레이블을 변경할 수 있다.
    SELECT STUDENT_ID AS 학번, NAME AS 이름, GRADE AS 학년
    FROM STUDENT;
    
    //AS 생략도 가능
    SELECT STUDENT_ID 학번, NAME 이름, GRADE 학년
    FROM STUDENT;
    
    //공백, 특수문자 포함 또는 대소문자 구분 필요 시 이중 인용부호("") 사용
    SELECT STUDENT_ID "학생 번호", NAME "학생 이름", GRADE "Grade"
    FROM STUDENT;
  • 산술 연산자 수학에서와 같이 (), *, /, +, -의 우선순위를 가진다.
    // 소수점 셋째 자리에서 반올림 (소수점 2자리)
    SELECT PLAYER 선수, ROUND(WEIGHT/((HEIGHT/100)*(HEIGHT/100)),2) "BMI 지수"
    FROM PLAYER;
  • 합성 연산자 문자와 문자를 연결하는 합성 연산자를 사용하면 별도의 프로그램 도움 없이도 SQL 문장만으로도 유용한 리포트를 출력할 수 있다.
    • Oracle: 2개의 수직 바(||)에 의해 이루어진다.
      SELECT PLAY_NAME ||'선수,' || HEIGHT || 'cm,' || WEIGHT || 'kg' 체격정보
      FROM PLAYER;
      
      출력 예)
      체격정보
      김철수 선수, 173cm, 65kg
      박철수 선수, 178cm, 75kg
      이철수 선수, 183cm, 79kg
    • SQL Server: +표시를 사용한다.
      SELECT PLAY_NAME +'선수,' + HEIGHT + 'cm,' + WEIGHT + 'kg' 체격정보
      FROM PLAYER;
      
      출력 예) 위와 같음
    • 공통: CONCAT(string1, string2) 함수 사용
  • DUAL 테이블

    Oracle에서 제공하는 가상 테이블

    임시로 간단한 연산이나 테스트를 실행할 때에도, Oracle은 문법 상 FROM을 사용하야만 함

    → 이를 DUAL 테이블로 대체

    SELECT 1 + 1 FROM dual;

    즉, 사용자 테이블이 필요 없는 SQL 문장의 경우에도 필수적으로 DUAL이라는 테이블을 FORM 절에 지정한다.

profile
감자의 공부기록🥔

0개의 댓글