본문 바로가기

CS study/데이터베이스

DataBase 2주차 정리 - SQL, DDL, DML, DCL, JOIN, 쿼리 순서

목차

    질문

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

    특정 어휘와 특정 구문을 갖는 프로그래밍 언어의 정의를 고려하면 SQL은 프로그래밍 언어라고 할 수 있다.

    그러나 범용 사용이 가능한 GPL(General Purpose Language)보다는 실제로는 DSL(Domain-Specific Language) 에 가깝다.

     

    SQL은 데이터베이스 관리 및 데이터 조작을 위해 설계된 특수 목적 언어(Domain-Specific Language, DSL)이다.

    이 언어는 데이터를 저장, 검색, 수정, 삭제하는 등의 기능을 제공한다.

     

    SQL과 DSL

    SQL은 프로그래밍 언어의 일반적 정의에 부합한다. 특정 어휘와 구문을 사용하며, 명령을 실행할 수 있기 때문이다. 그러나 일반 목적 프로그래밍 언어(General Purpose Language, GPL)처럼 다양한 종류의 애플리케이션을 개발하는 데 사용되지는 않는다. SQL은 주로 데이터베이스 관리에 특화되어 있으며, 이러한 특성 때문에 도메인 특화 언어(Domain-Specific Language, DSL)에 더 가깝다.

     

     

     

    다른 프로그래밍 언어의 경우

    C나 자바와 같은 일반 프로그래밍 언어는 범용 가능하며(GPL), 절차적 언어라고 할 수 있다.

     

    일반 프로그래밍 언어는 절차적(Procedural) 또는 객체 지향(Object-Oriented) 프로그래밍을 지원한다. 이들 언어는 알고리즘과 로직의 순차적 실행을 중시한다.

    반면, SQL은 집합 기반(Set-based) 언어로, 데이터의 집합을 다루는 데 초점을 맞춘다. SQL에서는 데이터 집합 전체에 대한 선언적(Declarative) 명령을 사용하여 작업을 수행한다. 즉, '어떻게(How)'보다 '무엇(What)'을 할 것인지를 명시하는 방식이다.

     

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

    1. 파싱(Parsing): SQL 문장을 서버가 이해할 수 있는 형태로 변환한다. 구문 분석이 여기서 이루어진다. 잘못된 문법이나 존재하지 않는 테이블을 참조하는지 검사한다.
    2. 옵티마이징(Optimization): 여러 실행 계획 중 가장 효율적인 방법을 선택한다. 이 때, 인덱스 사용 여부, 조인 방식, 데이터 접근 순서 등이 결정된다.
    3. 로우 소스 생성(Row Source Generation): 최적화 단계에서 결정된 실행 계획을 기반으로 실제 작업을 수행하는 코드를 생성한다.
    4. 실행(Execution): 생성된 코드를 실행하여 SQL 문장을 처리한다. 이 과정에서 데이터베이스의 데이터가 읽히거나 변경된다.

     

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

     

    1. DML (Data Manipulation Language)
      • 데이터 조작 언어
      • 데이터를 실제로 처리하는 구문
      • 주요 구문: INSERT (데이터 추가), UPDATE (데이터 수정), DELETE (데이터 삭제), SELECT (데이터 조회)
    2. DDL (Data Definition Language)
      • 데이터 정의 언어
      • 데이터베이스 스키마와 구조를 정의하는 구문
      • 주요 구문: CREATE (객체 생성), ALTER (객체 수정), DROP (객체 삭제)
    3. DCL (Data Control Language)
      • 데이터 제어 언어
      • 데이터의 접근 및 권한 관리를 위한 구문
      • 주요 구문: GRANT (권한 부여), REVOKE (권한 취소)

    6. 참조 무결성에 대해서 설명해주세요.

    참조 무결성(Referential Integrity)

    • 데이터의 일관성과 정확성을 유지하기 위한 제약 조건
    • 외래키(Foreign Key)를 통해 한 테이블의 컬럼이 다른 테이블의 키와 일치하도록 강제

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

    CASCADE 설정

    • 참조 무결성 규칙의 일부
    • 부모 테이블의 행이 삭제되거나 변경될 때, 관련된 자식 테이블의 행도 같이 삭제 또는 변경되도록 설정

     

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

    • 하나 이상의 테이블에서 유도된 가상의 테이블
    • 복잡한 쿼리를 단순화하거나 데이터 접근 제어에 사용

     

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

    FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

     

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

     

    SELECT ~ FOR UPDATE 구문은 주로 트랜잭션 처리 중에 사용되는 SQL 명령어다.

    이 구문의 주요 목적은 특정 데이터 행에 대한 잠금을 설정하여 다른 트랜잭션에서 해당 행을 변경하거나 읽지 못하게 하는 것이다. 이는 동시성 제어를 위해 사용되며, 데이터 무결성을 유지하는 데 중요하다.

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

    • 특정 열의 값에 따라 결과 세트를 그룹화
    • 집계 함수(Aggregate Functions)와 함께 사용

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

    • 결과 세트를 특정 열의 값에 따라 정렬
    • 오름차순(ASC) 또는 내림차순(DESC) 정렬

    13. INNER JOIN과 OUTER JOIN의 차이점에 대해서 설명해주세요.
    14. LEFT OUTER JOIN, RIGHT OUTER JOIN에 대해서 설명해주세요.

    1. INNER JOIN: 두 테이블의 교집합

    2. OUTER JOIN: 교집합 + 한쪽 테이블의 나머지 부분 (LEFT, RIGHT, FULL)

    3. LEFT OUTER JOIN: 왼쪽 테이블의 모든 행 + 오른쪽 테이블과 일치하는 행

    4. RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행 + 왼쪽 테이블과 일치하는 행

     

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

    • 카테시안 곱을 반환, 두 테이블 간 가능한 모든 조합 생성

     

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

     

     

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

     

     

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

     

     

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

     

     

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

     

     

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

     

     

     

    1. SQL vs programming Language

    https://www.datacamp.com/blog/is-sql-a-programming-language

     

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

     

    오라클 SQL과 PL/SQL을 다루는 기술: 03 SQL과 PL/SQL 알아 보기

    더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.

    thebook.io