SQL(구조적 질의어)이란 무엇인가?
SQL(Structured Query Language)은 데이터베이스 관리자와 데이터 분석가가 데이터베이스에서 정보를 검색하고 조작하기 위해 사용하는 표준화된 프로그래밍 언어입니다. SQL은 웹사이트, 모바일 앱 및 다양한 플랫폼에서 광범위하게 사용됩니다.
SQL은 데이터베이스 내의 데이터를 접근하고 수정하는 데 핵심적인 역할을 합니다. 여기에는 테이블과 열을 만들고 수정하는 것은 물론, SQL 명령을 사용하여 특정 데이터를 쿼리하는 작업이 포함됩니다.
만약 SQL 인터뷰를 준비하고 있다면, 이 글이 당신에게 도움이 될 것입니다. 특히 데이터 엔지니어, 데이터 분석가, 데이터베이스 관리자 등의 직무 인터뷰에서 자주 등장하는 질문들을 다루고 있습니다.
기본적인 SQL 명령어
가장 기본적이면서 중요한 SQL 명령어는 다음과 같습니다.
- SELECT: 데이터베이스에서 데이터를 추출합니다.
- CREATE TABLE: 새로운 테이블을 생성합니다.
- DELETE: 데이터베이스에서 데이터를 삭제합니다.
- INSERT INTO: 데이터베이스에 새로운 데이터를 삽입합니다.
- ALTER DATABASE: 데이터베이스의 구조를 수정합니다.
- CREATE DATABASE: 새로운 데이터베이스를 생성합니다.
- UPDATE: 데이터베이스에 저장된 데이터를 업데이트합니다.
SQL의 4가지 핵심 문
SQL 문은 다음과 같은 주요 범주로 나눌 수 있습니다.
- 데이터 정의 언어 (DDL) 문
- 데이터 조작 언어 (DML) 문
- 데이터 제어 언어 (DCL) 문
- 트랜잭션 제어 언어 (TCL) 문
SQL에서 기본 키의 역할
기본 키는 데이터베이스 테이블의 각 행을 고유하게 식별하는 데 사용되는 열(또는 열 조합)입니다. SQL 데이터베이스에서 기본 키는 매우 중요한 역할을 하며, 각 행에 고유한 ID를 부여합니다. 기본 키는 하나 이상의 필드로 구성될 수 있으며, 테이블당 하나의 기본 키만 존재할 수 있습니다.
SQL 데이터 유형
데이터 유형은 저장할 수 있는 데이터의 종류를 정의하는 속성입니다. 예를 들어, 숫자 데이터, 문자 데이터, 날짜 및 시간 데이터, 이진 문자열 등이 있습니다.
SQL에서는 데이터 유형을 다음과 같이 분류합니다.
- 정확한 숫자
- 근사치 숫자
- 날짜 및 시간
- 문자열
- 유니코드 문자열
- 이진 문자열
SQL Server에서 사용자 이름 및 비밀번호 저장 위치
SQL Server에서 사용자 이름과 비밀번호는 각각 sys.server_principals 테이블과 sys.sql_logins 테이블에 저장됩니다. 비밀번호는 일반 텍스트 형태로 저장되지 않고 암호화되어 저장됩니다.
SQL 인젝션 공격
SQL 인젝션은 가장 흔한 사이버 공격 중 하나입니다. 악의적인 사용자가 응용 프로그램의 데이터베이스를 조작하여 데이터에 접근하는 것을 의미합니다. 이는 재정적 손실에서 민감한 정보 유출까지 심각한 결과를 초래할 수 있습니다. SQL 인젝션 공격을 방지하는 가장 좋은 방법은 공격 자체를 예방하는 것입니다.
SQL 트리거의 정의 및 종류
트리거는 데이터베이스 서버에서 특정 이벤트가 발생할 때 자동으로 실행되는 특별한 종류의 저장 프로시저입니다. 트리거는 DDL 및 DML 문을 사용하여 데이터 수정 전후에 데이터를 평가하는 데 사용됩니다.
트리거는 다음과 같이 세 가지 주요 유형으로 나눌 수 있습니다.
- LOGON 트리거: 사용자가 로그인할 때 시작됩니다.
- DDL 트리거: CREATE, ALTER, DROP과 같은 DDL 명령이 실행될 때마다 작동합니다.
- DML 트리거: INSERT, UPDATE, DELETE와 같은 DML 명령이 실행되어 데이터가 수정될 때 작동합니다.
단일 행 함수와 다중 행 함수의 차이
단일 행 함수는 테이블의 각 행에 대해 한 번에 하나씩 적용되며, 각 행에 대한 결과를 반환합니다. 대표적인 예로 길이 함수나 대소문자 변환 함수가 있습니다.
다중 행 함수는 여러 행을 입력으로 받아 단일 결과를 반환하는 함수입니다. 이러한 함수는 그룹 함수라고도 합니다.
데이터베이스 정규화 및 4가지 주요 유형
데이터베이스 정규화는 데이터 중복을 줄이고 데이터에 더 빠르게 접근할 수 있도록 데이터를 구성하는 프로세스입니다. 정규화 과정에서 데이터베이스의 열과 테이블은 데이터베이스 무결성 제약 조건을 충족하도록 구성됩니다.
데이터베이스 정규화는 일반적으로 다음과 같은 4가지 형태로 이루어집니다.
- 제1정규형 (1NF)
- 제2정규형 (2NF)
- 제3정규형 (3NF)
- 보이스-코드 정규형 (BCNF) 또는 제4정규형 (4NF)
SQL 인덱스와 제약 조건
인덱스는 SQL에서 데이터 검색 속도를 높이는 데 중요한 역할을 합니다. 인덱스를 사용하면 대규모 데이터베이스에서 특정 데이터를 빠르게 찾을 수 있습니다. 제약 조건은 데이터베이스가 특정 규칙을 따르도록 하여 데이터의 무결성을 유지하는 데 도움을 줍니다.
인덱스는 쿼리 성능을 향상시키는 데 기여하며, 테이블 내 데이터의 가독성을 높이는 데도 도움이 됩니다.
제약 조건은 테이블에 입력할 수 있는 데이터 유형을 제한합니다. 이를 통해 테이블에 있는 데이터의 정확성과 신뢰성을 보장합니다. 제약 조건에 위배되는 데이터 작업은 중단됩니다.
자주 사용되는 SQL 제약 조건
자주 사용되는 SQL 제약 조건은 다음과 같습니다.
- CREATE INDEX: 테이블에 대한 인덱스를 생성하여 데이터 검색을 간소화합니다.
- FOREIGN KEY: 테이블 간의 관계를 설정하기 위해 사용되는 외래 키입니다.
- DEFAULT: 특정 열에 값이 제공되지 않았을 때 기본값을 설정합니다.
- UNIQUE: 열의 모든 값이 고유해야 함을 지정합니다.
- PRIMARY KEY: 테이블의 각 행을 고유하게 식별하는 기본 키입니다.
- NOT NULL: 열에 NULL 값이 허용되지 않도록 합니다.
- CHECK: 열의 값이 특정 조건을 충족하는지 확인합니다.
SQL에서 NULL 값의 의미
SQL에서 NULL 값은 값을 사용할 수 없거나 할당되지 않은 상태를 의미합니다. NULL 값은 공백(‘ ‘)이나 0과는 다릅니다. NULL 값은 다른 값과 비교할 수 없으므로 ‘=’, ‘>’, ‘<‘와 같은 비교 연산자를 사용할 수 없습니다.
SQL 인젝션 공격 예방 방법
SQL 인젝션 공격을 방지하기 위해서는 입력 유효성 검사, 삭제, 준비된 명령문 및 매개변수화된 SQL 쿼리와 같은 보안 방법들을 적용해야 합니다. 또한 방화벽과 같은 추가적인 보안 도구도 도움이 될 수 있습니다.
동적 SQL 및 사용 시점
동적 SQL은 런타임에 쿼리를 수정할 수 있는 기능으로, 현재 날짜, 시간 또는 기타 기준에 따라 쿼리를 변경할 수 있습니다. 동적 SQL을 사용하면 쿼리를 유연하게 변경하여 특정 목표를 달성하거나 프로그래밍 기술을 향상시킬 수 있습니다.
SQL 키의 다양한 유형
기본 키: 각 행을 고유하게 식별하는 필드입니다. 중복된 값을 가질 수 없고 NULL 값을 포함할 수 없습니다.
외래 키: 다른 테이블의 기본 키를 참조하는 필드로, 테이블 간의 관계를 설정하는 데 사용됩니다. 기본 키를 가진 테이블을 부모 테이블, 외래 키를 가진 테이블을 자식 테이블이라고 합니다.
슈퍼 키: 테이블의 행을 식별하는 데 사용할 수 있는 하나 이상의 속성 집합입니다. 모든 속성이 레코드를 식별하는 데 필요한 것은 아닙니다.
후보 키: 슈퍼 키의 하위 집합으로, 레코드를 식별하는 데 필요한 모든 속성을 포함합니다.
복합 키: 두 개 이상의 열의 조합으로 구성된 키입니다. 다른 속성이나 열이 포함된 기본 키입니다.
SQL 인덱스의 종류
SQL의 인덱스는 다음과 같은 다양한 유형이 있습니다.
- 해시 인덱스
- 메모리 최적화 인덱스
- 클러스터형 인덱스
- 비클러스터형 인덱스
- 고유 인덱스
- 열 저장소 인덱스
- 포함된 열이 있는 인덱스
- 계산된 열의 인덱스
- 필터링된 인덱스
- 공간 인덱스
- XML 인덱스
- 전체 텍스트 인덱스
버퍼 풀의 의미 및 이점
버퍼 풀은 SQL 서버에서 캐시된 데이터 페이지를 저장하는 메모리 영역입니다. 버퍼 풀의 크기는 설정 시 지정할 수 있으며, 버퍼 풀이 클수록 더 많은 페이지를 캐시에 저장할 수 있습니다.
버퍼 풀의 주요 이점은 다음과 같습니다.
- I/O 성능 향상
- 트랜잭션 처리량 증가
- I/O 지연 감소
- 읽기 성능 향상
의존성의 의미 및 유형
SQL에서 의존성은 한 객체가 다른 객체를 참조할 때 설정됩니다. 객체가 SQL 식에 나타나는 경우를 ‘참조된 엔터티’라고 하고, SQL 식을 포함하는 객체를 ‘참조 엔터티’라고 합니다.
SQL의 주요 의존성 유형은 다음과 같습니다.
- 함수적 의존성
- 완전 함수적 의존성
- 다중값 의존성
- 전이 의존성
- 부분 의존성
SQL 조인의 의미 및 주요 유형
SQL 조인은 두 개 이상의 테이블에서 데이터를 결합하여 단일 결과를 생성하는 방법입니다. 조인은 데이터 분석에 유용하며, 특정 기준에 따라 결과를 필터링할 수 있습니다.
SQL 조인에는 INNER JOIN, OUTER JOIN, CROSS JOIN 및 SELF JOIN의 네 가지 주요 유형이 있습니다.
SQL 집합 연산자
SQL 집합 연산자는 두 개 이상의 테이블에 있는 데이터를 결합하는 데 사용됩니다. 집합 연산자는 SQL 조인과 유사하지만, 집합 연산자는 다른 쿼리에서 레코드를 수집하는 반면 조인은 다른 테이블의 열을 결합합니다.
결론
이 글이 SQL 인터뷰를 준비하는 데 도움이 되었기를 바랍니다. SQL 환경에 대한 더 많은 경험을 쌓고, SQL 쿼리를 연습하며 지속적으로 학습하는 것이 중요합니다. SQL 치트 시트나 SQL 연습 플랫폼을 참고하여 실력을 향상시키세요.
SQL 치트 시트를 방문하여 SQL 문에 대한 자세한 정보를 얻으십시오.
SQL 실습 플랫폼을 확인하여 실무 경험을 얻으십시오.