DML(Data Manipulation Language)

m_ngyeong·2024년 4월 2일
0

Database(DB)

목록 보기
1/4
post-thumbnail

SQL


DML(Data Manipulation Language)

DML은 데이터 조작어로, DB에서 데이터를 조회, 삽입, 수정, 삭제하는 데 사용되는 SQL 명령어를 포함하고 있다. DML 명령어는 사용자가 저장된 데이터를 실질적으로 관리하는데 사용되는 언어이다.

💚 SELECT : DB에서 데이터를 조회하는 명령어

SELECT * FROM employees;
// 이 쿼리는 employees 테이블의 모든 행과 열을 조회
  • DISTINCT : 중복된 튜플이 있으면 그 중 첫 번째 한 개만 표시
  • FROM절
  • WHERE절
  • GROUP BY절 : 특정 속성을 기준으로 그룹화하여 검색
  • HAVING절 : GROUP BY와 함께 사용되며, 그룹에 대한 조건을 지정
  • ORDER BY절 : 테이블을 정렬하여 검색할 때 사용
    SELECT name, score FROM 성적 ORDER BY score DESC
    • ASC : 오름차순
    • DESC : 내림차순

💚 INSERT : DB에 새로운 데이터를 추가하는 명령어

INSERT INTO 문을 사용하여 테이블에 데이터를 추가할 때, 데이터가 하나만 추가될 경우에도 VALUES 키워드를 사용하여 값을 지정한다.

INSERT INTO 학생(학번, 이름, 학년, 전공, 전화번호) 
VALUES(1974111, '헬로키티', 3, '귀여움', '010-0000-2222);
// 이 쿼리는 학생 테이블에 새로운 학생 정보를 추가
  • 데이터가 여러 행일 경우, VALUES를 여러 번 사용하여 한 번에 여러 행을 추가할 수도 있다:
INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES 
    (103, 'Alice', 'Johnson', 'Marketing'),
    (104, 'Bob', 'Brown', 'Sales');

💚 UPDATE : DB의 기존 데이터를 수정하는 명령어

UPDATE 학생부 
SET 학과번호 = 999 
WHERE 입학생수 >= 300;
// 이 쿼리는 입학생수가 300명 이상인 학과번호를 999번으로 변경

💚 DELECT : DB에서 데이터를 삭제하는 명령어

DELECT FROM 학생 
WHERE 이름 = 민수;
// 이 쿼리는 이름이 민수인 학생을 학생 테이블에서 삭제

조건 지정 검색

WHERE절에 다음 연산자들을 이용한 조건을 지정하여 조건에 만족하는 튜플만 검색한다.

  • 비교 연산자 :
    • = 같다, <> 같지 않다
    • > 크다, < 작다, >= 크거나 같다, <= 작거나 같다
  • 논리 연산자 : NOT,AND, OR
  • LIKE 연산자 : 대표 문자를 이용해 지정된 속성의 값이 문자 패턴과 일치하는 튜플을 검색
    • % 모든 문자를 대표함 :
      '%A%' → BAC, A, ...
      SELECT * FROM 학생 WHERE 이름 LIKE '이%' ORDER BY 이름 DESC;
    • - 문자 하나를 대표함 : 'A_' → AB (A:x, ABC:x)
    • # 숫자 하나를 대표함
  • IN 연산자 : 필드의 값이 IN 연산자의 수로 지정된 값과 같은 레코드만 검색하며, OR 연산을 수행하는 결과와 같음
    • IN 연산자 서브 쿼리 :
      SELECT 이름 FROM R1 WHERE 학번 IN(SELECT 학번 FROM R2 WHERE 과목번호 = 'C100');
  • NOT IN 연산자 : 필드의 값이 IN 연산자에 있는 값을 제외하고 조회함
    SELECT * FROM emp WHERE name NOT IN ('JONES', 'SCOTT', 'MILLER')

📍ex) 다음 [TABLE]을 참조하여 [SQL문]을 실행했을 때 출력되는 결과를 쓰시오.

[TABLE]

INDEXCOL1COL2
12NULL
246
335
463
5NULL3

[SQL문]

SELECT COUNT(COL2)
FROM TABLE
WHERE COL1 IN (2,3)
   OR COL2 IN(3,5);

조건에 맞는 'COL2' 속성만 추출

COL2
NULL
5
3
3

COUNT(COL2)는 'COL2' 속성의 개수를 계산하지만 'NULL'값은 제외함으로 결과는 3이다.

비교연사자와 사용되는 조건 서브 쿼리

  • ALL 연산자 : 전체 값을 비교하여 모두 만족해야만 true
SELECT 제품명, 단가, 제조사 FROM 제품
WHERE 단가 > ALL (SELECT 단가 FROM 제품 WHERE 제조사 = 'H');
  • ANY 연산자(=SOME 연산자) : 다수의 비교값 중 한개라도 만족하면 true이고 비교 연산자를 사용
    SELECT * FROM emp WHERE sal = ANY(950, 3000, 1250)
    'sal = 950 OR sal = 3000 OR sal = 1250' 의미
  • EXISTS 연산자 : 메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만조갛는 값이 하나라도 존재하면 true

그룹 함수

  • COUNT(속성명) :그룹별 튜플 수를 구하는 함수
    • COUNT(*) : null 값을 포함한 튜플의 수 개수
    • COUNT(속성명) : null 값을 포함하지 않은 튜플의 수 개수
  • SUM(속성명) : 그룹별 합계를 구하는 함수
  • AVG(속성명) : 그룹별 평균를 구하는 함수
  • MAX(속성명) : 그룹별 최대값를 구하는 함수
  • MIN(속성명) : 그룹별 최소값를 구하는 함수
  • STDDEV(속성명) : 그룹별 표준편차를 구하는 함수
  • VARIANCE(속성명) : 그룹별 분산를 구하는 함수

📍ex) [성적] 테이블에서 과목별 점수의 평균이 90점 이상인 '과목이름', '최초점수', '최대점수'를 검색하고자 한다. [처리 조건]을 참고하여 적합한 SQL문을 작성하시오.

[성적]

학번과목번호과목이름학점점수
a2001101컴퓨터구조695
a2002101컴퓨터구조684
a2003302데이터베이스589
a2004201인공지능592
a2005302데이터베이스5100
a2006302데이터베이스588
a2007201인공지능593

[결과]

과목이름최소점수최대점수
데이터베이스88100
인공지능9293

[처리 조건]

  • 최소한의 코드로 작성될 수 있도록 SQL문을 구성한다.
  • WHERE문은 사용하지 않는다.
  • GROUP BY와 HAVING을 이용한다.
  • 집계함수(Aggregation Function)를 사용하여 명령문을 구성한다.
  • '최소점수', '최대점수'는 별칭(Alias)을 위한 AS문을 이용한다.
  • 명령문 마지막의 세미콜론(;)은 생락이 가능하다.
  • 인용 부호가 필요한 경우 작은 따옴표(' ')를 사용한다.

∴ SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 성적
GROUP BY 과목이름 HAVING AVG(점수) >= 90;

집합 연산자

  • UNION(합집합) : 중복된 행은 한 번만 출력
  • UNION ALL(합집합) : 중복된 행도 그대로 출력
  • INTERSECT(교집합) : 두 SELECT문의 조회 결과 중 공통된 행만 출력
  • EXCEPT(차집합) : 첫 번째 SELECT문의 조회 결과에서 두 번째 SELECT문의 조회 결과를 제외한 행을 출력

📍ex) UNION의 연산 결과 값을 작성하시오.

SELECT A FROM t1
UNION
SELECT A FROM t2
ORDER BY A DESC;
A
4
3
2
1

Trigger

트리거는 데이터베이스 시스템에서 데이터의 INSERT(삽입), DELECT(삭제), UPDATE(갱신) 등의 Event(이벤트)가 발생할 때 관련 작업이 자동으로 수행되게 하는 절차형 SQL이다.

  • 데이터베이스에 저장되며, 데이터 변경 및 무결성 유지, 로그 메시지 출력 등의 목적으로 사용됨


참고,
길벗알앤디. 『정보처리기사 실기 단기완성』. 길벗. 2023
NCS 정보처리기사 연구회(윤영빈, 서용욱, 김학배, 박인상 공저). 『수제비 2023 정보치리기사 실기』. 건기원. 2023
https://carami.tistory.com/18

profile
사용자 경험 향상과 지속적인 성장을 추구하는 프론트엔드 개발자 ʚȉɞ

0개의 댓글