민둥 개발자의 계발 블로그

Database SQL 문법 총 정리#3 - 데이터 조작어 DML 본문

Study/Database

Database SQL 문법 총 정리#3 - 데이터 조작어 DML

민둥산의 민둥이 2022. 7. 11. 11:03

데이터 조작어(DML)

  • Data Manipulation Language의 약자
  • 데이터베이스 내의 데이터를 관리하는 데 사용
  • DML명령은 자동 커밋되지 않기에 롤백 가능
  • 데이터 조작어 모음 
    SELECT 데이터를 검색/조회(Retrieve)
    INSERT 테이블에 데이터를 삽입(추가)
    UPDATE 테이블 내의 기존 데이터를 수정/변경
    DELETE 테이블에서 데이터를 삭제
    MERGE 데이터가 테이블에 존재하면 UPDATE, 존재하지 않으면 INSERT를 수행 (INSERT + UPDATE)
    CALL PL/SQL 또는 JAVA 서브 프로그램 호출
    EXPLAIN PLAN 데이터 접근 경로를 해석
    LOCK TABLE 동시성 제어

SELECT 구문

  • 특정 테이블의 데이터를 조회하는 문법
  • SELECT 구문에 사용되는 절은 아래의 순서대로 사용됨

SELECT 절

  • 기본적인 테이블의 데이터를 조회하는 문법
  • 테이블의 전체 조회 시 *(Asterisk)를 사용

기본 문법

--특정 컬럼의 데이터 조회 
SELECT 컬럼명1[, 컬럼명2, ...] 
FROM 테이블명;

--전체 데이터 조회
SELECT *
FROM 테이블명;

WHERE절

  • 데이터 조회에 특정 조건을 추가하는 문법
  • 특정 컬럼 또는 서브 쿼리를 비교 연산자를 이용하여 조건을 걸어줌
  • ※ 조건을 걸어 줄 때 데이터 타입을 고려해야 함

기본 문법

--컬럼1이 숫자 10인 열의 값을 출력
SELECT 컬럼명1[, 컬럼명2, ...] 
FROM 테이블명
WHERE 컬럼명1 = 10;

ORDER BY 절

  • 출력하는 데이터를 특정 컬럼 기준으로 정렬해주는 문법
  • 여러 번 정의 시 1순위, 2순위로 정렬이 적용됨

기본 문법

-- 컬럼 1 기준으로 내림차순 적용 후 중복 시 컬럼 2기준으로 오름차순 정렬
SELECT 컬럼명1, 컬럼명 2 
FROM 테이블명 
WHERE 컬럼명1 < 10 
ORDER BY 컬럼명1 DESC, 컬럼명 2;

GROUP BY 절

  • 그룹을 묶는 데 사용하는 기준을 설정하는 절
  • GROUP BY절의 컬럼의 값들 중 동일한 값을 가진 행들은 하나의 그룹으로 묶이게
  • SELECT절에 들어갈 수 있는 값은 GROUP BY에 쓴 컬럼과 그룹 함수뿐임

사용 예제

--두개의 그룹을 동시에 묶어준 예시
SELECT department_id, job_id, SUM(salary), COUNT(*)
FROM EMPLOYEES
WHERE DEPARTMENT_ID >40
GROUP BY DEPARTMENT_ID , JOB_ID
ORDER BY DEPARTMENT_ID ;
SELECT JOB_ID, MAX(SALARY) AS Maximum ,MIN(SALARY) AS Minimum ,SUM(SALARY) AS SUM ,AVG(SALARY) AS AVERAGE, COUNT(*) num  
FROM EMPLOYEES
GROUP BY JOB_ID ;
SELECT department_id,AVG(SALARY), COUNT(*) 
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;

HAVING 절

  • 그룹에 대한 조건절, 그룹 함수의 WHERE절
  • 일반 컬럼이 아닌 그룹 함수를 활용한 조건으로 조건절을 작성할 수 있다.

사용 예제

SELECT MANAGER_ID ,MIN(SALARY)
FROM EMPLOYEES
WHERE MANAGER_ID IS NOT NULL 
GROUP BY MANAGER_ID
HAVING MIN(SALARY)>=6000
ORDER BY MIN(SALARY) DESC;
SELECT job_id,SUM(salary) PAYROLL
FROM EMPLOYEES 
WHERE JOB_ID NOT LIKE '%REP%' 
GROUP BY JOB_ID 
HAVING SUM(SALARY)>13000 
ORDER BY SUM(SALARY);

JOIN 구문

  • 여러 테이블의 데이터의 행을 연결하여 한번에 출력할 수 있게 해주는 문법

ON 절을 사용한 JOIN

  • 필요 요소 : 연결할 테이블, 연결 조건

사용 예제

--테이블 엘리어스 사용
SELECT emp.employee_id, emp.last_name, dept.department_id,dept.department_name
FROM employees emp JOIN departments dept
ON emp.department_id = dept.department_id;
SELECT employees.employee_id, employees.last_name, employees.salary, employees.department_id, departments.department_id, departments.department_name --필요 테이블 
FROM employees JOIN departments --연결 조건
ON employees.department_id = departments.department_id;

ON 절을 사용한 SELF JOIN

  • 같은 테이블 내에 서로 참조할 만한 컬럼이 있을 경우 같은 테이블을 연결 가능

사용 예제

--상사의 사원번호와 부하직원의 매니저 번호를 연결
SELECT e.employee_id, e.last_name, m.EMPLOYEE_ID, m.LAST_NAME 
FROM employees m JOIN employees e 
ON m.EMPLOYEE_ID = e.MANAGER_ID

INSERT 구문

  • 테이블에 값을 입력하는 구문
  • 입력하기 전 테이블의 구조를 잘 이해할 필요가 있음. (DESC 명령어로 테이블 구조 확인 추천)

기본 문법

--특정 컬럼에만 값을 넣고 싶을 때
INSERT INTO 테이블명(컬럼1, 컬럼3)
VALUES( 값1, 값2);
INSERT INTO 테이블명
VALUES( 값1, 값2, 값3,...);

UPDATE 구문

  • 특정 컬럼의 값을 수정하는 문법
  • ※주의! WHERE 절을 적용시키지 않을 경우 SET 절에 쓰인 컬럼의 모든 레코드가 수정됨

기본 문법

UPDATE 테이블명 
SET 바꿀컬럼 = '새로운값'
WHERE 컬럼2 = '옛날 값'

DELETE 구문

  • 특정 데이터(로우)를 삭제하는 구문
  • 전체 삭제를 해도 테이블의 구조는 남아있기에 다시 데이터 입력 가능
  • ※주의! WHERE 절을 적용시키지 않을 경우 모든 데이터가 삭제됨

기본 문법

DELETE FROM 테이블명 
WHERE 컬럼1 = 12;

SUBQUERY (서브 쿼리)

  • 쿼리 구문을 보조하는 역할의 쿼리구문
    • 주로 WHERE 절의 조건문으로 사용
  • 서브 쿼리는 메인 쿼리보다 우선 실행됨

사용 예제

SELECT employee_id,last_name,salary
FROM employees
WHERE salary > (SELECT SALARY FROM employees WHERE last_name='Abel');
반응형
Comments