본문 바로가기
전공/Database

[이론] SQL 조작어(DML)

by 으녜 2022. 3. 15.
728x90
※ SQL 조작어 (DML)?

: 데이터베이스 내의 자료를 실제 사용자가 이용하기 위한 언어이며, 데이터의 검색, 삽입, 수정, 삭제를 위해 사용된다.

 

 

1. SELECT(검색문)

: 테이블에서 원하는 자료를 검색하고자 하는 경우에 사용되는 명령문이며, 산술식에 의해 계산도 수행한다.

SELECT [DISTINCT] 속성_이름
FROM 테이블_이름
[WHERE 조건]
[GROUP BY 속성_이름 [HAVING 그룹조건]]
[ORDER BY 속성_이름 [ASC | DESC ]];

 

SELECT 절 - 검색하고자 하는 속성 이름이나 계산식 기술
- DISTINCT : 검색 결과에 중복되는 값이 있는 경우 한 번만 표현하도록 하는 옵션
FROM 절  검색하고자 하는 속성이 있는 테이블 이름을 기술
WHERE 절 - 검색에 필요한 조건
- 관계 연산자(=,<>,<,>,<=,>=)와 논리 연산자(NOT, AND, OR) 등의 다양한 연산자를 이용할 수 있음
GROUP BY 절 - 작업의 효율을 위해 한 속성 값을 그룹으로 분류하고자 할 때 사용
- HAVING : GROUP BY에 의해 그룹으로 분류한 후 조건을 제시할 때 사용
ORDER BY 절 - 검색하고자 하는 속성 값을 정렬하여 검색하고자 하는 경우
- ASC : 오름차순으로 정렬
- DESC : 내림차순으로 정렬
- 생략시 오름차순으로 정렬되며, 정렬 기준은 2가지 이상 주어질 수 있음

 

1 ) 단순 질의문

예1 ) [학생] 테이블에서 모든 학생의 성명을 검색하시오.

SELECT 성명 FROM 학생;

예2 ) [학생] 테이블에서 데이터베이스를 수강하는 학생의 학번과 성명을 검색하시오.

SELECT 학번, 성명 FROM 학생 WHERE 수강과목='데이터베이스';

예3 ) [학생] 테이블에서 학년이 '3학년'이고, 수강과목이 '산업공학'인 학생의 성명과 연락처를 검색하시오.

SELECT 성명, 연락처 FROM 학생 WHERE 학년=3 AND 수강과목='산업공학';

예4 ) [학생] 테이블에서 학생의 점수가 85점 이상 90점 이하인 학생의 연락처를 검색하시오.

SELECT 연락처 FROM 학생 WHERE 점수 >= 85 AND 점수 <=90;

*BETWEEN A AND B

: WHERE 절의 조건을 작성할 때 조건의 내용이 연속적인 값을 나타내면 'BETWEEN' 연산자를 이용할 수 있다. 방금 살펴본 예 4와 같이 조건에 포함되는 점수가 85, 86, 87, 88, 89, 90과 같이 연속적인 경우 WHERE 점수 BETWEEN 85 AND 90; 으로 나타낼 수 있다.

 

 

 

2 ) DISTINCT 옵션을 이용하여 중복된 값을 제거한 검색

예 1) [학생] 테이블에서 2학년 이상인 학생의 수강과목을 검색하되, 같은 수강과목 값은 한 번만 검색되도록 하시오.

SELECT DISTINCT 수강과목 FROM 학생 WHERE 학년>=2;

 

 

3 ) 집계 함수를 이용한 검색

함수 종류 의미
SUM(속성_이름) 지정된 속성의 합계
AVG(속성_이름) 지정된 속성의 평균
MAX(속성_이름) 지정된 속성의 값 중 최댓값
MIN(속성_이름) 지정된 속성의 값 중 최솟값
COUNT(속성_이름) 지정된 속성의 튜플 수

예1 ) [학생] 테이블에서 1학년 학생의 점수 합계를 구하시오.

SELECT SUM(점수) FROM 학생 WHERE 학년=1;

 

*AS

: SELECT 명령문에서 검색된 결과나 계산된 결과를 원하는 속성 이름으로 생성해서 결과를 표현할 수 있으며, 이때 'AS'를 이용한다. 위 예1에서는 결과가 속성 이름은 없이 값만 얻어지는데 '1학년합계'라는 속성 이름을 가지도록 할 경우 다음과 같이 작성한다.

SELECT SUM(점수) AS 1학년합계 FROM 학생 WHERE 학년=1;

 

 

4) 원소 함수 IN를 이용한 검색

: 논리 연산자 OR와 동일한 의미 연산 결과를 나타낸다.

예 1) [학생] 테이블에서 3학년과 4학년 학생의 학번과 성명을 검색하시오.

SELECT 학번, 성명 FROM 학생 WHERE 학년 IN(3,4);

SELECT 학번, 성명 FROM 학생 WHERE 학년=3 OR 학년=4;

 

5 ) 검색된 결과를 정렬해서 표현 (ORDER BY절 이용)

예1 ) [학생] 테이블에서 점수가 85점 이상인 학생을 학번의 오름차순으로 성명을 검색하시오.

SELECT 성명 FROM 학생 WHERE 점수 >=85 ORDER BY 학번 ASC;

 

6 ) 그룹 분류 질의

- 그룹으로 분류하고자 할 때, 'GROUP BY' 절을 , 그룹 분류 후 조건은 'HAVING' 절을 이용한다.

예1 ) [학생] 테이블에서 2명 이상인 학년을 검색하시오.

SELECT 학년 FROM 학생 GROUP BY 학년 HAVING COUNT(*)>=2;

예2 ) [학생] 테이블에서 점수가 85점 이상이고, 학생이 2명 이상인 학년을 검색하시오.

SELECT 학년 FROM 학생 WHERE 점수>=85 GROUP BY 학년 HAVING COUNT(*)>=2;

 

7) 부속(하위) 질의

  • 질의문 안에 또 하나의 질의문을 가지고 있는 형태로, 일반적으로 두 개 이상 여러 테이블을 이용해야 하는 경우 사용된다.
  • 처음 나오는 질의문을 메인 질의문이라고 하고, 두 번째 나오는 질의문을 부속(하위) 질의문이라고 한다.
  • 메인 질의문과 부속 질의문의 연결은=,IN, EXISTS 등으로 연결된다.

예1 ) [학생정보] 테이블과 [학과인원] 테이블을 이용하여 '이영진' 학생이 속한 학과의 학생수를 검색하시오.

SELECT 학생수 FROM 학과인원 WHERE 학과 = (SELECT 학과 FROM 학생정보 WHERE 성명='이영진');

예 2) [학생정보] 테이블과 [학과인원] 테이블을 이용하여 학과 학생수가 30명 이하인 학과 학생의 이름을 검색하시오.

SELECT 이름 FROM 학생정보 WHERE 학과 IN (SELECT 학과 FROM 학과인원 WHERE 학생수<=30);

* EXISTS

: 'EXISTS'는 부속 질의문의 검색 결과가 존재하는지 여부를 확인해서 존재하는 경우는 수행을 하고, 존재하지 않는 경우 수행을 하지 않는다. 위 예2를 EXISTS를 이용하여 표현할 수 있다.

SELECT 이름 FROM 학생정보 WHERE EXISTS(SELECT 학과 FROM 학과인원 WHERE 학과인원.학과 = 학생정보.학과 AND 학생수 <=30);

 

 

8) 부분 매치

  • 조건문 작성 시 자료의 일부를 가지고 비교하여 검색하는 질의문을 말한다.
  • '%': 여러 문자, '_': 한문자를 대신하고, '=' 대신 'LIKE'를 사용한다.

예1 ) [학생] 테이블에서 연락처의 번호가 '7588'로 끝나는 학생의 성명을 검색하시오.

SELECT 성명 FROM 학생 WHERE 연락처 LIKE '%7588';

 

9 ) 'NULL'값과 비교하는 질의

: 'NULL'과 비교하는 경우 WHERE절에 '=' 대신 'IS'를 사용하며, '<>' 대신 'IS NOT'을 사용한다.

예1 ) [학생] 테이블에서 연락처가 NULL인 학생의 학번을 검색하시오.

SELECT 학번 FROM 학생 WHERE 연락처 IS NULL;

예2 ) [학생] 테이블에서 연락처라 NULL이 아닌 학생의 이름을 검색하시오.

SELECT 이름 FROM 학생 WHERE 연락처 IS NOT NULL;

 

 

10) JOIN 질의

: 두 테이블을 JOIN 연산한 뒤 자료를 검색하는 형태의 질의문으로, [테이블1] JOIN [테이블2] ON [조인조건] 형태로 구성된다.

예1 ) [학생정보] 테이블과 [학과인원] 테이블에서 학과명이 같은 튜플을 JOIN하여 이름, 학과, 학생수를 검색하시오.

SELECT 이름, 학과, 학생수 FROM 학생정보 JOIN 학과인원 ON (학생정보.학과=학과인원.학과);

=&gt; 자연조인 수행 후 검색

* JOIN ~ USING

: 위 예1을 JOIN~USING 문장을 이용해서 표현할 수도 있다. USING(속성_이름)은 속성_이름을 이용해서 조인하라는 의미이다.

SELECT 이름,학과,학생수 FROM 학생정보 JOIN 학과인원 USING(학과);

 

 

2. INSERT문 (삽입문)

: 기존 테이블에 새로운 자료(튜플)을 삽입하는 경우 사용하는 명령문이다.

INSERT INTO 테이블_이름[(속성_이름...)]
VALUES(자료...);

 

INSERT INTO - 자료가 삽입될 테이블 이름과 속성 기입
- 삽입 시 테이블의 모든 속성 값을 가지고 있는 경우 속성 이름을 생략해도 되지만 그렇지 않은 경우 반드시 기입
VALUES 각 속성에 삽입될 실제 자료들을 기입

예1 ) [학생정보] 테이블에 학번 151115, 성명 '김정미', 학년 4, 수강과목 '데이터베이스', 연락처 '243-0707'인 학생을 삽입하시오.

INSERT INTO 학생정보(학번,성명,학년,수강과목,연락처) VALUES (151115, '김정미' , 4 , '데이터베이스' , '243-0707' );

 

 

3. UPDATE문 (갱신문)

: 테이블의 자료(튜플) 중에서 값을 변경하고자 하는 경우 사용되는 명령문

UPDATE 테이블_이름
SET 속성_이름=변경 내용
[WHERE 조건];

 

UPDATE 테이블_이름 변경할 테이블 이름을 기재
SET 속성_이름=변경 내용 변경할 자료의 값을 기재

예1 ) [학생정보] 테이블에서 '이영진' 학생의 점수를 92점으로 수정하시오.

UPDATE 학생정보 SET 점수=92 WHERE 성명='이영진';

 

4. DELETE문 (삭제문)

: 테이블의 자료(튜플)을 삭제할 때 사용되며, 조건에 맞는 튜플만 삭제된다. 이때, WHERE 절이 생략된 경우 모든 튜플이 삭제되어 빈 테이블이 된다.(테이블 삭제는 DROP문 이용)

DELETE FROM 테이블_이름
[WHERE 조건];

예1 ) [학생정보] 테이블에서 2학년 학생의 자료를 삭제하시오.

DELETE FROM 학생정보 WHERE 학년=2;

예2 ) [학생정보] 테이블의 모든 학생을 삭제하시오.

DELETE FROM 학생정보;

728x90

'전공 > Database' 카테고리의 다른 글

[실습] SQL문  (0) 2022.03.29
[이론] SQL 제어어(DCL)  (0) 2022.03.18
[이론] SQL 정의어(DDL)  (0) 2022.03.14
[이론] 관계 데이터 연산  (0) 2022.03.13
[이론] 관계 데이터 모델  (0) 2022.03.09