DML
데이터 조작어 -> 데이터에 변형을 가함
INSERT, UPDATE, DELETE, , ,
INSERT
테이블에 새로운 데이터를 튜플(행) 단위로 입력

오류문장 확인!
UPDATE
테이블에 저장된 데이터를 변경
UPDATE 직원
SET 직업ID = 'JAVA'
WHERE 직원ID = 4;
* WHERE로 조건 안걸어주면 모든 행의 ID가 JAVA로 바
DELETE
테이블의 데이터 삭제
DELETE FROM 직원
WHERE 직원ID = 1;
서브쿼리

* 이름이 Shelli인 직원보다 급여가 낮은 직원들 출력
SELECT FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY < (SELECT SALARY
FROM EMPLOYEES
WHERE FIRST_NAME = 'Shelli')
ORDER BY SALARY DESC;
단일행 서브쿼리
- 결과가 단 하나의 행으로 나오는 서브쿼리
- 출력 결과가 하나이므로 단일행 연산자(>, >=, =, , ,)를 사용해 비교
* Nancy보다 빨리 입사한 사원의 이름과 입사일 조회
SELECT FIRST_NAME, HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE <= (SELECT HIRE_DATE
FROM EMPLOYEES
WHERE FIRST_NAME = 'Nancy')
ORDER BY HIRE_DATE DESC;
다중행 서브쿼리
- 결과가 여러개의 행으로 나오는 서브쿼리
- 다중행 연산자 (IN, ANY/SOME, ALL, EXISTS)를 사용해 비교
IN
- 메인쿼리의 데이터가 서브쿼리의 결과 중에서 하나라도 일치하면 WHERE이 TRUE
* 부서별 최고 급여와 같은 급여를 받는 직원 출력
SELECT FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY IN (SELECT MAX(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID)
ORDER BY SALARY;
ANY, SOME
- 메인쿼리의 조건식을 만족하는 서브쿼리의 결과가 하나 이상이면 TRUE 반환
- ANY, SOME에 등가연산자(=)를 사용하면 IN과 같은 기능
SELECT FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY = ANY (SELECT MAX(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID)
ORDER BY SALARY;
ALL
- 메인쿼리의 조건식을 만족하는 서브쿼리의 결과가 '전부' TRUE여야 TRUE로 반환
SELECT FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY >= ALL (SELECT MAX(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID)
ORDER BY SALARY;
다중열 서브쿼리
컬럼이 여러개로 나오는 서브쿼리, 비교대상과 1:1대응해야함
* 각 부서별 최고연봉을 받는 직원 출력
SELECT FIRST_NAME, DEPARTMENT_ID, SALARY
FROM EMPLOYEES
WHERE (DEPARTMENT_ID, SALARY) IN (SELECT DEPARTMENT_ID, MAX(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID)
ORDER BY DEPARTMENT_ID;
FROM절 서브쿼리 (인라인뷰)
FROM절에서 가상테이블처럼 사용하는 서브쿼리, INNER JOIN과 유사
* 각 부서별 최고연봉을 받는 직원 출력 (JOIN조건 1. 부서 이름 동일 2.부서의 최고연봉이 직원의 급여와 동일
SELECT FIRST_NAME, DMAX.DEPARTMENT_ID, DMAX."부서별 최고급여"
FROM EMPLOYEES E,
(SELECT DEPARTMENT_ID, MAX(SALARY) AS "부서별 최고급여"
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID) DMAX
WHERE E.DEPARTMENT_ID = DMAX.DEPARTMENT_ID
AND E.SALARY = DMAX."부서별 최고급여"
ORDER BY DEPARTMENT_ID;
SELECT절 서브쿼(스칼라 서브쿼리)
SELECT절에서 사용하는 서브쿼리, 결과값이 1개만 나와야함
스칼라 서브쿼리 (SELECT절에 사용)
*직원의 부서이름 출력
SELECT FIRST_NAME, SALARY, DEPARTMENT_ID,
(SELECT DEPARTMENT_NAME
FROM DEPARTMENTS
WHERE DEPARTMENT_ID = E.DEPARTMENT_ID) AS 부서이름
FROM EMPLOYEES E
ORDER BY DEPARTMENT_ID;
'학습 기록 > DataBase' 카테고리의 다른 글
DataBase 연습문제 (0) | 2023.05.29 |
---|---|
23.05.16 / DataBase / TCL, DCL (0) | 2023.05.29 |
23.05.10 / DataBase / DML (0) | 2023.05.10 |
23.05.09 / DataBase / ORDER BY, JOIN (0) | 2023.05.09 |
23.05.08 / DataBase / GROUP BY, HAVING (0) | 2023.05.08 |