본문 바로가기
정보처리기사/데이터베이스 구축

데이터베이스 조작(DML)

by jhwannabe 2023. 7. 19.

DML

DML(Data Manipulation Language, 데이터 조작어)의 개념

  • 데이터의 검색/삽입/삭제/변경에 사용되는 언어
  • 사용자와 DBMS 간의 인터페이스를 제공함
  • 종류
 SELECT - 튜플 검색 명령어
- 기본 구조

  SELECT 속성명[ALL | DISTINCT]
  FROM 릴레이션명
  WHERE 조건;
  [GROUP BY 속성명1, 속성명2, ...]
  [HAVING 조건]
  [ORDER BY 속성명 [ASC | DESC];

- ALL : 모든 튜플을 검색 (생략 가능)
- DISTINCT : 중복된 튜플 생략
INSERT - 튜플 삽입 명령어
- 기본 구조

  INSERT INTO 테이블명(속성명1, 속성명2,...)
  VALUES(데이터1, 데이터2, ...);
DELETE - 튜플 삭제 명령어
- 기본 구조

  DELETE
  FROM 테이블명
  WHERE 조건;
UPDATE - 튜플의 내용 변경 명령어
- 기본 구조

  UPDATE 테이블명
  SET 속성명 = 데이터
  WHERE 조건;

 

SELECT

1. 다음 R1과 R2의 테이블에서 아래의 실행결과를 얻기 위한 SQL문은?

[R1] 테이블

학번 이름 학년 학과 주소
1000 홍길동 1 컴퓨터공학 서울
2000 김철수 1 전기공학 경기
3000 강남길 2 전기공학 경기
4000 오말자 2 컴퓨터공학 경기
5000 장미화 3 전기공학 서울

[R2] 테이블

학번 과목번호 과목이름 학점 점수
1000 C100 컴퓨터 구조 A 91
2000 C200 데이터베이스 A+ 99
3000 C100 컴퓨터 구조 B+ 89
3000 C200 데이터베이스 B 85
4000 C200 데이터베이스 A 93
4000 C300 운영체제 B+ 88
5000 C300 운영체제 B 82

[실행 결과]

과목번호 과목이름
C100 컴퓨터 구조
C200 데이터베이스
SELECT 과목번호, 과목이름
FROM R1, R2
WHERE R1.학번=R2.학번 AND R1.학과='전자공학' AND R1.이름='강남길';

 

2. R1 테이블에서 성이 '홍'인 학생의 레코드를 검색하시오.

SELECT * FROM R1 WHERE 이름 LIKE '홍%';

[실행 결과]

학번 이름 학년 학과 주소
1000 홍길동 1 컴퓨터공학 서울

 

BETWEEN

  • 구간값 조건식
  • BETWEEN 170 AND 180은 170이상에서 180이하까지의 범위를 의미
  • WHERE 점수 >=90 AND 점수 <=95로 표현 가능

1. R2 테이블에서 점수가 80점에서 85점까지인 학번, 점수 필드의 레코드를 검색하시오.

SELECT 학번, 점수
FROM R2
WHERE 점수 BETWEEN 80 AND 85;

[실행 결과]

학번 점수
3000 85
5000 82

 

2. R2 테이블에서 과목번호별 점수의 평균을 구하시오.

SELECT 과목번호, AVG(점수) AS 평균
FROM R2
GROUP BY 과목번호;

[실행 결과]

과목번호 평균
C100 90
C200 92.3
C300 85

 

그룹 함수, 하위 질의

그룹 함수의 종류(집계 함수)

종류 설명
COUNT - 테이블의 행의 수를 계산할 때
- 표현식 : COUNT(*)
SUM - 하나 또는 여러 개의 열 합계를 구할 때
- 표현식 : SUM(열 이름)
AVG - 하나 또는 여러 개의 열 평균을 구할 때
- 표현식 : AVG(열 이름)
MAX - 해당 열의 최댓값을 구할 때
- 표현식 : MAX(열 이름)
MIN - 해당 열의 최솟값을 구할 때
- 표현식 : MIN(열 이름)

HAVING절을 사용한 조회 검색

  • GROUP BY절에 의해 선택된 그룹의 탐색 조건을 지정할 수 있으며 SUM, AVG, COUNT, MAX, MIN 등의 그룹 함수와 함께 사용할 수 있음

R2 테이블에서 점수가 90점 이상인 학생이 1명 이상인 과목이름별 과목이름을 검색하시오.

SELECT 과목이름, COUNT(*) AS 학생수
FROM R2
WHERE 점수>=90
GROUP BY 과목이름
HAVING COUNT(*)>=1;

[실행 결과]

과목이름 학생수
컴퓨터구조 1
데이터베이스 2

 

ORDER BY 절을 이용한 정렬 검색

  • 특정 항목을 기준으로 검색 테이블의 행들을 오름차순(ASC) 또는 내림차순(DESC)으로 정렬할 때 사용
  • 생략하면 ASC가 디폴트 값이 되어 오름차순으로 정렬됨

R2 테이블에서 점수를 기준으로 내림차순 정렬하시오.

SELECT * FROM R2 ORDER BY 점수 DESC

 

하위 질의(Sub Query, 서브쿼리)

  • 질의를 1차 수행한 다음, 반환값을 다른 릴레이션의 WHERE절에 포함시켜 사용하는 것

다음 SQL문을 분석하시오.

SELECT 이름 FROM R1 WHERE 학번 IN
(SELECT 학번 FROM R2 WHERE 과목번호='C100');

(SELECT 학번 FROM R2 WHERE 과목번호='C100';

R2 테이블에서 과목번호가 'C100'인 튜플의 학번 필드를 조회함

조회된 값을 상위 질의에 대치함(예를 들어 조회된 값이 1000, 3000, 4000이라고 가정)

SELECT 이름 FROM R1 WHERE 학번 IN (1000, 3000, 4000);

 

INSERT, UPDATE, DELETE

INSERT문 - 삽입문

INSERT INTO 테이블(열_이름1, 열_이름2, ...) VALUES(열_값1, 열_값2,...);

R2 테이블에 (학번 : 6000, 과목번호 : C100)인 레코드를 삽입하시오.

INSERT INTO R2(학번, 과목번호) VALUES(6000, C100);

 

UPDATE문 - 갱신문

UPDATE 테이블 SET 열_이름 = 산술식{열_이름 = 산술식} WHERE 조건;

R1 테이블의 홍길동의 학년을 2학년으로 갱신하시오.

UPDATE R1 SET 학년 = 2 WHERE = '홍길동';

 

DELETE문 - 삭제문

DELETE FROM 테이블이름 WHERE 조건;

R1 테이블에서 장미화 레코드를 삭제하시오.

DELETE FROM R1 WHERE 이름 = '장미화';

 

NoSQL

  • "Not only SQL"로, SQL만을 사용하지 않는 데이터베이스 관리 시스템(DBMS)을 지칭하면, 다양한 유형의 데이터베이스를 사용하는 것을 의미함
  • 데이터를 저장하는데 SQL 외에도 다른 방법도 있다는 개념하에 비정형 데이터의 저장을 위해 유연한 데이터 모델을 지원함
  • 전통적인 관계형 데이터베이스 관리 시스템과는 다른 비관계형(Non-Relational) DBMS임
728x90
반응형

'정보처리기사 > 데이터베이스 구축' 카테고리의 다른 글

보안, 분산 데이터베이스  (0) 2023.07.19
트랜잭션, 병행 제어  (0) 2023.07.19
SQL, DDL, DCL, View  (0) 2023.07.19
관계 대수와 연산자  (0) 2023.07.18
반정규화  (0) 2023.07.18