SQLD 자격증 2시간 집중강의 - [비전공자 1주일 합격패스] - 메타코드M
2026년 11월 9일 공유
한눈에 보기1. SQLD 시험은 실력보다 합격 점수(60점) 확보가 우선이다.• 배점이 높은 SQL 기본 및 활용(80%)에 집중하고, 데이터 모델링(20%)은 과락(40% 미만) 방지용으로 암기한다.2. 문제 은행식 출제 경향을 공략해야 한다.• 과거 2~3년 치 기출문제를 반드시 풀고, '노랭이' 문제집은 해설 위주로 암기하여 난이도 차이를 극복한다.3. 데이터 모델링 핵심 이론은 단순 암기가 필수다.• 개논물(개념·논리·물리), 추단명(추상화·단순화·명확화), 유체불존(유일성·최소성·불변성·존재성) 등 주요 개념을 암기한다.4. SQL 기본 문법과 함수는 실습과 병행하여 익힌다.• SELECT, FROM, WHERE 구문과 문자·숫자·날짜·형변환 함수를 숙지하고, 필요시 SQL 캠프 등을 통해 직접 코딩해 본다.
0. 학습 목표
- SQLD 시험의 과목 구성과 합격 전략을 파악한다.
- 데이터 모델링의 핵심 개념과 정규화·반정규화의 원리를 구분한다.
- 관계형 데이터베이스와 SQL의 기본 개념, SELECT문 및 주요 함수의 사용법을 익힌다.
1. SQLD 시험 구성과 합격 전략
🌐 외부 리서치SQLD 시험 전에 알아둘 기초 개념 3가지#배경지식 #데이터 모델링이 강의는 데이터베이스를 처음 접하는 비전공자라면 표와 키 같은 기초 용어를 익히는 데서 막힐 수 있다는 점을 전제로 해요. 먼저 표를 이루는 행·열과 행을 찾는 키를 이해하고, 그다음 중복을 줄이도록 표를 나누는 정규화와 조회 편의를 위해 일부러 합치는 반정규화로 이어져요.• 엔터티는 표 하나예요.• 강의의 고객 표를 떠올려 보세요. 표 전체가 엔터티(Entity)예요.• 표의 가로 한 줄은 고객 한 명의 정보인 인스턴스(행)이고,고객 번호,이름,거주 지역처럼 세로로 놓인 칸은 속성(열)이에요.• 이렇게 표·행·열의 관계를 잡으면, 뒤에 나오는 키와 정규화도 같은 표를 바탕으로 이해할 수 있어요.• 속성은 열이고, 한 칸에는 값 하나를 담아요.• 예를 들어 고객 표의이름열에는 한 고객의 이름 하나가 들어가요.• 강의는 한 속성에 여러 값이 한꺼번에 들어가면 안 된다고 설명해요.과목 코드열에101, 103을 함께 넣기보다, 과목마다 행을 나눠 각 칸에 값 하나씩 넣는 방식이에요.• 이 규칙이 정규화의 출발점이 돼요. 한 칸에 값이 여럿 들어 있으면 검색·수정할 때 다루기 어려워져요.• 식별자는 행을 구분하는 키예요.• 이름은 동명이인이 있을 수 있어서 고객 행을 확실히 구분하지 못해요. 반면고객 번호처럼 각 고객에게 서로 다르게 부여한 값은 행을 찾는 기준이 될 수 있어요.• 이런 대표 열을 주식별자 또는 기본 키(PK)라고 해요. 강의에서는 기본 키 값은 서로 중복되지 않고 비어 있지 않아야 한다고 설명해요.• 즉, 표가 엔터티라면 행은 인스턴스이고, 식별자는 그중 원하는 행을 정확히 가리키는 열이에요.• 정규화는 중복을 줄이도록 표를 나누고, 반정규화는 조회를 위해 일부러 합치는 선택이에요.• 제1정규형에서는 한 칸에 값 하나만 두도록 정리해요. 예를 들어 고객 표의주문 번호칸에 여러 번호가 들어 있다면, 주문마다 행을 나누거나 고객과 주문 정보를 별도 표로 관리해요.• 더 나아가 같은 고객 이름이 주문마다 반복된다면 고객 번호와 이름은 고객 표에 한 번 저장하고, 주문 표에는 고객 번호를 연결해 둘 수 있어요. 그러면 이름을 바꿀 때 여러 행을 찾아 고칠 필요가 줄어요.• 다만 표를 나누면 정보를 다시 묶어 읽을 때 조인(표들을 연결해 조회하는 작업)이 필요할 수 있어요. 그래서 조회가 느려지는 문제가 중요할 때는 반정규화로 일부 데이터를 중복 저장하거나 표를 합쳐 조인을 줄이기도 해요. 이때 수정할 곳이 늘고 값이 서로 달라질 위험도 커져요.
1. 시험은 데이터 모델링 과목과 SQL 과목으로 구성되며, 합격을 위해서는 총점과 과락 기준을 모두 충족해야 한다.
1. 시험은 데이터 모델링의 이해 10문제와 SQL 기본 및 활용 40문제, 총 50문제로 구성된다.
2. 합격 기준은 총점 60점 이상이고, 과목별 점수가 40% 미만이면 과락이다.
3. 데이터 모델링의 이해는 전체 배점의 20%, SQL 기본 및 활용은 80%이므로, 전체 점수를 올리려면 SQL 과목에 더 많은 시간을 투자하는 것이 유리하다.
4. 다만 데이터 모델링 과목에서 과락하면 SQL 과목을 잘 보더라도 탈락할 수 있다. 따라서 데이터 모델링에서 10문제 중 최소 4문제는 맞혀야 한다.
2. 데이터 모델링은 단기간에 암기하고, SQL은 이해도와 남은 시간에 맞춰 공부한다.
1. 데이터 모델링은 엔터티, 속성, 관계, 식별자 등 큰 주제별로 문제가 나오는 편이며, 강의에서 짚는 내용을 암기하는 방식으로 준비할 수 있다.
2. SQL은 전공자에게 익숙할 수 있지만 비전공자에게는 처음 접하는 내용이 많아 어려울 수 있다.
3. 시간이 부족하면 일단 핵심 내용을 암기하고, 여유가 있으면 집에서 SQL을 설치해 직접 실행해 보며 익히는 방식이 권장된다.
3. 목표 점수는 100점이 아니라 합격선인 60점으로 잡고, 기출문제와 문제집을 활용한다.
1. 강사는 실제 SQL 업무를 하는 전공자였지만 시험에서 100점을 받지는 못했다고 설명하며, 시험 실력과 실제 업무 능력이 반드시 일치하지 않을 수 있다고 말한다. 따라서 우선 합격을 목표로 시간 배분을 해야 한다.
2. 시험에는 과거 기출문제가 다시 나오는 경우가 있으므로, 강사는 시험 전 인터넷에 공개된 2~3년 치 기출문제를 보고 가라고 권한다. 강사 본인의 기억으로는 기출에서 두세 문제가 거의 그대로 출제됐다.
3. 한국데이터산업진흥원이 만든 『SQL 자격검정 실전 문제』는 흔히 ‘노랭이’라고 부른다. 강사는 이 문제집이 실제 시험보다 어렵지만, 문제 자체가 그대로 나온 경우도 있었다고 설명한다.
1. 문제를 풀고 어렵다고만 느끼기보다는, 해설을 읽고 암기하는 방식으로 공부하면 도움이 된다.
2. 모르는 내용은 질문할 수 있고, 네이버의 SQLD 준비 카페에서도 질문·답변과 자료를 참고할 수 있다.
4. 시험까지 시간이 많이 남았거나 SQL 실습 능력도 기르고 싶은 사람에게는 강사가 제작한 메타코드의 SQL 실습 강의·캠프를 참고할 수 있다고 안내한다.
1.1 데이터 모델링 과목의 학습 방향
1. 데이터 모델링 과목은 암기 비중이 높지만, 과락을 피할 수 있도록 기본 내용을 빠뜨리지 않아야 한다.
1. 데이터 모델링의 이해에는 데이터 모델, 엔터티, 속성, 관계, 식별자, 정규화와 반정규화, 조인, 트랜잭션, NULL 속성, 본질 식별자와 인조 식별자 등이 포함된다. 강의에서는 이 범위에서 10문제가 나온다고 설명한다.
2. SQL 기본 및 활용의 비중이 더 크므로 그쪽에 집중하되, 데이터 모델링 과목에서 암기하지 않아 틀리는 문제는 없도록 준비하는 것이 좋다.
3. 강사는 데이터 모델링 내용을 단순 암기로 정리할 수 있다고 보고, 오히려 이 부분을 더 집중해 암기했던 경험을 말한다.
2. 데이터 모델링의 이해
2.1 데이터 모델링의 의미와 세 가지 특징
1. 데이터 모델링은 복잡한 현실 세계를 단순한 형태로 표현하는 방법이다.
1. 현실에는 다양한 데이터가 있지만, 데이터베이스에서는 이를 행과 열로 된 2차원 테이블에 담는다. 따라서 데이터 모델링은 현실의 복잡한 모습을 사람들이 알아보기 쉽도록 단순화해 표현하는 기법이다.
2. 시험에서는 데이터 모델링의 정의나 설명 중 틀린 것을 고르는 문제가 나올 수 있으므로, 정의의 뜻을 이해해야 한다.
2. 데이터 모델링의 세 가지 특징은 추상화·단순화·명확화이다.
1. 추상화는 현실 세계를 일정한 형식으로 표현하는 것이다.
2. 단순화는 복잡한 내용을 단순하고 쉽게 표현하는 것이다.
3. 명확화는 누구나 이해할 수 있도록 불분명한 점을 없애는 것이다.
4. 강사는 세 특징을 ‘추명’ 등으로 기억하는 방법을 소개하지만, 핵심은 세 용어와 각각의 뜻을 암기하는 것이다.
3. 연습문제에서는 특징의 이름과 설명이 맞는지 확인한다.
1. ‘복잡한 개념을 더 복잡하게 표현한다’는 단순화의 설명이 아니다.
2. ‘누구나 이해할 수 있도록 분명함을 제거한다’는 명확화의 설명이 아니다.
3. 제시된 문제의 정답은 2번이다.
2.2 데이터 모델링의 세 가지 관점과 유의 사항
1. 데이터 모델링은 데이터 관점, 프로세스 관점, 데이터와 프로세스의 상관 관점으로 살펴본다.
1. 데이터 관점은 업무와 관련된 데이터가 무엇이며, 데이터끼리 어떤 관계를 맺는지 살펴본다.
2. 프로세스 관점은 업무가 실제로 무엇을 처리하는지 살펴본다.
3. 데이터와 프로세스의 상관 관점은 프로세스의 흐름에 따라 데이터가 어떤 영향을 받는지, 데이터와 프로세스가 어떤 관계를 맺는지 살펴본다.
4. 강사는 짧은 기간에 넓은 범위를 공부하는 시험이므로, 모든 내용을 깊게 이해하려 하기보다 개념을 암기하고 문제에 적용하는 것도 중요하다고 조언한다.
2. 데이터 모델링에서는 중복·비유연성·비일관성을 유의해야 한다.
1. 중복을 피해야 한다. 같은 데이터가 여러 번 저장되면 불필요한 중복이 생기기 때문이다.
2. 데이터 모델과 프로세스는 유연하게 설계해야 한다. 새 기능이 생기거나 테이블을 수정해야 할 때 변경과 유지보수가 쉬워야 한다.
3. 비일관성을 피해야 한다. 다른 데이터와의 연관성을 고려하여 한 방향으로 일관되게 모델링해야 한다.
3. 연습문제는 각 관점과 유의 사항의 뜻을 구분할 수 있는지 확인한다.
1. 업무와 관련된 데이터 및 데이터 간 관계를 파악하는 것은 데이터 관점이다. 따라서 ‘데이터 관점은 데이터를 단순히 저장하는 방법을 설명한다’는 설명은 적절하지 않다. 문제의 정답은 4번이다.
2. ‘유지보수를 어렵게 설계한다’는 비유연성에 대한 설명으로 적절하지 않다. 유지보수를 쉽게 하도록 설계해야 한다. 문제의 정답은 2번이다.
2.3 데이터 모델링의 세 단계
1. 데이터 모델링의 단계는 개념적·논리적·물리적 모델링 순서이다.
1. 세 단계는 개념적 데이터 모델링, 논리적 데이터 모델링, 물리적 데이터 모델링이다. 강사는 ‘개논물’로 기억하는 방법을 제시한다.
2. 개념적 모델링은 전사적 관점에서 수행하며, 세 단계 중 추상화 수준이 가장 높다.
3. 논리적 모델링은 데이터베이스의 키, 속성, 관계 등을 표현하고 결정하는 단계이다.
4. 물리적 모델링은 실제 데이터베이스로 구현할 수 있도록 성능 등을 고려하는 단계이다.
2. 연습문제에서는 각 단계의 설명을 서로 바꾸어 놓은 보기를 구분한다.
1. 데이터베이스의 물리적 저장 구조를 정리하는 단계는 개념적 모델링이 아니다.
2. 키·속성·관계를 표현하는 단계는 논리적 모델링이다.
3. 데이터 모델을 개념적으로 설명하는 단계와 물리적 구조를 다루는 단계는 각각 논리적·물리적 모델링의 설명과 구분해야 한다. 문제의 정답은 2번이다.
2.4 데이터 독립성과 세 가지 스키마
1. 데이터 독립성을 이해하려면 외부 스키마·개념 스키마·내부 스키마의 층위를 기억해야 한다.
1. 데이터 독립성은 외부 스키마, 개념 스키마, 내부 스키마의 관계와 관련된다. 강사는 세 스키마의 그림과 순서를 기억하라고 권한다.
2. 외부 스키마는 사용자의 관점에서 보는 데이터베이스 구조이다. 예를 들어 카카오톡 사용자가 애플리케이션을 통해 접근하는 데이터베이스의 모습을 가리킨다.
3. 개념 스키마는 모든 사용자가 보는 데이터베이스의 전체 구조이다. 프로그램 사용자뿐 아니라 개발자 등 그 시스템을 사용하고 개발하는 사람들이 공유하는 관점이다.
4. 내부 스키마는 데이터베이스의 물리적 관점이다. 실제 저장 구조, 컬럼, 인덱스 등을 정의한다.
5. 세 스키마의 독립성은 한 층의 변경이 다른 층에 영향을 주지 않는 것을 뜻한다.
1. 논리적 독립성은 외부 스키마와 개념 스키마 사이의 독립성이다. 개념 스키마가 변경되어도 외부 스키마에는 영향이 없다.
2. 물리적 독립성은 내부 스키마가 변경되어도 개념 스키마가 바뀌지 않는 것이다. 따라서 외부 스키마에도 영향이 이어지지 않는다.
2. 연습문제에서는 각 스키마가 바라보는 관점과 독립성의 방향을 확인한다.
1. 외부 스키마는 물리적 저장 구조가 아니며, 특정 사용자의 관점과도 구분된다.
2. 개념 스키마는 모든 사용자가 보는 데이터베이스 구조를 정의한다. 문제의 정답은 4번이다.
3. 논리적 독립성은 개념 스키마가 바뀌어도 외부 스키마가 바뀌지 않는 관계이다. 강의의 문제 정답은 4번이다.
2.5 엔터티의 뜻과 특징
1. 엔터티(Entity)는 데이터베이스에서 관리하는 테이블과 같은 단위이며, 테이블의 행과 열에도 각각 이름이 있다.
1. 엔터티는 표 전체에 해당한다.
2. 인스턴스(instance)는 표의 한 행(row)이다. 같은 표 안에서 한 줄씩 구분되는 개별 데이터이다.
3. 속성(attribute)은 표의 한 열(column)이다. 고객 번호, 이름, 거주 지역 등이 속성의 예이다.
2. 엔터티는 업무에 필요한 정보를 담고, 각 데이터를 구분하며, 충분한 속성과 관계를 갖춰야 한다.
1. 엔터티는 업무에 실제로 필요한 정보로 구성해야 한다. 예를 들어 카카오톡 서비스의 테이블에 업무와 관련 없는 우주의 크기 정보가 들어갈 필요는 없다.
2. 엔터티에는 유일한 식별자가 있어야 한다. 예를 들어 고객 번호처럼 각 인스턴스를 구분할 수 있는 값이 필요하다.
3. 엔터티에는 두 개 이상의 인스턴스가 있어야 한다.
4. 엔터티에는 한 개 이상의 속성이 있어야 한다. 속성은 표의 열에 해당한다.
5. 엔터티는 다른 엔터티와 한 개 이상의 관계를 유지해야 한다. 예를 들어 고객 정보가 있는 테이블은 고객의 주문 내역을 담는 테이블과 연결될 수 있다.
3. 엔터티 이름은 업무에서 쓰는 용어를 사용하고, 중복 없이 정해진 표기 규칙을 따라야 한다.
1. 업무에서 실제로 사용하는 용어를 사용한다. 예를 들어 고객 정보를 담는 표라면 업무에 맞는 이름을 붙인다.
2. 다른 엔터티와 이름이 중복되어서는 안 된다. 이름이 중복되면 SQL로 특정 테이블을 요청할 때 어느 테이블인지 분명히 하기 어렵다.
3. 영문은 대문자를 사용하고, 한글은 약어를 사용하지 않는다는 규칙을 강의에서 제시한다.
4. 단수 명사로 표현할 때 띄어쓰기를 사용하지 않는다.
4. 연습문제는 엔터티의 조건과 이름 규칙을 점검한다.
1. 엔터티는 유일한 식별자를 필요로 하며, 업무에 필요한 정보여야 하고 다른 엔터티와 관계를 가져야 한다. 제시된 문제의 정답은 3번이다.
2. ‘영문은 소문자로, 한글은 약어로 사용한다’는 이름 규칙이 잘못된 설명이다. 문제의 정답은 3번이다.
2.6 엔터티의 분류
1. 엔터티는 유형·개념·사건으로 분류할 수 있고, 발생 시점에 따라 기본·중심·행위 엔터티로도 분류할 수 있다.
1. 유형·개념·사건 분류는 엔터티가 어떤 성격의 대상을 나타내는지에 따른다. 강사는 이를 ‘유사’로 기억하는 방법을 소개한다.
1. 유형 엔터티는 물리적으로 존재하는 대상을 나타낸다. 상품, 회원, 고객이 예이다.
2. 개념 엔터티는 물리적으로 보이지 않는 개념을 나타낸다. 부서, 학과, 직위 등이 예이다.
3. 사건 엔터티는 특정 행위를 통해 생긴 내용을 나타낸다. 주문이나 결제 등이 예이다. 사건 엔터티도 넓게 보면 보이지 않는 개념에 속할 수 있지만, 특정 행동으로 생겼다는 점에서 따로 구분한다.
2. 발생 시점에 따른 분류는 기본·중심·행위 엔터티이며, 강사는 ‘기중형’으로 기억하는 방법을 제시한다.
1. 기본 엔터티는 독립적으로 생성되며 자식 엔터티를 가질 수 있다. 상품, 회원, 고객 등이 예이다. 자식 엔터티는 해당 엔터티에서 파생되어 생기는 테이블을 뜻한다.
2. 중심 엔터티는 기본 엔터티에서 파생되며 행위 엔터티를 만든다. 주문이나 계약이 예이다. 주문을 이해하려면 고객과 상품에 대한 정보가 바탕이 되어야 한다.
3. 행위 엔터티는 두 개 이상의 엔터티와 관련되어 발생한다. 주문 내역이나 체결 내역이 예이다.
2. 연습문제에서는 대상의 실재 여부와 발생 구조를 기준으로 분류한다.
1. 상품은 실제 형태가 있으므로 유형 엔터티이다. 부서와 학과는 개념 엔터티이고, 주문은 행위에 해당한다. 문제의 정답은 상품이다.
2. 기본 엔터티는 독립적으로 생성되고, 중심 엔터티는 기본 엔터티에서 파생되며, 행위 엔터티는 둘 이상의 엔터티에서 발생한다. 제시된 문제의 정답은 3번이다.
2.7 속성의 뜻과 종류
1. 속성은 엔터티의 특징을 나타내는 최소 데이터 단위이며, 하나의 속성값을 가진다.
1. 속성은 엔터티의 특징을 나타내며, 더 이상 나눌 수 없는 최소 데이터 단위이다.
2. 하나의 속성에는 한 개의 속성값이 들어간다. 예를 들어 한 고객의 이름 속성에 서로 다른 이름이 여러 개 동시에 들어가는 식으로 구성하지 않는다.
2. 속성은 성격에 따라 기본·설계·파생 속성으로 나눈다.
1. 기본 속성은 원래 존재하는 값이다. 이름 등이 예이다.
2. 설계 속성은 필요에 따라 만들어 둔 값이다. 학번이나 고객 번호 등이 예이다.
3. 파생 속성은 다른 속성값을 계산하거나 변형해 만든 값이다. 평균 학점처럼 계산한 결과가 예이다.
3. 연습문제에서는 기본·설계·파생의 뜻을 서로 바꾸어 놓은 선택지를 구분한다.
1. 다른 속성값을 계산한 것은 기본 속성이 아니라 파생 속성이다.
2. 필요에 따라 추가로 만든 것은 기본 속성이 아니라 설계 속성이다.
3. 다른 속성값을 계산하거나 변형해 만든 것이 파생 속성이다. 문제의 정답은 4번이다.
2.8 엔터티·인스턴스·속성·속성값의 관계
1. 네 요소의 관계를 나타내는 그림을 보면 한 요소가 다음 요소를 몇 개 가질 수 있는지 파악할 수 있다.
1. 엔터티 하나는 두 개 이상의 인스턴스를 가질 수 있다.
2. 인스턴스 하나는 두 개 이상의 속성을 가질 수 있다.
3. 속성과 속성값은 1대 1로 대응한다. 즉, 속성 하나는 속성값 하나를 가진다.
4. 강사는 그림의 기호를 기억하거나, 세 관계를 문장으로 암기하라고 한다.
2. 연습문제에서는 속성 하나가 여러 속성값을 가질 수 있다고 한 설명이 틀리다.
1. 엔터티 하나가 두 개 이상의 인스턴스를 갖는다는 설명은 맞다.
2. 인스턴스 하나가 두 개 이상의 속성을 갖는다는 설명도 맞다.
3. 속성 하나가 여러 속성값을 갖는다는 설명은 앞서 배운 1대 1 관계와 다르므로 틀리다. 제시된 문제의 정답은 3번이다.
2.9 구성 방식에 따른 속성 분류와 도메인
1. 속성은 구성 방식에 따라 PK 속성, FK 속성, 일반 속성으로 구분된다.
1. PK 속성(primary key, 기본 키·주식별자)은 엔터티의 인스턴스를 고유하게 식별하는 속성이다. 중복값과 NULL(값이 없는 상태)이 허용되지 않는다. 고객 번호나 주민등록번호가 예이다.
2. FK 속성(foreign key, 외래 키)은 다른 엔터티에서 가져온 속성이다. 다른 테이블의 값을 참조하며 중복값과 NULL이 허용될 수 있다.
3. 일반 속성은 PK와 FK가 아닌 나머지 속성이다.
2. 도메인은 속성이 가질 수 있는 값의 범위이며, 용어 사전은 속성명에 대한 규칙을 정한다.
1. 속성의 값에는 정해진 범위가 있을 수 있다. 강의에서는 주민등록번호처럼 자리수와 형식이 정해진 값을 예로 든다.
2. 용어 사전은 데이터의 속성명을 정할 때 용어가 혼란스럽게 쓰이지 않도록 기준을 정리한 것이다.
3. 연습문제에서는 PK와 FK의 중복·NULL 가능 여부를 구분한다.
1. PK는 인스턴스를 식별하는 고유한 속성이라는 설명이 맞다.
2. FK는 다른 엔터티에서 가져오며 중복될 수 있다는 설명이 맞다.
3. 일반 속성은 PK와 FK를 제외한 속성이라는 설명이 맞다.
4. FK는 중복과 NULL이 불가능하다는 설명은 틀리다. 문제의 정답은 4번이다.
2.10 관계와 ERD 표기
1. 관계는 엔터티와 엔터티, 즉 테이블과 테이블 사이의 연관성이다.
1. 관계를 이해할 때는 그림의 기호와 관계의 의미를 나누어 살펴본다.
2. 까마귀발 표기에서 삼지창 모양은 관계 차수를 나타내고, 작대기나 동그라미와 작대기의 조합은 관계 선택 사양을 나타낸다.
3. 관계 차수는 하나만 연결되는지 여러 개가 연결되는지를 나타낸다. 동그라미는 해당 관계가 없어도 될 수 있음을, 작대기는 하나가 필요함을 나타낸다.
2. 관계는 존재 관계와 행위 관계로 구분되며, 사례를 통해 관계 선택 사양을 읽을 수 있다.
1. 존재 관계는 어떤 행위가 없어도 대상이 존재한다는 사실만으로 맺어지는 관계이다. 예를 들어 직원이 금융팀에 소속되어 있는 관계가 이에 해당한다.
2. 직원은 한 팀에만 소속될 수 있고, 팀에는 직원이 없거나 한 명 또는 여러 명이 있을 수 있는 식으로 그림을 해석할 수 있다.
3. 행위 관계는 주문이나 수강 신청처럼 특정 행동을 통해 생긴 관계이다. 고객과 주문의 관계가 예이며, 고객 하나에 주문이 없거나 여러 개 있을 수 있다.
3. ERD의 까마귀발 표기에서는 관계명·관계 차수·관계 선택 사양과 선의 종류를 확인한다.
1. ERD(Entity Relationship Diagram)는 엔터티 사이의 관계를 그림으로 나타낸 것이다. 강의에서는 여러 표기 방식 중 까마귀발 표기법을 다룬다.
2. ERD에서 관계명, 관계 차수, 관계 선택 사양은 필수 요소로 제시된다. 연결선이 실선이면 식별자 관계, 점선이면 비식별자 관계이다.
3. 관계명은 두 엔터티를 어느 쪽의 관점에서 보느냐에 따라 두 가지로 표현할 수 있다. 예를 들어 주문 엔터티는 제품 상세를 포함하고, 제품 상세 엔터티는 주문에 포함될 수 있다.
4. 관계 차수는 1:1, 1:M, N:M처럼 엔터티 사이의 연결 수를 나타낸다. 관계 선택 사양은 관계가 필수인지 선택인지 나타내며, 동그라미가 있으면 없어도 되고 작대기가 있으면 하나는 필수이다.
4. ERD 작성 순서는 순서형 문제로 출제될 수 있으므로 그대로 외운다.
1. 엔터티를 구상하고 그린다.
2. 엔터티를 배치한다. 핵심 엔터티는 좌측 상단에 놓고, 이후 우측 하단 방향으로 배치한다.
3. 관계를 설정하고 관계명을 정한다.
4. 참여도 등 관계의 세부 내용을 기술한다.
2.11 식별자의 의미와 주식별자의 특징
1. 식별자는 인스턴스를 구분해 주는 대표 속성이다.
1. 같은 이름을 가진 사람이 여러 명이면 이름만으로는 행을 구분하기 어렵다. 반면 주민등록번호처럼 각 사람에게 서로 다른 값이 있으면 행을 구분할 수 있다.
2. 모든 속성이 식별자인 것은 아니며, 인스턴스를 구분하는 대표 속성이 식별자이다. 그중 가장 중요한 것이 주식별자이다.
2. 주식별자의 네 가지 특성은 유일성·최소성·불변성·존재성이다.
1. 유일성은 각 인스턴스를 서로 구분할 수 있어야 한다는 뜻이다.
2. 최소성은 유일성을 보장하는 데 필요한 최소 개수의 속성만 사용한다는 뜻이다. 모든 속성을 기본 키로 만들 필요는 없다.
3. 불변성은 속성값이 변하지 않아야 한다는 뜻이다.
4. 존재성은 속성값이 NULL일 수 없다는 뜻이다.
3. 연습문제에서는 주식별자의 네 가지 특성을 구분한다.
1. 각 인스턴스에 유일한 값을 부여한다는 설명은 맞다.
2. 주식별자는 NULL일 수 없으므로 ‘속성값이 NULL일 수 있다’는 설명은 틀리다. 문제의 정답은 2번이다.
2.12 식별자의 여러 분류
1. 주식별자와 보조식별자는 대표성 및 다른 엔터티와의 참조 관계에서 차이가 있다.
1. 주식별자는 대표 식별자로 사용되며 다른 엔터티와 참조 관계로 연결된다. 회원 번호나 주문 번호 등이 예로 제시된다.
2. 보조식별자는 인스턴스를 식별할 수는 있지만 대표 식별자는 아니며, 다른 엔터티와의 참조 관계로 연결되지 않는다. 이름·주소·전화번호 등이 예로 제시된다.
2. 식별자는 내부·외부, 원조·대리, 단일·복합의 기준으로도 나뉜다.
1. 내부 식별자는 엔터티 안에서 생성된 식별자이고, 외부 식별자는 다른 엔터티에서 가져온 식별자이다. 외부 식별자는 외래 키(FK)로 볼 수 있다.
2. 원조 식별자는 가공되지 않은 식별자이다. 대리 식별자는 주식별자의 속성이 두 개 이상일 때 그 속성을 묶어 하나로 사용하는 식별자이다. 주문 일자와 순서 등을 묶어 주문 번호를 만드는 예가 제시된다.
3. 단일 식별자는 속성이 하나인 식별자이고, 복합 식별자는 속성이 두 개 이상인 식별자이다.
4. 강사는 그림에서 식별자의 위치와 구성을 보고 단일·복합, 내부·외부 등의 유형을 판별할 수 있어야 한다고 강조한다.
3. 연습문제에서는 보조식별자와 외부 식별자의 정의를 확인한다.
1. 주식별자의 유일성·최소성·불변성에 대한 설명과 보조식별자의 대표성 여부를 구분한다. 보조식별자는 대표 식별자로 사용되지 않는다. 문제의 정답은 3번이다.
2. 외부 식별자는 엔터티 내부에서 만들어진 것이 아니라 다른 엔터티에서 온 식별자이다. 다른 엔터티와 참조 관계가 있다는 설명이 맞다. 문제의 정답은 2번이다.
2.13 식별자 관계와 비식별자 관계
🌐 외부 리서치SQLD 공부에 필수로 볼 자료#학습 자료 #SQLD
1. 식별자 관계와 비식별자 관계는 부모 엔터티의 식별자가 자식 엔터티에서 어떤 역할을 하는지로 구분한다.
1. 실선은 식별자 관계, 점선은 비식별자 관계를 나타낸다.
2. 식별자 관계는 부모 엔터티의 식별자가 자식 엔터티의 주식별자가 되는 관계이다.
3. 비식별자 관계는 부모 엔터티의 식별자가 자식 엔터티의 일반 속성이 되는 관계이다.
2. 식별자 관계에서는 부모가 있어야 자식이 존재하며, 비식별자 관계에서는 부모가 없는 자식이 가능할 수 있다.
1. 식별자 관계에서는 부모의 식별자가 자식의 주식별자에 포함된다. 주식별자는 NULL일 수 없으므로 부모가 있어야 자식 데이터도 존재할 수 있다.
2. 비식별자 관계에서는 부모의 식별자가 자식의 일반 속성에 들어간다. 해당 값이 NULL일 수 있으므로 부모가 없어도 자식이 존재할 수 있다.
3. 강의에서는 비식별자 관계의 경우 자식이 있는 상태에서도 부모를 삭제할 수 있다고 설명한다. 반면 식별자 관계에서는 부모를 삭제하면 자식과의 연결이 끊기므로 삭제할 수 없는 경우를 대비해 구분해야 한다.
3. 연습문제에서는 식별자 관계에서 자식의 주식별자가 NULL일 수 있다고 한 설명이 틀리다.
1. 식별자 관계에서는 부모의 식별자가 자식의 주식별자가 된다.
2. 주식별자는 NULL이 될 수 없으므로, 제시된 문제의 정답은 2번이다.
3. 강사는 이때까지 다룬 데이터 모델링의 암기 내용을 복습하고, 질문을 남기면 답변하겠다고 안내한다.
3. 정규화와 반정규화
🌐 외부 리서치집계와 조인을 쉽게 이해하기: 정규화와 반정규화의 트레이드오프#개념 #정규화
3.1 정규화와 반정규화의 목적 및 성능 차이
1. 정규화는 중복을 줄이고 효율적으로 저장하기 위해 테이블 구조를 정리하는 과정이다.
1. 정규화(normalization)는 데이터베이스의 데이터를 효율적으로 저장하고 중복을 최소화하도록 테이블 구조를 만드는 과정이다.
2. 목표는 데이터 일관성을 유지하고 데이터 저장소의 무결성(데이터가 정확하고 일관된 상태)을 보장하는 것이다.
2. 반정규화는 성능 향상을 위해 정규화된 구조를 일부러 되돌리는 과정이다.
1. 반정규화는 데이터를 중복 저장하거나 테이블 사이의 조인을 줄이는 방식으로 성능 문제를 해결할 수 있다.
2. 따라서 정규화와 반정규화는 서로 반대 방향의 작업이다.
3. 정규화가 항상 조회 성능을 높이는 것은 아니다.
1. 정규화를 하면 테이블이 더 많이 분리될 수 있고, 원하는 결과를 얻으려면 여러 테이블을 조인해야 한다.
2. 조인 작업이 늘어나면 조회 쿼리의 성능이 떨어질 수 있다.
3. 반면 입력·수정·삭제 성능은 일반적으로 향상될 수 있다. 따라서 ‘정규화를 하면 무조건 성능이 향상된다’는 설명은 틀리다.
3.2 제1정규형: 각 속성값은 하나씩 둔다
1. 제1정규형(1NF)은 모든 속성에 하나의 값만 들어가도록 하는 규칙이다.
1. 하나의 속성값 칸에 여러 값이 들어 있으면 제1정규형을 만족하지 않는다.
2. 예를 들어 한 학생의 과목 코드에 101과 103이 함께 들어 있으면, 학생 정보를 과목별 행으로 나누어 각 칸에 과목 코드 하나씩만 저장해야 한다.
2. 비슷한 속성이 반복되는 구조도 제1정규형을 위반한다.
1. 한 학생의 전화번호를 ‘폰 1’, ‘폰 2’처럼 비슷한 여러 열에 반복해서 저장하는 구조가 예로 제시된다.
2. 전화번호를 하나의 속성으로 두고 각 값을 행으로 나열하는 방식이 제1정규형에 맞는 구조이다.
3. 연습문제에서는 한 칸에 여러 값이 들어간 테이블을 찾아낸다.
1. 테이블 A·C·D에는 문제가 없어 보이고, 테이블 B의 상품명에 사과와 바나나가 함께 들어 있다.
2. 따라서 제1정규형을 위반한 테이블은 B이다.
3.3 제2정규형: 부분 종속성을 없앤다
1. 제2정규형은 제1정규형을 만족하면서 기본 키가 아닌 모든 열이 기본 키 전체에 완전히 종속되도록 하는 규칙이다.
1. 기본 키가 여러 속성으로 구성된 복합 키인 경우, 일반 속성이 그중 일부에만 종속되면 부분 종속성이 생긴다. 이 구조는 제2정규형을 만족하지 않는다.
2. 예시 테이블에서는 학생 ID와 과목 ID가 함께 기본 키가 된다. 학생 이름은 학생 ID에 종속되고, 과목 이름과 담당 강사는 과목 ID에 종속된다.
3. 일반 속성이 복합 기본 키 전체가 아니라 일부에만 종속되어 있으므로, 테이블을 분리할 수 있다.
2. 부분 종속성은 중복·불일치·무결성 문제를 만들 수 있다.
1. 과목 이름과 담당 강사가 과목 ID에 따라 반복 저장되면 동일한 과목 정보가 여러 행에 중복된다. 데이터가 많아질수록 저장 공간을 더 사용한다.
2. 담당 강사가 바뀌면 반복된 모든 값을 수정해야 한다. 하나라도 수정하지 않으면 데이터가 서로 다른 상태가 되어 불일치가 생긴다.
3. 아직 과목을 수강하지 않은 학생을 추가하려고 해도, 과목 ID가 기본 키라 NULL을 넣을 수 없으면 실제와 다른 값을 넣게 될 수 있다. 이는 데이터 무결성 문제이다.
3. 제2정규형을 만들려면 각 속성이 종속되는 기준에 따라 테이블을 나눈다.
1. 학생 ID에 종속되는 학생 이름을 학생 정보 테이블로 분리하고, 중복되는 학생 이름을 줄인다.
2. 과목 ID에 종속되는 과목 이름과 담당 강사를 과목 테이블로 분리한다.
3. 학생과 과목의 연결 정보는 별도 테이블에 두어 어떤 학생이 어떤 과목을 듣는지 확인할 수 있게 한다.
4. 이렇게 세 테이블로 나누면 중복을 줄이고, 불일치 및 무결성 문제를 완화할 수 있다.
3.4 제3정규형: 이행적 종속성을 없앤다
1. 제3정규형은 제2정규형을 만족한 상태에서 기본 키가 아닌 일반 속성에 다른 일반 속성이 종속되는 구조를 정리한다.
1. 예시에서는 학생 ID 하나가 기본 키이고, 과목 ID는 일반 속성이다.
2. 과목 이름과 담당 강사는 기본 키인 학생 ID가 아니라 일반 속성인 과목 ID에 종속되어 있다. 따라서 일반 속성에 대한 종속이 남아 있다.
2. 제3정규형을 적용하면 속성이 적절한 기본 키에 직접 종속되도록 테이블을 구성한다.
1. 학생 ID와 과목 ID의 연결 관계를 별도로 나타내고, 과목에 관한 정보도 적절한 테이블로 분리한다.
2. 이렇게 하면 이행적 종속성이 제거되고 데이터베이스의 무결성과 일관성을 보장하는 데 도움이 된다.
3.5 반정규화의 장단점
1. 반정규화는 읽기 성능을 높이고 조인을 줄이기 위해 중복을 허용하는 설계 방법이다.
1. 정규화된 구조를 의도적으로 되돌려, 쿼리 성능을 높이고 데이터 조회를 쉽게 하는 데 사용한다.
2. 반정규화의 장점은 조인 감소와 조회 편의성이고, 단점은 중복과 관리 부담이다.
1. 장점은 테이블 간 조인 연산을 줄여 성능을 높일 수 있다는 점이다.
2. 필요한 데이터가 한 테이블에 모이면 쿼리가 단순해지고 유지보수가 쉬워질 수 있다.
3. 데이터를 중복 저장하면 캐시 효율을 높일 수 있다는 장점도 제시된다.
4. 반면 저장 공간이 늘고, 중복 데이터 사이에 불일치가 생길 수 있다.
5. 중복된 데이터를 일관되게 유지하기 어려워 무결성 관리가 복잡해질 수 있다.
6. 여러 위치에 중복 데이터가 있으면 삽입·수정·삭제 작업이 복잡해진다.
7. 정규화가 테이블을 쪼개는 작업이라면 반정규화는 그 테이블을 합치거나 중복을 허용해 조회를 빠르게 하는 작업이다. 그러나 그에 따른 문제도 생길 수 있다.
3. 연습문제에서는 조회 시 조인을 줄이는 것이 반정규화의 장점임을 확인한다.
1. 데이터 무결성 향상, 중복 감소, 저장 공간 절약은 정규화의 장점으로 제시된다.
2. 성능 향상을 위해 조회 시 조인 연산을 줄이는 것이 반정규화의 장점이다. 정답은 3번이다.
3.6 반정규화 기법의 큰 분류
1. 반정규화는 테이블 반정규화와 컬럼 반정규화로 나뉜다.
1. 테이블 반정규화에는 테이블 병합, 테이블 분할, 테이블 추가가 있다.
2. 테이블 병합에는 1:1 관계 병합, 1:M 관계 병합, 슈퍼타입·서브타입 테이블 병합이 있다.
3. 테이블 분할에는 수직 분할과 수평 분할이 있다.
4. 테이블 추가에는 중복 테이블, 통계 테이블, 이력 테이블, 부분 테이블 추가가 있다.
5. 컬럼 반정규화는 여러 테이블을 합치는 방식이 아니라, 한 테이블 안에서 성능을 최적화하는 방식이다. 중복 컬럼 추가, 파생 컬럼 추가, 이력 컬럼 추가가 있다.
3.7 테이블 병합: 1:1·1:M·슈퍼타입/서브타입
1. 1:1 관계 테이블 병합은 한 테이블의 각 행이 다른 테이블의 한 행과 대응할 때 두 테이블을 합치는 방법이다.
1. 예시에서는 사용자 ID가 사용자 이름 테이블과 주소·전화번호 테이블에서 각각 고유하게 사용된다.
2. 두 테이블의 사용자 ID가 1:1로 대응하므로 하나로 합쳐도 문제가 없다. 테이블을 합쳐 조인을 줄이는 반정규화이다.
2. 연습문제에서는 테이블 병합의 목적을 고른다.
1. 테이블 병합은 중복을 줄이기 위해 테이블을 나누는 과정이 아니다.
2. 두 개 이상의 테이블을 하나로 합쳐 조인을 줄이고 쿼리 성능을 높이는 방법이다. 정답은 2번이다.
3. 1:M 관계 테이블 병합은 한쪽의 한 행과 다른 쪽의 여러 행이 연결되는 테이블을 합치는 방법이다.
1. 고객과 주문의 관계에서는 고객 한 명이 주문을 여러 번 할 수 있다.
2. 주문 테이블에 고객 ID와 주문 날짜가 있고, 고객 ID에 따라 고객 이름을 가져와 각 주문 행에 채워 넣으면 하나의 테이블로 합칠 수 있다.
4. 슈퍼타입·서브타입 병합은 공통 속성을 가진 부모 테이블과 구체적인 자식 테이블을 합치는 방법이다.
1. 슈퍼타입은 공통 속성을 가진 부모 테이블이고, 서브타입은 이를 상속받아 더 구체적인 속성을 가진 자식 테이블이다.
2. 예시에서는 직원 테이블이 슈퍼타입이고, 월급을 받는 정규직 테이블과 시급을 받는 파트타임 테이블이 서브타입이다.
3. 세 테이블을 각각 조회하면 조인이 두 번 필요할 수 있으므로, 하나의 테이블로 병합할 수 있다.
4. 직원 유형에 따라 월급이나 시급 중 하나만 값이 있으므로, 해당하지 않는 칸에는 NULL이 들어갈 수 있다.
3.8 테이블 분할: 수직 분할과 수평 분할
1. 수직 분할은 컬럼을 나누어 1:1 관계의 테이블을 만드는 방식이다.
1. 예시의 고객 테이블에는 ID·이름·주소·전화번호·이메일·나이가 있다.
2. 주소·전화번호·이메일처럼 성격이 비슷한 컬럼을 별도의 테이블로 분리할 수 있다.
3. 원래 같은 행에 있던 데이터를 컬럼 기준으로 나누므로, 분할 결과는 1:1 관계가 된다.
2. 수평 분할은 행을 특정 기준으로 나누어 별도의 테이블로 만드는 방식이다.
1. 수평 분할에서는 컬럼은 그대로 두고 행을 기준에 따라 나눈다.
2. 예를 들어 주문 데이터 중 2024년 이전 데이터만 따로 분리하면, 기준에 해당하는 행만 별도 테이블에 남는다.
3. 따라서 수직 분할은 컬럼 기준, 수평 분할은 행 기준으로 나뉜다는 점을 구분해야 한다.
3.9 테이블 추가 기법
1. 중복 테이블 추가는 자주 함께 조회하는 데이터를 복제해 조인을 줄이는 방법이다.
1. 제품 테이블과 카테고리 테이블이 분리되어 있으면 제품과 카테고리 이름을 함께 확인할 때 두 테이블을 조회해야 한다.
2. 제품과 카테고리 정보를 함께 가진 테이블을 추가하면, 조인 없이 한 번에 조회할 수 있다.
2. 통계 테이블 추가는 복잡한 집계 결과를 미리 계산해 저장하는 방법이다.
1. 원본 판매 데이터에서 기간별 판매량을 구하려면 집계 연산을 해야 한다.
2. 월별 판매 통계 테이블에 합계를 미리 저장해 두면, 조회할 때 다시 계산하지 않아도 되어 빠르게 결과를 얻을 수 있다.
3. 이력 테이블 추가는 데이터가 바뀐 과정을 기록하는 방법이다.
1. 현재 직원 정보만 저장하면 현재 직무와 급여는 알 수 있지만, 과거에 어떻게 바뀌었는지는 알기 어렵다.
2. 이력 테이블을 두면 직원의 이전 직무와 급여, 변경 시점을 기록할 수 있다. 중복이 생길 수 있지만 변경 과정을 추적할 수 있다는 장점이 있다.
4. 부분 테이블 추가는 자주 사용하는 데이터의 일부만 따로 저장해 조회를 빠르게 하는 방법이다.
1. 주문 테이블에서 배송 완료 주문만 자주 찾는다면, 매번 전체 테이블을 조건으로 검색하는 대신 배송 완료 주문을 별도 테이블에 저장할 수 있다.
2. 부분 테이블을 두는 목적은 자주 사용하는 데이터를 빠르게 조회하는 것이다.
3.10 컬럼 반정규화 기법
1. 중복 컬럼 추가는 다른 테이블의 값을 현재 테이블에 복사해 조인 없이 조회하는 방법이다.
1. 주문 테이블에 고객 ID만 있으면 고객 이름을 알기 위해 고객 테이블도 조회해야 한다.
2. 고객 이름을 주문 테이블에도 추가하면 주문 테이블만으로 이름을 확인할 수 있다.
3. 같은 이름이 여러 테이블에 저장되어 공간은 더 사용하지만, 조회를 한 번에 할 수 있다.
2. 파생 컬럼 추가는 계산이나 변환이 자주 필요한 결과를 미리 컬럼에 저장하는 방법이다.
1. 파생 속성은 다른 값을 계산해 만든 값이다.
2. 상품 가격과 수량을 곱한 총가격을 컬럼으로 저장하면, 조회할 때마다 곱셈을 다시 할 필요가 없다.
3. 데이터 행이 매우 많을 때 계산을 반복하지 않아도 되므로 조회가 빨라질 수 있다.
3. 이력 컬럼 추가는 데이터 변경 시점과 과거 상태를 기록하는 방법이다.
1. 이력 컬럼은 데이터 변경 사항을 추적하고 과거 데이터를 조회할 때 사용한다.
2. 예를 들어 직원의 직무 시작일과 종료일을 기록해 직무 이력을 추적할 수 있다.
3. 이력 테이블을 추가하는 방법과 이력 컬럼을 추가하는 방법 모두 변경 이력을 관리한다는 목적이 있다.
3.11 반정규화 문제와 적용 상황
1. 반정규화는 성능을 위해 자주 쓰는 데이터를 중복 저장하는 방법이다.
1. 모든 데이터를 기본 키로 바꾸는 것은 반정규화 기법이 아니다.
2. 테이블을 더 작은 단위로 나누는 것은 정규화에 해당한다.
3. 자주 사용하는 데이터를 중복해 여러 테이블에 저장하는 것이 반정규화 기법이다.
2. 조인 연산이 성능 저하를 일으킬 때 반정규화를 고려할 수 있다.
1. 저장 공간이 매우 제한된 경우에는 중복을 늘리는 반정규화보다 정규화가 적절하다.
2. 테이블 간 조인이 성능 저하를 일으키고 있다면, 테이블을 합치거나 데이터를 중복하는 반정규화를 고려할 수 있다.
3. 데이터 일관성을 반드시 유지해야 하거나 구조가 복잡하고 유연성이 필요한 경우에는 반정규화보다 정규화를 고려해야 한다.
4. 강사는 이 지점에서 데이터 모델링 내용을 복습한 뒤 SQL 기본 및 활용으로 넘어간다.
4. 관계형 데이터베이스와 SQL의 기초
4.1 SQL 과목의 비중과 학습 방향
1. SQL 기본 및 활용은 시험의 80%를 차지하므로 집중해서 공부해야 한다.
1. 데이터 모델링의 이해가 20%, SQL 기본 및 활용이 80%이므로 SQL 과목의 비중이 더 크다.
2. 실습 위주의 SQL 강의를 미리 들은 사람이나 시험까지 시간이 남은 사람은 SQL을 직접 코딩해 본 경험을 바탕으로 내용을 더 쉽게 따라갈 수 있다.
3. 강사는 실습이 이해를 빠르게 하는 데 도움이 될 수 있지만, 실습 경험이 없더라도 합격에 반드시 큰 영향을 주는 것은 아니라고 말한다.
2. 이제 관계형 데이터베이스와 SQL의 기본 개념을 학습한다.
4.2 관계형 데이터베이스와 DBMS
1. 데이터베이스는 데이터를 모아 저장하는 곳이고, DBMS는 데이터베이스를 관리하는 시스템이다.
1. 데이터베이스는 컴퓨터에 저장되는 데이터의 집합이다.
2. DBMS(Database Management System)는 데이터베이스 관리 시스템이다.
3. 강의에서는 Oracle, MySQL, MariaDB, MS SQL Server 등을 예로 든다. Oracle과 MS SQL Server는 유료 제품으로 설명하고, MySQL과 MariaDB는 공개적으로 사용할 수 있는 제품으로 소개한다.
2. 관계형 데이터베이스는 관계를 맺는 데이터를 테이블 형태로 저장한다.
1. 관계형 데이터베이스에서는 데이터베이스 안의 테이블들이 특정 키를 통해 서로 연결된다.
2. 예시에서는 아이디·이름·거주 지역이 있는 테이블과 지역·여름 평균 온도가 있는 테이블이 등장한다. 두 테이블은 지역 컬럼을 통해 연결된다.
3. 기본 키와 외래 키가 테이블 간 관계를 만든다.
1. 기본 키(PK)는 NULL이 될 수 없고 중복될 수 없다.
2. 외래 키(FK)는 다른 테이블의 기본 키를 참조하여 테이블을 연결하며, 중복과 NULL이 허용될 수 있다.
4.3 SQL의 뜻과 주요 기능
1. SQL은 관계형 데이터베이스 관리 시스템에서 데이터를 정의하고 조작하는 언어이다.
1. SQL은 데이터베이스와 상호작용하는 언어로, 데이터의 삽입·조회·수정·삭제 등에 사용된다.
2. 사용자가 데이터베이스에 원하는 정보를 자연어로 요청하는 대신, SQL 문장을 작성해 컴퓨터와 소통한다.
2. SQL의 주요 기능은 데이터 정의·조작·제어와 트랜잭션 제어로 나뉜다.
1. DDL(Data Definition Language)은 데이터베이스 구조를 정의하거나 수정하는 언어이며, CREATE 등이 주요 명령어이다.
2. DML(Data Manipulation Language)은 데이터를 삽입·조회·수정·삭제하는 데 사용하며, SELECT 등이 포함된다.
3. DCL(Data Control Language)은 데이터베이스에 대한 권한을 제어한다.
4. TCL(Transaction Control Language)은 데이터베이스 트랜잭션을 관리하며 COMMIT, ROLLBACK, SAVEPOINT 등이 포함된다.
5. 강사는 각 명령어가 어느 분류에 속하는지 시험에 나올 수 있으므로, 뒤에서 자세히 공부하겠다고 안내한다.
5. SELECT문과 주요 함수
5.1 SELECT문의 기본 구조
1. SELECT는 데이터베이스에서 원하는 데이터를 조회하는 기본 명령어이다.
1. SQL 구문은 정해진 문법에 따라 작성하며, SELECT는 데이터를 조회할 때 가장 기본적이고 중요한 명령이다.
2. 기본 SELECT문은 가져올 열과 테이블을 지정하고, 필요하면 조건을 추가한다.
1. SELECT 뒤에 조회할 컬럼 이름을 적는다. 여러 컬럼을 가져오려면 쉼표로 구분한다.
2. FROM 뒤에는 데이터를 가져올 테이블 이름을 적는다.
3. WHERE는 조회할 데이터를 제한하는 조건을 지정한다. 예를 들어 나이가 20세 이상인 사람만 가져오도록 할 수 있다.
4. SQL문 끝에는 세미콜론을 적는다.
5. 기본적으로 SELECT와 FROM이 있어야 쿼리가 작동하며, WHERE는 조건을 걸 때 사용하는 선택 요소이다.
3. 예시에서는 고객 테이블에서 이름과 도시만 조회한다.
1. 원본 테이블에는 고객 번호, 고객 이름, 도시, 국가 등의 컬럼이 있다.
2. SELECT에 고객 이름과 도시 컬럼을 지정하고 FROM에 customers 테이블을 적으면, 그 두 컬럼이 결과로 출력된다.
3. WHERE 조건이 없으므로 조건으로 행을 걸러내지 않는다.
5.2 SELECT문에서 산술 연산자와 별칭 사용
1. SELECT문 안에서는 숫자 컬럼에 더하기·빼기·곱하기·나누기를 적용할 수 있다.
1. 더하기 예시에서는 상품 이름·가격·수량을 조회하면서 가격과 수량을 더한 결과도 계산한다.
2. 계산 결과의 이름을 보기 좋게 바꾸려면 별칭(alias)을 사용할 수 있다. 별칭을 쓰지 않으면 계산식이 그대로 컬럼 이름처럼 보일 수 있다.
3. SELECT에 넣은 산술 연산은 각 행의 값끼리 계산한다. 예를 들어 한 행의 가격 100과 수량 10을 더하면 110이 된다.
4. 빼기 예시에서는 가격에서 세금을 빼며, 100에서 10을 빼면 90, 50에서 20을 빼면 30이 되는 식으로 계산한다.
5. 여러 컬럼이나 계산식을 SELECT에 적을 때는 쉼표로 구분하고, 마지막 항목 뒤에는 쉼표를 쓰지 않는다. FROM 뒤에는 테이블 이름을 쓰고, 문장 끝에는 세미콜론을 둔다.
6. 곱하기는 별표(
*), 나누기는 슬래시(/)로 표시한다.7. 나누기 결과는 나머지가 아니라 몫으로 나온다. 나머지를 구하는 연산은 별도로 구분해야 한다.
5.3 문자 함수
1. 문자열 함수는 문자열을 연결·추출·변환·정리하는 데 사용한다.
1. 강의 예시에서는 화면 공간 때문에 FROM 테이블명이 생략되어 있지만, 실제 쿼리에는 FROM과 테이블 이름이 필요하다.
2. CONCAT은 둘 이상의 문자열을 연결한다. 작은따옴표 안의 내용은 문자로 처리되며, 따옴표 안에 공백을 넣으면 그 공백도 문자로 연결된다.
3. ‘Hello’와 ‘World’ 사이에 공백을 넣고 싶으면 공백을 문자열로 따로 적어야 한다. 공백이 필요 없으면 그 부분을 생략한다.
4. SUBSTR 또는 SUBSTRING은 문자열의 일부를 추출한다. 예시에서 시작 위치 1부터 5개 문자를 가져오면 ‘Hello’가 나온다.
5. 문자열 길이를 반환하는 함수는 Oracle에서 LENGTH, SQL Server에서 LEN으로 표기한다고 설명한다. 공백도 문자이므로 ‘Hello World’의 길이는 공백을 포함해 11이다.
2. 문자열의 일부를 바꾸거나 영문 대소문자를 바꾸는 함수도 있다.
1. REPLACE는 지정한 문자열의 일부를 다른 문자열로 바꾼다. 예를 들어 ‘Hello World’에서 ‘World’를 ‘SQL’로 바꾸면 ‘Hello SQL’이 된다.
2. UPPER는 영문자를 대문자로, LOWER는 영문자를 소문자로 바꾼다.
3. TRIM 계열 함수는 문자열의 양끝 또는 한쪽 끝에서 공백이나 지정한 문자를 제거한다.
1. TRIM은 문자열 양쪽 끝의 공백을 제거하지만, 문자열 가운데의 공백은 남긴다.
2. SQL Server의 사용 예로는 양쪽 끝에서 특정 문자
x를 제거하는 방식이 제시된다.3. LTRIM은 왼쪽, RTRIM은 오른쪽 끝의 공백이나 지정 문자를 제거한다.
4. 제거할 문자를 따로 지정하지 않으면 공백을 제거한다.
5. 연습문제에서는 왼쪽 공백만 제거하는 결과가 맞으며, 정답은 1번이다.
4. LPAD·RPAD는 문자열을 지정한 길이로 만들기 위해 왼쪽이나 오른쪽을 채운다.
1. LPAD는 문자열의 길이가 목표 길이가 될 때까지 왼쪽을 지정한 문자로 채운다. 예를 들어 길이 5인 ‘Hello’를 길이 10으로 만들려면 왼쪽에 별표를 다섯 개 넣는다.
2. RPAD는 같은 방식으로 오른쪽을 채운다.
3. CHR은 ASCII 코드 값을 문자로 바꾸는 함수이다. 강사는 구체적인 코드값 암기보다 함수가 있다는 점을 알아두면 된다고 설명한다.
5.4 숫자 함수
1. 숫자 함수에는 절댓값·부호·반올림·버림·올림·내림·나머지 함수가 있다.
1. ABS는 절댓값을 반환하므로 음수도 양수로 바꾸며, 양수는 그대로 반환한다.
2. SIGN은 숫자의 부호를 반환한다. 양수이면 1, 음수이면 -1을 반환한다.
2. ROUND는 지정한 자릿수를 기준으로 반올림한다.
1. ROUND(181.67, 1)은 소수점 첫째 자리까지 남기고, 뒤의 숫자를 반올림해 181.7이 된다.
2. 소수 자릿수에 음수가 들어가면 왼쪽 자리로 이동한다. 강의에서는 음수 자릿수일 때 해당 자리에서 반올림한다고 설명하며, 예시 결과는 200이다.
3. 양수 자릿수는 해당 자릿수까지 남기고, 음수 자릿수는 왼쪽 자리에서 처리한다는 차이를 기억해야 한다.
3. TRUNC는 지정한 자리 아래를 버린다.
1. TRUNC(181.67, 1)은 소수점 첫째 자리까지 남겨 181.6으로 만든다.
2. TRUNC(181.67, -1)은 일의 자리부터 버려 180이 된다.
4. CEIL과 FLOOR는 각각 올림과 내림을 하며, 음수에서는 결과 방향을 주의해야 한다.
1. CEIL은 입력값 이상인 가장 작은 정수를 반환한다. 181.67은 182가 된다.
2. 음수에서도 입력값 이상인 정수를 선택하므로, 강의 예시의 -181.67 결과는 -181이다.
3. FLOOR는 입력값 이하인 가장 큰 정수를 반환한다. 181.67은 181, -181.67은 -182가 된다.
5. MOD는 첫 번째 수를 두 번째 수로 나눈 나머지를 반환한다.
1. MOD(15, 4)는 15를 4로 나눈 나머지인 3을 반환한다.
2. 강사는 함수 사용법을 예시와 함께 암기하고, 언어 문법을 ‘왜 그런가’보다 어떻게 동작하는지 중심으로 익히라고 권한다.
5.5 날짜 함수
1. 현재 날짜와 시간은 DBMS별 함수로 가져올 수 있다.
1. Oracle에서는 SYSDATE, SQL Server에서는 GETDATE를 사용해 현재 연·월·일·시·분·초를 얻는다고 설명한다.
2. EXTRACT는 날짜나 시간에서 원하는 부분을 추출한다.
1. 연도·월·일·시·분·초 중 필요한 부분을 지정해 가져올 수 있다.
2. 예를 들어 현재 날짜가 2024년 7월 29일이면 연도만 추출해 2024를 얻을 수 있다.
3. ADD_MONTHS는 지정한 개월 수를 더한 날짜를 반환한다.
1. 예를 들어 2024년 7월 29일에 3개월을 더하면 2024년 10월 29일이 된다.
2. 강사는 날짜 함수의 이름과 용도를 암기하라고 권한다.
5.6 형 변환과 변환 함수
1. 형 변환은 데이터의 유형을 다른 유형으로 바꾸는 작업이다.
1. 숫자 모양의 값이라도 문자로 저장되면 숫자처럼 더하거나 곱할 수 없다. 필요하면 문자에서 숫자로 바꾸어 계산해야 한다.
2. 사용자가 직접 변환을 지정하는 것은 명시적 형 변환이다. 변환 과정이 코드에 드러나므로 데이터의 유형과 의도를 확인하기 쉽다.
3. 시스템이 자동으로 유형을 바꾸는 것은 암시적 형 변환이다. 사용자가 예상하지 못한 변환이나 결과가 생길 수 있어 주의해야 한다.
4. 문자와 숫자를 비교하거나 날짜에 며칠·몇 개월·몇 년을 더하는 등 서로 다른 유형을 함께 다룰 때 형 변환이 필요할 수 있다.
2. TO_CHAR·TO_DATE·TO_NUMBER는 각각 문자·날짜·숫자 유형으로 변환한다.
1. TO_CHAR는 숫자나 날짜를 문자로 바꾼다. 형식을 지정할 수도 있고, 형식은 생략할 수도 있다.
2. 날짜를 문자로 바꿀 때는 연·월·일·시간·분·초의 표시 형식을 지정할 수 있다. 결과는 날짜처럼 보이더라도 문자 데이터이다.
3. TO_DATE는 문자열을 날짜 유형으로 변환한다. 화면에 표시되는 모양이 같더라도 데이터베이스가 날짜로 인식하도록 만드는 것이 핵심이다.
4. 날짜 형식에서 YYYY는 연도, MM은 월, DD는 일, HH는 12시간제 시, HH24는 24시간제 시, MI는 분, SS는 초를 뜻한다.
5. TO_NUMBER는 문자열을 숫자로 변환한다. 숫자로 바꾼 뒤에는 덧셈·뺄셈·곱셈·나눗셈에 사용할 수 있다.
3. CAST는 값을 지정한 데이터 유형으로 바꾸는 명시적 형 변환 함수이다.
1. 예시에서는 문자열 형태의 날짜를 CAST로 날짜 유형으로 변환한다.
2. CAST는 숫자·날짜·문자 등 여러 유형으로 바꾸는 데 사용할 수 있는 변환 함수이다.