본문 바로가기
Progamming/BoostCourse

DML(select, insert, update, delete)

by 동그란 혜주 2019. 1. 22.
  • 들어가기 전에

이번 시간에는 DBMS에 값을 저장, 수정, 삭제, 조회하는 방법에 대해 배워보도록 하자.




  • 학습 목표

1. insert문을 수행할 수 있다.

2. update문을 수행할 수 있다.

3. delete문을 수행할 수 있다.

4. select문을 수행할 수 있다.




  • 핵심 개념

- select

- insert

- update

- delete




  • 데이터 조작어(Data Manipulation Language, DML)

- 데이터 조작어는 모두 동사로 시작한다

· SELECT : 검색

· INSERT : 등록

· UPDATE : 수정

· DELETE : 삭제




  • SELECT 구문의 기본문형

* 괄호 : 생략가능




  • SELECT 구문 예제(전체 데이터 검색)

- 전체 데이터 검색

- SELECT 뒤에 * 를 기술함으로써 나타낼 수 있다.

· ex) departments 테이블의 모든 데이터를 출력하시오. 

 : SELECT * FROM department;




  • SELECT 구문 예제(특정 컬럼 검색)

- SELECT 뒤에 컬럼을 콤마(,)로 구별해서 나열

· ex) employee 테이블에서 지원의 사번(empno), 이름(name), 직업(job)을 출력하시오. 어떤 칼럼이 있는지는 desc 명령으로 확인

 : SELECT empno, name, job FROM employee;




  • SELECT 구문 예제(컬럼에 Alias 부여하기)

- 컬럼에 대한 ALIAS(별칭)을 부여해서 나타내는 컬럼의 HEADING을 변경할 수 있다.

· ex) employee 테이블에서 직원의 사번(empno), 이름(name), 직업(job)을 출력하시오.

 : SELECT empno (as) 사번, name (as) 이름, job (as) 직업 FROM employee;




  • SELECT 구문 예제(컬럼의 합성(Concatenation))

- 문자열 결합함수 concat 사용

· ex) employee 테이블에서 사번과 부서번호를 하나의 칼럼으로 출력하시오.

 : SELECT concat( empno, '-', deptno) AS '사번-부서번호' FROM employee;




  • SELECT 구문 예제(중복행의 제거)

- 중복되는 행이 출력될 경우, DISTINCT 키워드로 중복행을 제거

· ex) employee 테이블의 모든 부서번호를 출력하시오.(사원 수 만큼 출력된다.)

 : SELECT deptno FROM employee;

· ex) employee 테이블의 모든 부서번호를 중복되지 않게 출력하시오.

 : SELECT DISTINCT deptno FROM employee;




  • ORDER BY 절





  • SELECT 구문 예제(정렬하기)

· ex) employee 테이블에서 empno, name, job을 이름을 기준으로 오름차순으로 정렬하시오. (default)

 : SELECT empno, name, job FROM employee ORDER BY name ;

· ex) employee 테이블에서 empno, name, job을 이름을 기준으로 내림차순으로 정렬하시오.

 : SELECT empno, name, job FROM employee ORDER BY name DESC;




  • SELECT 구문 예제(특정 행 검색 - where절)

- 산술비교 연산자

· ex) employee 테이블에서 hiredate가 1981년 이전인 name과 hiredate를 출력하시오.

 : SELECT name, hiredate FROM employee WHERE hiredate < '1981-01-01';

- 논리 연산자

· ex) employee 테이블에서 deptno가 30인 name과 deptno를 출력하시오.

 : SELECT name, deptno FROM employee WHERE deptno = 30;

- IN 키워드

· ex) employee 테이블에서 deptno가 10 또는 30인 name과  deptno를 출력하시오.

 : SELECT name, deptno FROM employee WHERE deptno IN (10, 30);

- LIKE 키워드

· 와일드 카드를 사용하여 특정 문자를 포함한 값에 대한 조건을 처리

· % 는 0에서부터 여러 개의 문자열을 나타냄

· _ 는 단 하나의 문자를 나타내는 와일드 카드

· ex) employee 테이블에서 name에 'A'가 포함된 name과 job을 출력하시오

 : SELECT name, job FROM employee WHERE name LIKE '%A%';




  • SELECT 구문 예제(함수의 사용)

- UCASE, UPPER : 대문자로 변환한다.

- LCASE, LOWER : 소문자로 변환한다.

- SUBSTRING('문자열', start, end) : 문자열을 start 인덱스에서 end 인덱스까지 반환한다.

- LPAD, RPAD : 왼쪽/오른쪽 정렬

- TRIM, LTRIM, RTRIM

- ABS(x) : x의 절대값을 구한다.

- MOD(n, m) % : n을 m으로 나눈 나머지 값을 출력한다.

- FLOOR(x) : x보다 크지 않은 가장 큰 정수를 반환한다. BIGINT로 자동 변환한다.

- CEILING(x) : x보다 작지 않은 가장 큰 정수를 반환한다.

- ROUND(x) : x에 가장 근접한 정수를 반환한다.

- POW(x,y) POWER(x,y) : x의 y 제곱 승을 반환한다.

- GREATEST(x,y,...) : 가장 큰 값을 반환한다.

- LEAST(x,y,...) : 가장 작은 값을 반환한.

- CURDATE(),CURRENT_DATE : 오늘 날짜를 YYYY-MM-DD나 YYYYMMDD 형식으로 반환한.

- CURTIME(), CURRENT_TIME : 현재 시각을 HH:MM:SS나 HHMMSS 형식으로 반환한.

- NOW(), SYSDATE() , CURRENT_TIMESTAMP : 오늘 현시각을 YYYY-MM-DD HH:MM:SS나 YYYYMMDDHHMMSS 형식으로 반환한

- DATE_FORMAT(date,format) : 입력된 date를 format 형식으로 반환한.

- PERIOD_DIFF(p1,p2) : YYMM이나 YYYYMM으로 표기되는 p1과 p2의 차이 개월을 반환한.




  • SELECT 구문(CAST 형변환)




  • SELECT 구문(그룹 함수)


· ex) employee 테이블에서 deptno가 30인 직원의 salary의 평균과 총합을 출력하시오.

 : SELECT ANG(salary), SUM(salary) FROM employee WHERE deptno = 30;

· ex) employee 테이블에서 deptno 별 직원의 deptno, salary의 평균과 총합계를 출력하시오.

 : SELECT deptno, AVG(salary), SUM(salary) FROM employee GROUP BY deptno;




  • 데이터 입력(INSERT문)

- 필드명을 지정해주는 방식은 디폴트 값이 세팅되는 필드는 생략할 수 있다.

- 필드명을 지정해주는 방식은 추후, 필드가 추가/변경/수정 되는 변경에 유연하게 대처가 가능하다.

- 필드명을 생략했을 경우에는 모든 필드 값을 반드시 입력해야 한다.

· ex) ROLE 테이블에 있는 role_id는 200, description에는 'CEO'로 한건의 데이터를 저장하시오.

 : INSERT INTO ROLE (role_id, description) VALUES (200, 'CEO');



  • 데이터 수정(UPDATE문)

- 조건식을 통해 특정 row만 변경할 수 있다.

- 조건식을 주지 않으면 전체 로우가 영향을 미치니 조심해서 사용하도록 한다.

· ex) ROLE 테이블에 role_id가 200인 경우 description을 'CTO'로 수정하시오.

 : UPDATE ROLE SET description = 'CTO' WHERE role_id = 200;



  • 데이터 삭제(DELETE문)

- 조건식을 통해 특정 row만 삭제할 수 있다.

- 조건식을 주지 않으면 전체 로우가 영향을 미치니 조심해서 사용하도록 한다.

· ex) ROLE 테이블에서 role_id는 200인 정보를 삭제하시오.

 : DELETE FROM ROLE WHERE role_id = 200;


'Progamming > BoostCourse' 카테고리의 다른 글

Maven이란?  (0) 2019.01.22
DDL(create, alter, drop)  (0) 2019.01.22
SQL이란?  (0) 2019.01.22
DB와 DBMS  (0) 2019.01.22
JSTL(JSP Standard Tag Library)  (0) 2019.01.21

댓글