본문 바로가기
카테고리 없음

SQLD-2 ( 관계형데이터 베이스 & SELECT)

by wjdtmdgjs 2026. 5. 10.

2-1 관계형 데이터베이스 개요

 

DATABASE(데이터베이스)

 - 데이터베이스는 여러 데이터의 집합을 의미

 - 데이터베이스를 보다 쉽게 관리할 수 있도록 도와주는 소프트웨어를 DBMS 라고 함

 

DMBS(Database Management System)

 - 데이터베이스의 생성, 관리, 유지 보수 및 접근을 지원하는 소프트웨어 시스템

 - DMBS를 통해 데이터베이스를 보다 효율적으로 관리하고 조작할 수 있음

 - SQL 언어를 사용하여 데이터베이스를 생성하고 관리함

 

SQL(Structured Query Language)

 - RDMBS에서 데이터를 정의, 조작, 조회, 수정, 삭제하는 데 사용되는 표준 언어

 - 기능에 따라 DDL, DML, DCL, DQL, TCL 등으로 구분

 - 문법은 대소문자를 구분하지 않음

 - SQL 문장은 세미콜론(;)으로 마침

 

ERD(Entity Relationship Diagram)

 - 엔터티 간의 상관관계를 도식화하여 표현한 다이어그램

 - ERD의 구성 요소는 엔터티(Entity), 관계(Relationship), 속성(Attribute)으로 이루어짐

 

DBMS 종류

1. 관계형 DBMS(RDBMS)

 - 데이터를 2 차원의 행과 열로 구성된 구조화된 테이블 형태로 표현

 - 테이블 간의 관계 정의가 중요 -> 조인 연산 필요

 - 정형 데이터를 저장

 - 예) Oracle, MySQL, PostgreSQL, SQL Server

 

2. 비관계형 DBMS(NoSQL)

 - 관계형 DB의 엄격한 테이블 구조와 달리 데이터 구조 및 저장 방식에 유연성을 부여

 - 비정형, 반정형 데이터를 주로 저장

 - 예) MongoDB, Cassandra, Redis

 

관계형 데이터베이스 구성요소

1. 계정

 - 데이터 접근을 제한하고 관리하기 위해 업무별 또는 시스템별로 생성된 사용자 계정을 의미

 - 계정별로 권한을 부여하여 데이터베이스 보안과 접근 제어를 수행

 

2. 테이블

 - 데이터가 실제로 저장되는 기본 단위

 - 행(Row)과 열(Column)로 구성된 구조화된 형태로 데이터를 관리

 

3. 스키마

 - 데이터베이스 내에서 데이터와 관련된 구조적 정의를 의미

 - 테이블, 뷰, 인덱스, 관계 등 데이터베이스 객체들의 논리적인 집합

 - 테이블이 어떤 구조로 구성되어 있는지, 어떤 정보를 저장하는지에 대한 기본적인 틀을 제공

 

관계형 데이터베이스 장단점

구분 설명
장점 - 데이터의 분류, 정렬, 탐색 속도가 빠름
- 정형화된 구조로 인해 데이터 관리가 용이함
- 데이터 무결성과 일관성이 높아 신뢰성이 높음
- 기본키, 외래키, 제약조건 등을 통해 데이터 무결성을 보장함
- 표준화된 SQL을 사용하여 데이터 조회 및 관리가 용이
단점 - 스키마가 사전에 정의되어 있어 구조 변경(컬럼 추가, 수정 등)이 어려움
- 시스템 부하에 따른 성능 병목을 사전에 분석하고 대응하기 어려움
- 시스템 규모가 커질수록 확장성이 제한적일 수 있음
- 안정적인 운영을 위해 전문적인 데이터베이스 관리자(DBA)가 필요
- 장애 발생 시 트랜잭션 처리 및 복구 과정이 복잡하여 시스템 전체에 영향이 커질 수 있음

 

 

데이터 무결성(Integrity)

1. 개념

 - 데이터의 정확성과 일관성을 유지하고, 데이터에 결손이나 부정합이 없음을 보장하는 개념

 - 데이터베이스에 저장된 값이 현실 세계의 비지니스 모델에서 의미하는 값과 일치하는 정확성을 의미함

 - 데이터 무결성을 유지하는 것은 데이터베이스 관리 시스템(DBMS)의 핵심적인 기능 중 하나임

 

2. 종류

구분 설명
개체 무결성 테이블의 기본키를 구성하는 컬럼(속성)은 NULL값을 가질 수 없으며, 중복될 수 없음
참조 무결성 외래키 값은 NULL 이거나, 참조하고 있는 테이블의 기본키 값과 동일해야 함
도메인 무결성 속성에 저장되는 값은 사전에 정의된 도메인에 속한 값이어야 함
NULL 무결성 특정 속성에 대해 NULL 값을 허용하지 않는 제약 조건의 특징
고유 무결성 특정 속성의 값이 테이블 내에서 중복되지 않도록 보장하는 특징
키 무결성 하나의 릴레이션(관계)에는 적어도 하나 이상의 키가 존재해야 함

 

테이블

1. 개념

 - DBMS 에서 데이터를 입력하여 저장하는 최소 단위

 - 행(Row)과 열(Column)로 구성된 정형화된 2차원 구조

 - 논리 모델링 단계에서 정의된 엔터티(Entity)는 물리 모델링 단계에서 테이블(Table)로 변환됨

 - 하나의 테이블은 동일한 성격의 데이터 집합을 저장함

 

2. 특징

 - 하나의 테이블은 하나의 스키마에 소속됨

  (Oracle 에서는 스키마 = 소유자 개념, SQL Server에서는 스키마 단위 관리)

 - 테이블 간에는 일대일(1:1), 일대다(1:N), 다대다(N:M)의 관계를 가질 수 있음

 - 테이블명은 동일한 스키마 내에서는 중복될 수 없으나 스키마가 다를 경우 동일한 이름으로 생성 가능

 - 각 테이블은 기본키(PK)를 통해 각 행을 유일하게 식별함

 - 외래키(FK)를 통해 다른 테이블과의 관계를 표현함

 - 테이블을 구성하는 각 컬럼은 데이터 타입, 길이, 제약조건 등을 정의하여 데이터의 무결성을 관리함

 

예) 소유자(스키마)가 다른 경우, 동일한 이름의 테이블 생성

   Oracle에서 SCOTT 소유의 EMP 테이블이 이미 존재할 때, SYSTEM 소유의 EMP 테이블 생성 가능

 예) EMP 테이블의 각 컬럼별 데이터 타입 확인

 

테이블 명명 규칙

1. 테이블 이름은 최대 30 자까지 지정할 수 있음

 

2. 대소문자를 구분하지 않지만, 쌍따옴표(" ")를 사용하면 대소문자를 구분함

 -예) TABLE1, Table1, table1은 모두 동일한 이름의 테이블로 인식됨

 

3. 영문자와 숫자를 포함할 수 있으나, 숫자로 시작할 수는 없음

 -예) 1TABLE 이라는 이름의 테이블은 생성할 수 없음

 

4. 특수기호 및 공백 사용 제한

 - 공백 및 특수기호 사용 불가(사용할 수 있는 특수기호는 _, #, $ 만 가능)

 

5. 예약어 사용 금지

 - 이미 존재하는 SQL 문법이나 키워드는 테이블 이름으로 사용할 수 없음

 - 예) SELECT, DROP, USER, TABLE 등의 이름을 갖는 테이블은 생성 불가

 

2-2 SELECT 문

 

SQL 종류

 - SQL은 그 기능에 따라 다음과 같이 구분함

 - SELECT 문은 데이터 조작이나 정의가 아닌 조회 전용이므로, 이를 구분하기 위해 DQL 개념이 등장함

구분 종류
DDL
(Data Definition Language)
CREATE, ALTER, DROP, TRUNCATE
,DML
(Data Manipulate Language)
INSERT, DELETE, UPDATE, MERGE
DCL
(Data Control Language)
GRANT, REVOKE
TCL
(Transaction Control Language)
COMMIT, ROLLBACK
DQL
(Data Query Language)
SELECT

 

SELECT 문 구조

 - SELECT 문은 총 6개의 절로 구성됨

 - 각 절은 정해진 순서대로 작성해야 함

 - GROUP BY 절과 HAVING 절은 논리적으로 함께 사용되므로 순서를 바꿀 수는 있으나, 권장하지 않음

 - 작성 순서와 실제 실행(해석) 순서는 서로 다름

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

 

** 문법

 

SELECT 절

 - SELECT 절은 테이블에서  출력하고자 하는 대상을 선택하는 절

 - * 또는 컬럼명, 표현식 등을 지정할 수 있음

 - * 와 컬럼명 또는 표현식은 함께 사용할 수 없음

 - 출력 대상이 여러 개인 경우, 원하는 컬럼 및 표현식을 콤마(,)로 나열하여 작성하며 작성된 순서대로 출력됨

 

**문법

**특징

 - SELECT 절에서 표시할 대상 컬럼에 Alias(별칭)을 저장할 수 있음

 

예제) EMP 테이블의 전체 컬럼 조회(14개 행, 8개 컬럼으로 구성)

 

예제) EMP 테이블에서 특정 컬럼을 조회

 

예제) 표현식을 통해 원본 데이터 값을 가공하여 새로운 형태로 출력

  --> SAL * 1.1 은 물리적으로 존재하는 컬럼이 아니라, 기존 컬럼을 활용한 연산식으로 SELECT 절에서 일시적으로 정의되어 출력되는 표현식임

 

예제) 연결 연산자(||)를 사용한 문자열 결합

  --> 연결 연산자를 사용하면, 분리된 두 대상(문자열 또는 컬럼 등)을 하나의 값으로 결합할 수 있음

 

예제) 잘못 작성된 SELECT 절

  --> 일반적으로 *와 특정 컬럼명을 함께 지정하여 사용할 수 없음

 

컬럼 Alias(별칭)

 - 컬럼명 대신 출력할 임시 이름을 의미함

 - SELECT 절에서만 정의 가능하며, 테이블의 실제 컬럼명은 변경되지 않음

 - 컬럼명 뒤에 AS와 함께 별칭을 지정하며, AS는 생략 가능함

 

** 특징 및 주의사항

 - SELECT 절보다 늦게 수행되는 ORDER BY 절에서만 컬럼 별칭 사용 가능

   (그 외 절에서 사용 시 에러 발생)

 - 한글 사용 가능(한글을 지원하는 캐릭터셋 설정 시)

 - 문자로 시작해야 하며, 예약어나 공백, 특수기호를 포함할 수 없음( _, #, $ 제외)

 - 이미 존재하는 예약어는 별칭으로 사용 불가( SELECT, FROM 등)

 

** 별칭 사용 시 쌍따옴표가 필요한 경우

1. 별칭에 공백을 포함하는 경우

2. 별칭에 특수문자를 포함하는 경우( _제외)

3. 별칭을 입력한 형태 그대로 전달해야 하는 경우

    * 대소문자를 그대로 유지하거나, 일반적으로 사용할 수 없는 예약어 등을 표현하는 경우

 

예제) 별칭 사용 예 ( AS 생략 가능)

 

예제) 별칭 선언 시 쌍따옴표가 필요한 경우 1

 

  --> 별칭에 공백이 포함된 경우 반드시 쌍따옴표와 함께 전달해야 함

 

예제) 별칭 선언 시 쌍따옴표가 필요한 경우 2

  --> 예약어를 별칭으로 사용할 경우 쌍따옴표 필수

 

FROM 절

 - 출력할 데이터가 저장된 테이블명 또는 뷰(View)명을 전달하는 절

 - 조인 시 여러 테이블을 전달할 수 있으며, 이 경우 컴마(,)로 구분함(Oracle 표준)

   (여러 테이블을 FROM 절에 나열하여 조인 가능)

 - 테이블 별칭 선언 가능

   (Oracle 에서는 AS 사용 불가, SQL Server 에서는 AS 사용 또는 생략 가능)

 - 테이블 별칭을 선언한 경우 컬럼 구분자는 반드시 테이블 별칭으로만 전달해야 하며, 테이블명을 사용할 경우 에러가 발생함

 - Oracle에서는 FROM 절을 생략할 수 없음(의미상 참조할 테이블이 없는 경우 DUAL 테이블을 사용함)

 - SQL Server 에서는 FROM 절이 필요 없는 경우 생략 가능(예: 현재 날짜 조회)

 

* DUAL TABLE

 - Oracle 에서 제공하는 특수한 테이블임

 - 주로 단일 행을 반환하는 쿼리에서 사용됨

 - 계산식이나 함수 호출 등에서 실제 테이블을 참조할 필요가 없을 때 사용함

 - 기본적으로 한 행과 한 컬럼을 가지고 있음

 

예제) Oracle에서 FROM 절을 생략할 경우 에러가 발생하는 경우

  --> Oracle 에서 FROM 절을 생략할 경우 에러가 발생함

 

 * DUAL 테이블 사용 필수

  --> 의미상 FROM 절이 필요 없는 경우 DUAL 테이블을 사용함

 

예제) 테이블 별칭 사용

 * 잘못된 문법

 * 올바른 문법

 

  --> 테이블 별칭을 선언한 경우, 컬럼 구분자로 테이블명을 사용할 수 없음

 

 

DISTINCT 를 사용한 중복 제거

 - 조회결과에서 중복된 행을 제거하고 유일한 값만 출력하기 위해 사용하는 키워드

 - SELECT 절 바로 뒤에 위치하여, 선택한 모든 컬럼 조합을 기준으로 중복 여부를 판단함

 - DISTINCT 는 SELECT 절에서 단 한 번만 지정 가능하며, 중복 적용은 불가능함

 

예제) DISTINCT 를 사용하여 EMP 테이블의 부서 번호 중복 제거

  --> EMP 테이블에 저장된 여러 직원의 부서 번호 중에서 중복을 제거하고 부서 번호의 종류만 조회하기 위해 DISTINCT를 사용함

 

예제) DISTINCT 에 여러 컬럼을 지정한 경우의 결과

  --> DISTINCT 에 여러 컬럼을 지정한 경우, 각 컬럼을 개별적으로 비교하는 것이 아니라 지정된 컬럼들의 조합이 모두 동일한 행만 중복으로 판단하여 제거한다. 따라서 동일한 부서번호라도 직무가 다르면 서로 다른 행으로 인식되어 결과에 함께 출력된다.