기술면접 대비질문 - DB

이희준·2023년 12월 27일
0
post-thumbnail

💡 SELECT 쿼리의 수행 순서

  • FROM -> ON -> JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY

💡 Index에 대한 설명 & 장/단점

  • Index란 테이블을 처음부터 끝까지 검색하는 방법인 FTS(Full Table Scan)과는 달리 인덱스를 검색하여 해당 자료의 테이블을 엑세스하는 방법이다.
    • 예를 들어, DB를 책으로 비유하면
    • 데이터 -> 책의 내용
    • 데이터가 저장된 레코드의 주소 -> index 목록에 있는 페이지 번호
  • 인덱스는 항상 정렬된 상태를 유지하기 때문에 값을 검색하는데 빠르지만, 새로운 값을 추가하거나 수정, 삭제하는 경우에는 쿼리문 실행 속도가 느려진다.
  • 즉, 인덱스는 데이터의 저장 성능을 희생하고 그대신 데이터의 검색 속도를 높이는 기능이다.

💡 SQL Injection이란 ?

  • SQL Injection이란 공격자가 악의적인 의도를 갖는 SQL 구문을 삽입하여 DB를 비정상적으로 조작하는 코드 인젝션 기법이다.

💡 트랜잭션이란 ?

  • 작업들을 모두 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능이다.
  • 하나의 트랜잭션은 Commit(작업완료)되거나 Rollback(취소) 된다.

💡 DB Lock에 대한 설명

  • DB Lock은 트랜잭션 처리의 순차성을 보장하기 위한 방법이다.
  • 공유락(LS, Shared Lock) Read Lock이라고도 하는 공유락은 트랜잭션이 읽기를 할 때 사용하는 락이며, 데이터를 읽기만 하기 때문에 공유락끼리는 동시에 접근이 가능하다.
  • 베타락(LX, Exclusive Lock) Write Lock이라고도 하는 베타락을 데이터를 변경할 때 사용하는 락이며, 트랜잭션이 완료될 때까지 유지되며, 베타락이 끝나기 전까지 어떠한 접근도 허용하지 않는다.

💡 inner join과 outer join의 차이

  • inner join은 서로 연관된 내용만 검색하는 조인 방법이다.
    • A와 B에 대해 수행하는 것은, A와 B의 교집합을 말한다. 벤다이어그램으로 그렸을 때 교차되는 부분이다.
  • outer join은 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽의 내용을 전부 출력하는 방법이다.
    • A와 B에 대해 수행하는 것은, A와 B의 합집합을 말한다. 벤다이어그램으로 그렸을 때 합집합 부분이다.
    • outer join에는 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있다.

💡 GROUP BY의 역할

  • GROUP BY는 GROUP BY 명령어를 통해 특정 컬럼을 기준으로 연산한 결과를 집계 키로 정의하여 그룹을 짓는 역할을 한다.
  • 집합 연산자는 COUNT, SUM, AVG, MAX, MIN 등이 있고, DISTINCT와 같이 중복 데이터를 제거하는 특징이 있다.

💡 DELETE, TRUNCATE, DROP의 차이

  • DELETE는 데이터는 지우지만 테이블 용량은 줄어들지 않고 원하는 데이터만 골라서 지울 수 있다. 삭제 후 되돌릴 수 있다.
  • TRUNCATE는 전체 데이터를 한번에 삭제하는 방식이다. 테이블 용량이 줄어들고 인덱스 등도 삭제되지만 테이블은 삭제할 수 없고, 삭제 후 되돌릴 수 없다.
  • DROP은 데이블 자체를 완전히 삭제하는 방식(공간, 인덱스, 객체 모두)이다. 삭제 후 되돌릴수 없다.

💡 HAVING과 WHERE의 차이

  • HAVING은 그룹을 필터링하는데 사용되고, WHERE은 개별 행을 필터링하는데 사용된다.
  • 집계합수(COUNT, SUM, AVG, MAX, MIN 등)는 HAVING절과 함께 사용할 수 있으나, WHERE절은 사용할 수 없다.(집계함수를 사용할 수 있는 GROUP BY 절보다 WHERE절이 먼저 수행)
  • HAVING은 그룹화 또는 집계가 발생한 후 필터링하는데 사용되고,
  • WHERE은 그룹화 또는 집계가 발생하기 전에 필터링하는데 사용된다.

💡 JOIN에서 ON과 WHERE의 차이

  • ON이 WHERE보다 먼저 실행되어 JOIN을 하기 전에 필터링을 하고(ON 조건으로 필터링이 된 레코들간에 JOIN이 이뤄진다.)
  • WHERE은 JOIN을 한 후에 필터링을 한다.(JOIN을 한 결과에서 WHERE 조건절로 필터링이 이뤄진다)

0개의 댓글