10회차 데이터베이스 | 데이터베이스 개요 및 쿼리 관련 질문 정리

728x90

24.02.02 (금) 나온 질문 내용 정리

  1. 데이터베이스 무결성
    1. 무결성 : 데이터베이스 안에서 유일성을 지키기 위해 할 조건
    2. 조건
      1. 개체 무결성 : 릴레이션 내 PK를 구성하는 속성은 NULL값과 중복값을 가질 수 없다.
      2. 참조 무결성 : FK 값은 NULL이거나 참조테이블의 PK값이어야 한다. 
      3. 키 무결성 : 한 릴레이션에 하나 이상의 키가 존재해야한다.
      4. 도메인 무결성 : 속성의 값이 도메인에 속해야한다.
  2. RDBMS vs NoSQL 비교하시오.
    1) NoSQL : 스키마 X. 비정형 데이터. Scale out 가능 
    - 장점 : 스키마가 없이 Key-Value 형태로 데이터를 자유롭게 관리 O. scale-up + scale-out 가능 
    - 단점 : 데이터 중복 O. 중복된 데이터 변경 시 수정을 모든 컬렉션에 대해 수행. 스키마 없어서 명확한 데이터 구조 보장 X
    2) RDBMS : 스키마 O. 데이터 정합성 보장. Scale out 불가능
    - 장점 : 스키마에 맞춰 데이터 관리하므로 데이터 정합성 보장
    - 단점 : 시스템 커질수록 쿼리 복잡, 성능 저하/ Scale-out 어렵다 (Scale-up만 가능)

  3. select 쿼리 진행 순서를 설명하시오.
    FROM, ON, JOIN >> WHERE , GROUP BY, HAVING >> SELECT >> DISTINCT >> ORDER BY >> LIMIT
  4. DDL , DML, DCL 설명하시오.
    DDL (Definition) : 정의어 
    - CREATE, ALTER, DROP
    DML (Maniplation) : 조작어
    - SELECT, DELETE, UPDATE, INSERT
    DCL (Control) : 제어어
    - rollback, grank, revoke, commit 
  5. 내부 조인과 외부 조인 설명하시오.
    1. 내부 - 공통된 부분 추출
    2. 외부 - 공통되지 않은 부분도 같이 출력
  6. DELETE / TRUNCATE / Drop 명령어 구분하시오.
    1. Delete - 튜플제거 , 삭제 후 되돌릴 수 있다.
    2. TRUNCATE - 테이블 만(뼈대) 남김, 튜플은 전부 제거 , 삭제 후 되돌릴 수 없다.
    3. DROP - 테이블 전체 제거
  7. On vs Where vs Having 을 구분하시오.
    순서 : FROM, ON, JOIN >> WHERE, GROUP BY, HAVING >> SELECT >> DISTINCT >> ORDER BY >> LIMIT 

    Where vs Having : WHERE절은 그룹화 전에, HABING절은  그룹화 후 필터링을 한다.
    On vs Where : ON은 조인 전에, WHERE은 조인 후 필터링 한다.

  8. Key란 무엇이고, 종류별로 설명하시오. 기본키, 외래키 설명하시오.
    key : 검색, 정렬 시 튜플 구분 기준이 되는 속성
    1) 슈퍼키 : (유일성 O), 최소성을 만족 못시키는 키
    2) 후보키 : (유일성 & 최소성) 만족시켜 PK의 후보가 되는 키들
    3) 기본키 : (유일성 & 최소성) 만족시켜 PK로 선정된 키. 테이블당 1개만 존재. NULL, 중복 값 X
    4) 외래키 : 참조되는 테이블의 PK와 대응되는 키. null이거나 PK 값과 같은 값을 지녀야 함 

  9. 데이터베이스의 특징 4가지를 설명하시오.
    실시간 접근성,  지속적인 변화,   동시 공유,  내용에 의한 참조 
  10. 데이터 관계들을 설명하시오.
    1. 1:1 - 하나의 레코드는 다른 테이블의 하나의 레코드와 관계
    2. 1:N -하나의 레코드 - 다른 테이블의 여러개 레코드와 관계
    3. M:N - 여러 레코드 여러 레코드 관계
  11. DBMS의 장점 4가지를 설명하시오.
    1. 중복 방지
    2. 유효성 검사
    3. 백업 및 복구
    4. 인터페이스 제공

관련 질문 내용 정리

데이터베이스 기본 질문

✅ 데이터베이스의 특징에 대해 설명해주세요.

1) 실시간 접근성

  • 실시간 처리에 대한 응답 가능

2) 지속적인 변화

  • 데이터베이스 상태가 동적이다.
  • 즉, 새 데이터 삽입/삭제/갱신 등 항상 최신의 데이터를 유지한다.

3) 동시 공용

  • 다수의 사용자가 동시에 같은 내용의 데이터 이용 가능

4) 내용에 의한 참조

  • 데이터베이스에 있는 데이터 참조 시 사용자가 요구하는 데이터 내용 기준 찾음

✅ 데이터베이스 무결성이란?

답변 : 데이터 베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성을 말합니다.

개체 무결성 은 릴레이션에서 기본키를 구성하는 속성은 NULL값이나 중복값을 가질 수 없다.

참조 무결성 은 외래키 값은 NULL이거나 참조 테이블의 기본키 값이어야함

✅ SQL을 설명하고, 데이터베이스 언어 (DDL, DML, DCL) 에 대해 설명해주세요.

SQL 문은 Strutctured Query Language 로서, 관계형 DBMS에서 처리를 돕는 언어입니다.

크게 세 가지 범주로 나뉩니다.

  • Data _ Language

1) DDL 정의어 | Definition

  • 데이터베이스 구조 (테이블 구조)를 정의, 수정, 삭제하는 언어
  • CREATE, ALTER, DROP

2) DML 조작어 | Manipulaion

  • 데이터베이스 내부의 데이터 자료 쿼리, 삽입, 갱신, 삭제 위한 언어

3) MCL 제어어 | Control

  • 데이터 무결성 유지, 병생 수행 제어, 보호 관리 위한 언어
  • commit, rollback, grank, revoke 등

✅ 트리거 (Trigger)에 대해 설명해주세요.

  • 특정 테이블에 대한 이벤트에 반응해 DML 문이 수행되었을 때, 데이터베이스에 자동으로 동작하도록 작성된 프로그램
  • 사용자가 직접 호출 X. 데이터베이스에서 자동 호출한다는 게 가장 큰 특징

✅ 데이터베이스 트리거가 무엇인지 설명하세요.

답변 : 테이블에서 삽입 전, 삽입 후, 업데이트시, 행 삭제시와 같은 이벤트가 발생할 때 자동으로 실행되는 명령 세트를 데이터베이스 트리거라고합니다.

DML(데이터 조작어)가 수행됐을때 데이터베이스에서 자동으로 동작하도록 작성된 프로그램.

✅ 트리거에 대해 설명하고, 트리거를 쓰는 이유에 대해 말하세요.

답변 : 자동으로 실행되도록 정의된 저장 프로시저입니다. INSERT/UPDATE/DELETE문에 대한 응답으로 자동 호출합니다.

트리거를 사용하는 이유

  • 업무 규칙을 보장
  • 업무 처리 자동화
  • 데이터 무결성 강화(변경, 생성, 제거, 복구 시)

✅ SQL Injection 이 무엇인지 설명해주세요.

해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법을 말합니다.

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

✅ SQL Injection을 방어 및 방지하기 위한 방법에 대해 알고 있다면 설명해주세요.

1. 입력값을 검증하여 사용자의 입력이 쿼리에 동적으로 영향을 주는 경우 입력된 값이 개발자가 의도한 값(유효값) 인지 검증합니다.

2. 저장 프로시저를 사용합니다.

※ 저장 프로시저란 .사용하고자 하는 Query에 미리 형식을 지정하는 것을 말한다.

지정된 형식의 데이터가 아니면 Query가 실행되지 않기 때문에 보안성이 크게 향상한다.

✅ SQL Injection이란?

  • 조작된 SQL 쿼리문이 DB에 직접 전달되어 비정상적인 명령을 실행시키는 공격 기법

공격 방법

  • 인증 우회
    • 로그인과 같은 요청에서 보안 취약성을 이용해 DB에 영향을 줄 수 있는 다른 쿼리문을 함께 전송
    • 기본 쿼리문에 WHERE ~ OR '1' = '1' 등과 같이 무조건 실행되는 true문 작성해 조작
  • 데이터 노출
    • 에러 메시지 역이용해 데이터베이스 구조를 유추한 후 해킹에 활용

방어 방법

  • input값 유효성 검사 -> 특수문자 여부 검사
  • SQL과 관련한 서버 에러 메시지 노출하지 않도록 함
  • preparestatement 사용: 특수문자 자동 escape -> 서버 필터링

✅ NoSQL이 기존 RDBMS와 다른 점은?

NoSQL 은 스키마가 없습니다. 즉 데이터 관계와 정해진 규격(table-column의 정의)이 없습니다.

관계 정의가 없으니 Join이 불가능하고 (하지만 reference와 같은 기능으로 비슷하게 구현은 가능)  트랜잭션을 지원하지 않습니다.

분산처리(수평적 확장)의 기능을 쉽게 제공한다는 장점이 있습니다.

대부분의 NoSQL DB는 분산처리기능을 목적으로 나왔기 때문에 분산처리 기능을 자체 프레임워크에 포함하고 있다.

✅ 어떤상황에서 NoSQL을 쓰는 것이 더 적합한가?

답변 : 비정형 데이터를 저장해야할 때 가장 적합합니다.

✅ RDBMS와 NoSQL 차이에 대해 설명해주세요.

1) RDBMS는 모든 데이터를 2차원 테이블 형태로 표현합니다.

장점 : 스키마에 맞춰 데이터를 관리하기 때문에 데이터의 정합성을 보장할 수 있다.

단점 : 시스템이 커질 수록 쿼리가 복잡해지고 성능이 저하되며 Scale-out이 어렵다(Scale-up만 가능)

2) NoSQL(Not Only SQL)은 RDBMS와 반대로 데이터간의 관계를 정의하지 않고, 스키마가 없어 좀 더 자유롭게 데이터를 관리할 수 있으며, 컬렉션이라는 형태로 데이터를 관리합니다.

장점 : 스키마 없이 Key-Value 형태로 데이터를 관리해 자유롭게 데이터를 관리할 수 있다.데이터 분산이 용이하여 성능 향상을 위한 scale-up 뿐만아닌 scale-out 또한 가능하다.

단점 : 데이터 중복이 발생할 수 있고, 중복된 데이터가 변경될 경우 수정을 모든 컬렉션에서 수행해야 한다.스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않아 데이터 구조 결정이 어려울 수 있다.

✅ 그렇다면 RDBMS 와 NoSQL은 각각 어느 경우에 더 적합한가요 ?

RDBMS는 데이터 구조가 명확하고 데이터의 구조적 확장이나 변경이 거의 없는 경우, 즉, 스키마가 중요한 경우 사용한 것이 좋습니다.

→ scale out 불가능.

NoSQL은 정확한 데이터 구조를 알 수 없고, 데이터의 구조적 확장/변경 많이 일어날 경우 사용하는 것이 좋습니다.

→ NoSQL은 scale-out 가능하다는 장점 활용하여 막대한 데이터 저장 할 수 있기 때문

✅ DBMS 정의는 무엇인가요 ?

DBMS는 데이터베이스 관리 시스템을 의미합니다.

사용자가 데이터에 관한 정보를 가능한 효과적으로 접근하고 검색할 수 있도록 지원하는 SW 입니다.

널리 사용되는 DBMS는 MySQL, Oracle 등이 있습니다.

✅ RDBMS는 뭔가요 ?

  • 관계형 데이터베이스 관리 시스템입니다.
  • 별도의 테이블에 데이터를 저장시키는 ‘관계형 데이터 모델’을 기반으로 하며,
  • SQL (Structed Query Language) 사용하여 관계형 DB에서 데이터를 쉽게 액세스 할 수 있습니다.

✅ DBMS의 장점에 대해 설명해주세요.

  1. 데이터가 구조적으로 저장되어 중복성 제어된다.
  2. 입력 한 데이터의 유효성 검사하고, DB에 대한 무단 액세스에 대한 제한을 제공한다.
  3. 필요한 경우 데이터 백업 및 복구 제공한다.
  4. 여러 사용자 인터페이스를 제공한다.

✅ 데이터베이스에서 다양한 유형의 관계는 무엇인가요 ?

데이터베이스에서 테이블 간의 관계는 크게 3가지 있습니다.

  • 일대일 : 한 테이블은 비슷한 종류의 열을 가진 다른 테이블과 관계가 있습니다. 각 기본 키는 관련 테이블에서 하나의 레코드 또는 하나의 레코드와 관련이 없습니다.
  • 일대다 : 한 테이블은 기본 및 외래 키 관계가있는 다른 테이블과 관계가 있습니다. 기본 키 테이블에는 관련 테이블에없는 하나 또는 여러개의 레코드와 관련된 하나의 레코드 만 포함됩니다.
  • 다대다 : 두 테이블의 각 레코드는 다른 테이블의 여러 레코드와 관련 될 수 있습니다.

✅ 'DELETE', 'TRUNCATE'및 'DROP'명령을 구분하십시오.

'DELETE' 연산을 실행 한 후 손실 된 데이터를 검색하기 위해 COMMIT 및 ROLLBACK 문을 수행 할 수 있습니다.

'TRUNCATE' 조작을 실행 한 후 손실 된 데이터를 검색하기 위해 COMMIT 및 ROLLBACK 문을 수행 할 수 없습니다.

'DROP' 명령은 기본 키 / 외래 키와 같은 테이블 또는 키를 삭제하는 데 사용됩니다.

✅ 조인에 대해 설명하고 조인의 종류에 대해 말하세요.

조인은 두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법입니다.

Inner Join 은 2개 이상의 테이블에서 교집합만을 추출

Left Join 은 2개 이상의 테이블에서 from에 해당하는 부분을 추출

Right Join 은 2개 이상의 테이블에서 from과 join하는 테이블에 해당하는 부분을 추출

Outer Join 은 아웃터 조인 또는 풀 조인이라고 말함, 2개 이상의 테이블에서 모든 테이블에 해당하는 부분을 추출

✅ Key란 무엇이고, 종류 별로 설명하시오.

  • 검색, 정렬 시 튜플을 구분할 수 있는 기준이 되는 속성을 말합니다.

1) 후보키

: (유일성과 최소성)을 만족시켜 기본키로 사용할 있는 키를 말합니다.

후보키 중 기본키 제외한 나머지 키는 대체키가 됩니다.

유일성 O 최소성 X : 슈퍼키

2) 기본 키

  • 하나의 테이블에서 특정 튜플 구성할 수 있는 속성입니다.
  • 개체 무결성에 의해 기본키에는 null값과 중복값이 저장될 수 없습니다.
  • 엔티티 식별 대표 키이며 테이블 당 1개만 지정됩니다.

3) 외래 키

  • 참조되는 테이블의 기본키와 대응되어 테이블 간의 참조 관계 표현하는 키
  • 외래 키로 지정되면 참조 무결성에 의해 참조 테이블의 기본키에 없는 값은 입력할 수 없습니다.
  • 두 테이블 간 종속이 필요한 관계라면 그 접점이 되는 컬럼을 FK로 지정하여 관계 매핑시킵니다.

✅ 외래키는 Null 허용 되는가 ?

  • 허용된다.
  • 사원은 하나의 부서를 가지지만, 사원 부서가 아직 미정일 수도 있다.
  1. 외래키 값은 NULL이거나 참조 중인 부모 테이블 기본 키 값과 동일해야 합니다.
  2. 부모 테이블의 기본키, 고유키를 외래키로 지정할 수 있습니다.
  3. 외래키로 지정할 두 테이블 필드는 같은 데이터 타입이어야 합니다.

✅ DBMS Join 원리 종류

join

  • 두 개 이상의 테이블을 하나의 집합으로 만드는 연산(두 테이블 사이에서 수행) 입니다.
  • 자주 사용하는 Join으는 NL Join, Sort Merge Join, Hash Join이 있습니다.

NL Join( Nested Loop Join )

  • 중첩된 반복문과 유사한 방식으로 사용합니다.
  • 랜덤 액세스 방식으로 데이터를 읽습니다.
  • 외부 테이블의 각 행에 대해 내부 테이블을 한 번만 스캔합니다.장점은,처리량이 많을 때 성능상 이점이 있습니다.단점은,정렬에 따른 부담이 있습니다. (메모리 사용 증가)

Sort Merge Join

  • 칼럼을 기준으로 데이터를 정렬하여 조인을 수행합니다.
  • 스캔 방식으로 데이터를 읽습니다.
  • 조인 칼럼의 인덱스를 사용하지 않기 때문에 조인 칼럼의 인덱스가 존재하지 않을 경우데도 사용할 수 있는 기법입니다.
  • 조인 작업을 위해 항상 정렬 작업이 발생하는 것은 아닙니다.

Hash Join

  • 해싱 기법을 이용하여 조인을 수행합니다.
  • 조인을 수행할 테이블의 조인 칼럼을 기준으로 해쉬 함수를 수행하여, 서로 동일한 해쉬 값을 갖는 것들 사이에서 실제 값이 같은지를 비교하면서 조인을 수행합니다.
  • 조인 칼럼의 인덱스를 사용하지 않기 때문에 조인 칼럼의 인덱스가 존재하지 않을 경우데도 사용할 수 있는 기법입니다.
  • 해쉬 함수를 이용하여 조인을 수행하기 때문에 '='로 수행하는 조인에서만 사용가능 합니다.
  • 해쉬함수를 적용한 값은 어떤 값으로 해슁될 지 알 수 없습니다.
  • 해쉬 함수가 적용될 때 동일한 값은 항상 같은 값으로 보장됩니다.
  • But. 큰값이 항상 큰값으로 해슁되고 작은 값이 항상 작은 값으로 해슁된다는 보장은 없습니다.

✅ JDBC (Java Database Connectivity), ODBC (Open DataBase Connectivity) 차이

JDBC란,

Java가 Database를 사용할 수 있도록 연결해주는 응용프로그램 인터페이스인 JAVA API 입니다.

이 응용프로그램 인터페이스는 데이터베이스 관리 시스템에 넘겨질 SQL 형태의 데이터베이스 접근요구 문장을, 각 시스템에 맞도록 바꾸는 역할을 합니다.

API는 동적으로 올바른 Java 패키지를 로드하고, JDBC 드라이버 매니저에 등록하기 위한 메커니즘을 제공합니다. 드라이버 매니저가, JDBC connection을 생성하기 위한 connection factory로서 사용됩니다.

ODBC는,

데이터베이스를 액세스하기 위한 표준 개방형 응용 프로그램 인터페이스를 말합니다.

마이크로소프트사에 의해 만들어진, 데이터베이스에 접근하기 위한 소프트웨어의 표준 규격으로, 프로그램 내에 ODBC 문장을 사용하면 MS-Access, dBase, DB2, Excel, Text 등의 여러 종류의 데이터베이스에 접근 할 수 있습니다.

✅ DDL, DML, DCL?

DDL (Data Definition Language) 이란,

객체의 생성, 변경, 삭제 명령어를 뜻합니다. 예를 들어, create, alter, drop, rename 등이 있습니다. schema, domain, table, view, index를 정의, 변경, 삭제할 때 사용하는 언어입니다.

주로 데이터베이스 관리자나 데이터 베이스 설계자가 사용합니다. 데이터 정의어는 3가지 유형으로 craete, alter, drop이 있습니다.

DML (Data Manipulation Language) 이란,

레코드 제어 명령어 입니다. 예를 들어, select, insert, update, delete 등이 있습니다. 데이터 베이스 사용장와 데이터 베이스 관리 시스템 간의 인터페이스를 제공합니다.

데이터 베이스 사용자가 응용 프로그램이나 질의어를 통합니다. 저장된 데이터를 실질적으로 처리하는 데 사용하는 언어입니다. 데이터 조작어는 4가지 유형으로 select, insert, delete, update가 있습니다.

DCL (Data Control Language) 이란,

객체 권한 부여 등의 제어어 입니다. 데이터의 보안, 무결성, 데이터 회복, 병행 수행 제어 등을 정의하는 데 사용하는 언어입니다.

데이터 베이스 관리자가 데이터 관리를 목적으로 사용합니다. 데이터 제어어의 종류로는 commit, rollback, grant, revoke 등이 있습니다.

  • DDL, DML, DCL은 모두 SQL 언어라는 공통점이 있습니다.
  • DDL은 데이터와 그 구조를 정의한다는 점이 있습니다.
  • DML는 데이터의 검색, 수정, 삭제 등을 처리합니다.
  • DCL은 데이터 베이스의 사용자 권한을 제어한다는 점에서 차이가 있습니다.

✅ KEY ?

key란 검색, 정렬 시 tuple을 구분할 수 있는 기준이 되는 attribute입니다.

  • candidate key : tuple을 유일하게 식별하기 위해 사용되는 속성들의 부분 집합입니다. key로 하나의 tuple을 유일하게 식별할 수 있는 "유일성"과 꼭 필요한 속성으로만 구성되는 "최소성" 조건을 만족합니다.
  • primary key : 후보키 중 선택한 main key입니다. null 값을 가질 수 없고, 동일한 값이 중복될 수 없습니다.
  • alternative key : 후보키 중 기본키를 제외한 나머지 키입니다(=보조키)
  • super key : 유일성은 만족하지만, 최소성은 만족하지 못하는 키입니다.
  • foreign key : 두 테이블을 서로 연결하는 데 사용하는 키입니다.

쿼리 관련 질문

✅ SELECT 쿼리의 수행 순서를 알려주세요

FROM, ON, JOIN > WHERE, GROUP BY, HAVING > SELECT > DISTINCT > ORDER BY > LIMIT

1) FROM 으로 각 테이블을 확인한다.

→ ON으로 조인 조건 확인

→ JOIN 실행되어 여러 테이블 데이터들 모은다.

2) WHERE 제약 조건 확인한다.

→ GROUP BY로 WHERE 조건 적용 후 공통값 추출 묶는다.

→ HAVING 절로 GROUP BY 절에 대한 제한 적용한다

→ SELECT 표현식이 마지막으로 적용되어 추출한다.

3) DINTINCT로 추출한 값의 중복 행 제거한다.

4) ORDER BY로 추출된 데이터의 정렬을 수행한다.

→ LIMIT에 벗어나는 행동 제외시키고 출력한다.

✅ Inner Join과 Outer Join 차이 설명해주세요.

1) 내부 조인은 서로 연관된 내용만 추출하는 조인 방법입니다.

A와 B에 대해 내부 조인 수행 시, A와 B의 교집합이 추출됩니다.

2) 외부 조인은 한 쪽에는 데이터가 있고, 한 쪽에는 데이터가 없는 경우,

데이터가 있는 쪽의 내용을 전부 출력하는 방법입니다.

외부 조인에는 LEFT, RIGHT, FULL Outer JOIN 등이 있습니다.

✅ GRUOP BY 역할에 대해 설명해주세요.

GROUP BY 명령어를 통해 특정 컬럼을 기준으로 그룹화시키는 역할을 합니다.

그룹별로 출력하기 때문에, DISTINCT 와 같이 중복 데이터를 제거하는 특징이 있습니다.

✅ DELTE, TRUNCATE, DROP 차이 설명해주세요.

DELETE는 테이블이 아닌, 데이터를 지우고, 원하는 데이터만 골라서 지울 수 있다. 삭제 후 되돌릴 수 있다.

TRUNCATE 는 전체 데이터를 한 번에 삭제하는 방식이다. 테이블은 삭제될 수 없고, 삭제 후 되돌릴 수 없다.

DROP은 테이블 자체를 완전히 삭제하는 방식이고, 삭제 후 되돌릴 수 없다.

✅ HAVING과 WHERE 차이를 설명해주세요.

  • HAVING은 (GROUP BY)로 그룹화시킨 내용을 필터링하는데 사용되고,
  • WHERE은 개별 행을 필터링 하는데 사용합니다.
  • having은 그룹화 또는 집계가 발생한 후 필터링하는데 사용되고, where은 그룹화 또는 집계가 발생하기 전에 필터링하는데 사용됩니다.

→ having 절에는 집계함수 (COUNT, SUM, MAX, MIN)을 함께 사용 가능하지만,

WHERE절에는 사용 불가능하다. (WHERE 절이 GROUP BY절보다 먼저 수행됨)

✅ JOIN의 ON과 WHERE 차이를 설명해주세요.

ON이 WHERE보다 먼저 실행된다.

1) ON 조건으로 필터링된 상태에서 JOIN이 실행되고,

2) WHERE은 JOIN 한 결과에다가 필터링을 한다.

✅ 테이블을 드롭(DROP)하는 것과 자르는 것(Truncate), 그리고 테이블 내 모든 레코드를 삭제(Delete)하는 것의 차이점은 무엇입니까?

답변 : DELETE TABLE은 로그되는 작업이기 때문에 삭제되는 각 행은 트랜잭션 로그에 기록되고 이것은 작업을 느리게 합니다. TRUCATE TABLE 역시 테이블 내 행들을 삭제하지만 삭제되는 각 행을 기록하지 않고 대신 테이블의 데이터베이스 할당 해제를 기록하여 작업이 빠릅니다. TRUNCATE TABLE는 롤백할 수 없습니다.

DELETE 명령어는 데이터는 지워지지만 테이블 용량은 줄어들지 않는다. 원하는 데이터만 지울 수 있다. 삭제 후 RollBack 가능하다.

TRUNCATE 명령어는 용량이 줄어들고, 인덱스 등도 모두 삭제된다. 테이블은 삭제하지는 않고 데이터만 삭제한다. 한꺼번에 다 지워야 한다. 삭제 후 절대 되돌릴 수 없다.

DROP 명령어는 테이블 전체를 삭제,공간, 객체를 삭제한다. 삭제 후 절대 되돌릴 수 없다.

728x90