데이터베이스 2

eunhyeee·2023년 8월 4일
1
post-custom-banner

SQL에 대해서 설명해주세요. C언어와 같은 프로그래밍 언어와 어떤차이가 있나요?

관계형 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어입니다.
SQL은 구조화된 질의 언어 Structured Query Language의 약자로 DBMS 상에서 데이터를 읽고 쓰고 삭제하는 등 데이터를 관리하기 위한 일종의 프로그램 언어입니다.
C나 자바와 같은 일반 프로그래밍 언어는 절차적 언어라고 할 수 있는데 반해, SQL은 집합적 언어입니다.

출처 : https://thebook.io/006696/0019/

개발자가 작성한 SQL이 어떤 과정을 통해 실행 되는지 설명해주세요.

  1. 구문 분석(Parsing)
    • 해당 쿼리가 문법적으로 틀리지 않은지 확인. 해당 구문을 SQL 서버가 이해할 수 있는 단위들로 분해하는 과정.
    • 만약 구문이 부정확하다면 여기서 처리를 중단. 이 문장이 일괄 처리(batch) 내에 있다면 일괄 처리 전체를 중단.(Batch abort : Batch 중 하나라도 syntax error가 있다면 전체 batch가 실행되지 않는다.)
  2. 표준화(Standardization)
    • 실제로 필요없는 부분들이 제거. 표준화된 쿼리 트리(Standard Query Tree)가 만들어 진다.
  3. 최적화(Optimization)
    • 통계나 조각 정보 등을 바탕으로 실행 계획을 만들어 낸다. 쿼리처리에서 매우 중요한 단계
      ① 쿼리 분석 : 검색 제한자(SARG)인지 조인 조건인지 판단.
      ② 인덱스 선택 : 분포 통계 정보를 이용하여 인덱스검색이나 테이블 스캔 중의 하나를 선택. 여러 인덱스 중 가장 효율적인 인덱스를 선택
      ③ 조인 처리 : JOIN, UNION, GROUP BY, ORDER BY 절을 가지고 있는지 확인하여 적절한 작업 순서를 선택
    • 이 단계의 출력은 실행 계획(Execution Plan) 이다.
  4. 컴파일(Compilation)
    • 컴파일을 하면 이진 코드가 생성된다. 일반적인 경우에는 컴파일하고 나면 .exe, .dll 등의 이진 파일이 만들어 지는데, SQL Server에서는 그냥 메모리(프로시저 캐시)에만 올린다. 그래서 컴파일 속도가 매우 빠르다.
  5. 실행(Execute)
    • 엑세스 루틴으로 가서 실제 처리를 하고 결과를 돌려준다.

출처 : https://heewon26.tistory.com/187

DML은 무엇인가요? 어떤 구문이 있는지도 설명해주세요.

출처 : https://brownbears.tistory.com/180

DDL은 무엇인가요? 어떤 구문이 있는지도 설명해주세요.

출처 : https://brownbears.tistory.com/180

DCL은 무엇인가요? 어떤 구문이 있는지도 설명해주세요.

출처 : https://brownbears.tistory.com/180

CASCADE 설정에 대해서 설명해주세요.

관계형 데이터베이스를 다루다보면 CASCADE를 활용할 일이 많습니다.
참조의 관계를 맺은 데이터베이스를 신뢰성 있는 상태로 유지하기 위함인데요!
DB의 값을 수정/삭제할 때, 해당 값을 참조하고 있는 레코드 역시 종속적으로 수정/삭제를 가능하게 해줍니다.
[수정 - ON UPDATE CASCADE][삭제 - ON DELETE CASCADE]

출처 : https://joel-dev.site/90

VIEW에 대해서 설명해주세요.

  1. 뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블이다.
  2. 뷰는 저장장치 내에 물리적으로 존재하지 않지만 사용자에게 있는 것처럼 간주된다.
  3. 뷰는 데이터 보정작업, 처리과정 시험 등 임시적인 작업을 위한 용도로 활용된다.
  4. 뷰는 조인문의 사용 최소화로 사용상의 편의성을 최대화 한다.

출처 : https://coding-factory.tistory.com/224

SELECT 절의 처리순서에 대해서 설명해주세요.

출처 : https://myjamong.tistory.com/172

SELECT ~ FOR UPDATE 구문에 대해서 설명해주세요.

SELECT ~ FOR UPDATE를 실행하면 특정 세션이 데이터에 대해 수정을 할 때까지 LOCK이 걸려 다른 세션이 데이터에 접근할 수 없습니다.

출처 : https://dololak.tistory.com/446

GROUP BY절에 대해서 설명해주세요.

GROUP BY 는 같은 값을 가진 행끼리 하나의 그룹으로 뭉쳐줍니다.

출처 : https://kimsyoung.tistory.com/entry/SQL-GROUP-BY-%E4%B8%8A-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%8B%A4%EC%A0%9C-%EC%A0%81%EC%9A%A9-%EB%B0%A9%EB%B2%95

ORDER BY절에 대해서 설명해주세요.

ORDER BY 절은 SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 칼럼을 기준으로 정렬하여 출력하는데 사용한다.

출처 : https://dataonair.or.kr/db-tech-reference/d-guide/sql/?mod=document&uid=344

INNER JOIN과 OUTER JOIN의 차이점에 대해서 설명해주세요.


이너조인


레프트 아우터조인

라이트 아우터조인

풀 아우터조인

INNER JOIN은 위에 설명 했듯이 교집합이라는 개념으로 생각하면 이해하기 편할듯.
OUTER JOIN은 INNER JOIN에서 일치하지 않는 레코드는 모두 버렸지만 OUTER JOIN에서는 일치하지 않더라도 버리지 않고 NULL로 채워서 결과를 응답한다.

출처 : https://velog.io/@welchs1423/INNER-JOIN-OUTER-JOIN-%EC%B0%A8%EC%9D%B4
https://ybeaning.tistory.com/87

LEFT OUTER JOIN, RIGHT OUTER JOIN에 대해서 설명해주세요.

위에 설명

CROSS JOIN에 대해서도 설명해주세요.

CROSS JOIN(상호 조인)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다.

출처 : https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

서브쿼리에 대해서 설명해주세요.

하나의 SQL 문에 포함되어 있는 또 다른 SQL 문을 말합니다.

출처 : https://mozi.tistory.com/233

DROP, TRUNCATE, DELETE에 각각에 대해 설명해주세요. 어떤차이가 있나요?

DELETE : WHERE절을 사용하여 테이블에 있는 데이터를 하나하나 선택하여 제거하는 방식

TRUNCATE : 전체 데이터를 한번에 삭제하는 방식 ( <-> DELETE)

DROP : 테이블 자체를 완전히 날려버리는 방식 -> 처음부터 없었던 테이블처럼

출처 : https://prinha.tistory.com/entry/SQL-DELETE-TRUNCATE-DROP-%EC%B0%A8%EC%9D%B4%EC%A0%90

DISTINCT에 대해서 설명해주세요. 사용해본 경험도 설명해주세요.

DISTINCT란 중복제거 키워드입니다. SELECT로 DB에서 컬럼을 조회할 때, 중복되는 값을 제거하고 조회할 때 사용합니다. 즉, DISTINCT 키워드를 붙인 필드(컬럼)는 중복 값을 합쳐 한 번만 출력합니다.

출처 : https://bio-info.tistory.com/110

SQL Injection 공격이 무엇인지 어떻게 공격을 예방할 수 있는지 설명해주세요.

SQL Injection 이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위 입니다.

대응방안 : Error Message 노출 금지

출처 : https://noirstar.tistory.com/264

알고 있는 SQL 안티패턴이 있다면 설명해주세요.

이 부분은 추가적으로 더 공부가 필요할 것 같다.

페이지네이션을 구현한다고 했을때 쿼리를 어떻게 작성해야할까요?

이 부분은 추가적으로 더 공부가 필요할 것 같다.

profile
망곰이를 좋아하는 백엔드 개발자 지망생
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 8월 4일

훌륭한 글 감사드립니다.

답글 달기