과목 Ⅱ. 데이터모델링의 이해
1장 SQL 기본
4절 DML(Data Manipulation Language)
1. Insert문
먼저 DML문에서 M은 Manipulation으로, 조작을 의미한다.
우리가 할 수 있는 조작은 데이터 입력/수정/조회가 있다.
조회에 들어가서 조건문으로 상세한 설정을 이용한 조회가 가능한데 이는 나중에 알아보자.
Insert문은 데이터를 입력하는 DML문이다.
1-1) 기본 데이터 입력
Insert into 테이블(칼럼명1, ... , 칼럼명n) values (값1, ... , 값n);
※ 만일 값에 NULL값으로 입력한다면, 칼럼에 DEFAULT 설정이 돼있어도 NULL로 저장됨
# 데이터 입력
insert into emp values (100, '홍설이', 1000, '1000', current_timestamp());
insert into emp values (101, '고길동', 2000, '1001', current_timestamp());
1-2) select문을 사용해 조회한 데이터를 테이블에 삽입하기
insert into 다른테이블명
select * from 기존테이블명;
#select문을 사용해 데이터 입력
insert into dept_test
select * from dept; #dept테이블의 전체 데이터를 dept_test 테이블에 입력하라는 뜻
1-3) Nologging문 (Oracle만 가능)
로그파일 기록을 최소화해서 입력 성능 향상시키는 방법
(Nologging 옵션은 Buffer Cache라는 메모리 영역을 생략하고 기록함)
#nologging문을 통한 입력 성능 향상
alter table dept nologging;
2. Update문
입력된 데이터 값을 "수정"
※ 만약 조건문을 입력하지 않으면 전체 데이터가 수정됨
update 테이블
set 변경내용
조건;
#Update문
update emp
set ename = '유정' #변경내용
where empno = 101; #특정 조건에 해당하는 행만 위 변경내용으로 변경하라는 뜻
3. Delete문
원하는 조건을 검색해서 해당되는 행 삭제
※ 만약 조건문을 입력하지 않으면 전체 데이터가 삭제됨
delete from 테이블
조건;
#데이터 삭제
delete from emp
where ename = '홍길동';
- Delete문을 통해 데이터가 삭제되어도 테이블 용량이 초기화 되지는 않음
-> 테이블 용량까지 초기화 하고자 하면 Truncate문 사용!
Truncate table 테이블명;
#테이블 용량까지 삭제
Truncate table emp;
명령문 | 설명 |
DELETE문 | - 잘못 삭제한 것 복구도 가능 |
TRUNCATE문 | - 복구 불가 |
DROP문 | - 복구 불가 |
4. Select문
테이블에 입력된 데이터를 조회
여기서 특정 칼럼, 행만 조회하는 다양한 방법을 숙지해야만 한다.
4-1) select문 사용
#테이블의 전체 칼럼 조회
select * from emp;
#테이블에서 특정 칼럼만 조회
select empno, ename from emp;
#||를 활용해 모든 데이터에 문자 결합하기 (Oracle만 되는듯)
select ename||'님' from emp; #ename뒤에 '님'이라는 문자가 결합된 상태로 조회됨
4-2) Order by를 사용한 정렬
Select문과 함께 사용해서 오름차순(ASC) 혹은 내림차순(DESC)으로 출력 (default는 오름차순)
(단, 정렬 기능은 메모리를 많이 사용함)
※ 내림차순 정렬에서 NULL 값은 맨 아래에 위치, 오름차순에서는 NULL이 최상단에 위치
select * from 테이블
order by 칼럼 (asc) 혹은 desc;
#데이터 입력해주고
insert into emp values (1000, '홍설', 200);
insert into emp values (1001, '유정', 300);
insert into emp values (1002, '은택', 200);
#order by로 정렬하기
select * from emp
order by ename, sal desc; #ename은 default인 오름차순으로, sal은 내림차순으로 조회됨
order by문은 먼저 입력한 칼럼을 우선으로 출력하고 그 뒤 칼럼은 후순위로 고려해 정렬한다.
※ ORDER BY문을 사용할 때 칼럼의 자리수를 입력해서 조회가 가능한데, 단 이때는 SELECT 목록에 포함되는 칼럼의 자리수를 사용해야함.
#칼럼 자리수 사용하기
SELECT * FROM EMP ORDER BY 4;
만약 조회 칼럼을 두 개로 정해놓고 그 범위를 벗어나는 숫자를 지정한다면,
#칼럼 자리수 사용의 잘못된 예
SELECT EMPNO, ENAME FROM EMP ORDER BY 4;
4-3) Index를 사용한 정렬 회피 (Oracle만 가능)
기본키는 자동으로 오름차순 인덱스가 생성된다.
이때 내림차순으로 읽는 방법은
Select /*+INDEX_DESC(A) */를 사용하면 된다.
#인덱스를 이용한 자동정렬 회피
select /*+ INDEX_DESC(A) */ from emp A;
(근데 기출에서는 한번도 못봤다.)
4-4) Distinct문
- Distinct문
: 칼럼명 앞에 지정하여 중복 데이터를 한번만 조회하도록 함
select distinct 칼럼 from 테이블;
#일반적인 칼럼 조회
select deptno from emp
#Distinct문 사용
select distinct deptno from emp; #distinct로 deptno를 중복없이 출력하도록 함
※ DISTINCT COL1, COL2 : 이 경우 (COL1, COL2)로 묶어서 중복되지 않는 것을 반환
4-5) Alias(별칭)
Alias는 별칭으로 테이블명이나 칼럼명이 너무 길어 간략하게 할 때 사용
select ename as 이름 from 테이블 별칭;
#Alias(별칭) 사용
select ename as '이름' from emp a #ename별칭 = '이름', emp테이블별칭 = a 로 설정
where a.empno = '1000'; #emp테이블의 별칭인 a로 emp테이블을 대신 표현하고 뒤에.칼럼을 붙여 테이블의 특정 칼럼만 조회
별칭은 문제에 빈번히 활용되고, 간혹 문제로 나오기도 했다.
기본 중의 기본이라는 생각으로 숙지해두자.
※ 별칭을 소문자로 입력하면 소문자로 출력됨
※ 반면, 별칭을 사용하지 않으면 column header는 대문자로 출력됨
※ 별칭을 지정해주었을 경우 SELECT로 조회 시 반드시 별칭을 사용해야함
오늘은 DML문을 포괄적으로 알아보았다.
Insert문으로 데이터 입력하는 법, Update문으로 데이터 수정하기, Delete문과 Truncate문의 차이, Select문 기본과 Order by문을 활용한 정렬, Distinct문을 이용한 중복 제거한 상태로 조회, 마지막으로 Alias(별칭)까지 알아보았다.
하지만 아직 Select문에서 사용할 수 있는 기능이 너무나 많이 남아있어서 더 공부해야할 것이 많다.
Select문의 실행순서를 묻는 문제가 있는데
Select * from 테이블
where ~
group by ~
having
order by
이렇게 오늘 본 기본 order by문을 제외하고 where문, group by문, having문도 남아있다.
이에 더해 like, between, in 같은 연산자와 null관련 함수, 집계 함수, 내장함수, 숫자함수 그리고 decode랑 case문, rownum까지만 살펴보면 SQLD수준에서의 select문은 정복가능하다.
많아 보이지만 금방 숙지가 가능한 수준이다.
그리고 뒤에 남은 DCL, TCL문은 매우 간단한 편이다.
DCL, TCL문보다는 조인이랑 그 뒤의 요소들이 더 어려우므로.. 얼른 복습하자. 시험이 얼마 안 남았다.