LG 유레카 2기_프론트엔드

[ DB ] DML문

ChatjihoiPT 2025. 3. 4. 20:54

1. DB


1. SubQuery이란?

  • Query문 내에 작성하는 Query를 SubQuery라고 한다.
  • 기본적으로 외부 Query가 수행되기 전에 SubQuery가 먼저 수행되고 그결과를 외부 Query에서 사용한다. 단, 상호 연관 쿼리는 외부 Query한행에 대해 SubQuery가 수행되므로 SubQuery는 외부 Query의 행 수만큼 수행된다.

2. 종류

  • where절에서 사용하는 단일행, 다중행, 다중열, 상호 연관 subquery
  • from절에서 사용하는 inline view
  • 스칼라 서브쿼리(단일행, 단일열)로 조회되는 sub query

 

  • sub query가 사용되는 위치 select절, from절, where절, having절, order절

=> group by절 빼고 create table문, insert문, update문, delete문

  • 규칙 sub query를 작성시 ()내에 작성해야 한다.
  • sub query
    outer join한것과 같은 효과

  • select절의 sub query(스칼라 서브쿼리)

3. where절 sub Query

  • sub query를 수행한 결과를 where절에서 비교 데이타로 사용
  • 종류 단일 행 서브쿼리 -> 기본 스칼라
    • 서브 쿼리로 부터 수행된 결과 행이 하나일 때
    • 비교 조건 =, >, >=, <, <=, != 다중 행 서브쿼리
    • 서브 쿼리로 부터 수행된 결과 행이 둘 이상일 때
    • 비교 조건 in, any, all 다중 열 서브쿼리
    • 서브 쿼리로 부터 수행된 결과 열이 둘 이상일 때 상호 연관 서브쿼리
    • 외부 질의에서 사용 하는 컬럼을 subquery의 조건으로 사용
  • 다중행 sub qeury
    1. in sub query를 통해 조회된 여러 데이타 중 하나와 일치하면 조회된다.
    2. all
    3. (>=) all sub query를 통해 조회된 모든 데이타 보다 커야 한다. => 가장 큰 값 보다 커야한다. <(<=) all sub query를 통해 조회된 모든 데이타 보다 작아야 한다. => 가장 작은 값보다 작아야한다.
    4. any
    5. (>=) any sub query를 통해 조회된 데이타 중 하나라도 커야 한다.
    6. => 가장 작은 값보다 커야한다. <(<=) any sub query를 통해 조회된 데이타 중 하나라도 작아야 한다 => 가장 큰값 보다 작아야 한다. = any => in과 같으므로 잘 안씀.

2. DML문


1. DML문(Data Manipulation language)

  • data를 insert, update, delete하는 문장
  • dml문을 수행하면 수행된 내용이 임시저장소에 저장되어 실제 DB에는 반영되지 않는다.
  • DML문을 수행후 TCL(Transaction Controll language)을 수행해야한다. TCL문 commit : 디비에 반영 —> 원자성 유지를 위해 사용 savepoint 이름 : 임시 저장 위치 rollback : 작업한 모든 dml문 수행 취소 rollback to 세이브포인트이름: 지정한 savepoint까지 취소
  • update, delete문을 수행하면 commit 또는 rollback하기 전까지 해당 Record는 lock된다.
  • ** 레코드 락(Record Lock) Record Lock이란 row의 index를 기준으로 Lock을 거는 것으로 아래와 같은 쿼리에 해당 Lock이 걸립니다. 트랜잭션에서 해당 index의 row에 insert, update, delete 구문 사용이 락이 걸려있는 동안은 불가능해집니다.

2. 데이타 추가

  • 테이블에 지정한 컬럼에 지정한 값으로 추가

insert into 테이블명 values(값,...)

  • 테이블 구조에 설정된 모든 컬럼에 구조에 지정된 순서대로 값이 설정되서 insert됨
  • insert into 테이블명(컬럼명, ....) values(값,...)