자격증/SQLD

SQLD SQL 기본 및 활용(1~4) - 12일차

awspspgh 2024. 10. 25. 17:21
목차
1. 관계형 데이터베이스 개요
2. SELECT문
3. 함수
4. WHERE절

 

1. 관계형 데이터베이스 개요

데이터베이스(Database)와 DBMS(Database Management System)

- 데이터베이스 : 데이터 집합

- DBMS : 데이터를 효과적으로 관리하기 위한 시스템

 

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

- 계정 : 데이터 접근 제한을 위한 여러 업무별/시스템별 계정이 존재 

- 테이블 : DBMS의 DB 안에서 데이터가 저장되는 형식

- 스키마 : 테이블이 어떠한 구성으로 되어있는지, 어떠한 정보를 가지고 있는지에 대한 기본적인 구조를 정의

 

 테이블

1. 정의 

- 행(로우)과 열(컬럼)을 갖는 2차원 구조로 구성, 데이터를 입력하여 저장하는 최소 단위

- 컬럼은 속성이라고도 부름

 

2. 특징

- 특징 하나의 테이블은 반드시 하나의 유저(계정) 소유여야 함

- 테이블명은 중복될 수 없지만, 소유자가 다른 경우 같은 이름으로 생성 가능

 

 

SQL(Structured Query Language)

- 관계형 데이터베이스에서 데이터 조회 및 조작, DBMS 시스템 관리 기능을 명령하는 언어

 

 관계형 데이터베이스 특징

- 데이터 분류, 정렬, 탐색 속도가 빠름

- 신뢰성이 높고, 데이터 무결성 보장

- 기존의 작성된 스키마를 수정하기 어려움

- 데이터베이스의 부하를 분석하는 것이 어려움

 

 데이터 무결성(integrity)

- 데이터 정확성과 일관성을 유지하고, 데이터에 결손과 부정합이 없음을 보증하는 것

 

 데이터 무결성 종류

1) 개체 무결성 : 테이블의 기본키를 구성하는 컬럼(속성)은 NULL 값이나 중복값을 가질 수 없음

2) 참조 무결성 : 외래키 값은 NULL이거나 참조 테이블의 기본키 값과 동일해야 한다. (외래키란 참조 테이블의 기본키에 정의된 데이터만 허용되는 구조이므로)

3) 도메인 무결성 : 주어진  속성 값이 정의된 도메인에 속한 값이어야 함

4) NULL 무결성 : 특정 속성에 대해 NULL을 허용하지 않는 특징

5) 고유 무결성 : 특정 속성에 대해 값이 중복되지 않는 특징

6) 키 무결성 : 하나의 릴레이션(관계)에는 적어도 하나의 키가 존재해야 함 (테이블이 서로 관계를 가질 경우 반드시 하나 이상의 조인키를 가짐)

 

* 도메인 : 각 컬럼(속성)이 갖는 범위

* 릴레이션 : 테이블간 관계를 말함

* 튜플 : 하나의 행을 의미함

* 키 : 식별자

 

 ERD(Entity Relationship Diagram)

- ERD란 테이블 간 서로의 상관 관계를 그림으로 표현한 것

- ERD의 구성요소에는 엔터티(Entity), 관계(Relationship), 속성(Atttribute)가 있다.

  -> 현실 세계의 데이터는 이 3가지의 구성으로 모두 표현 가능

 

2. SELECT 문

 SQL 종류

 

 SELECT 문 구조

- SELECT 문 구조 다음과 같이 6개 절로 구성

- 각 절의 순서대로 작성해야 함(GROUPBY와 HAVING은 서로 바꿀 수 있지만 보통 사용하지 않음)

 

 SELECT 절

- SELECT 문장을 사용하여 불러올 컬럼명, 연산 결과를 작성하는 절

 

** 문법

 

** 특징

- SELECT절에서 표시할 대상 컬럼에 Alias(별칭) 지정 가능

 

예제) emp 테이블의 전체 컬럼 조회

 

예제) 표현식을 사용하여 원본과 다른 데이터 출력 가능

 

 컬럼 Alias(별칭)

- 컬럼명 대신 출력할 임시 이름 지정(SELECT절에서만 정의 가능, 원본 컬럼명은 변경되지 X)

- 컬럼명 뒤에 AS와 함께 컬럼 별칭 전달(AS는 생략 가능)

 

 특징 및 주의사항

- SELECT 문보다 늦게 수행되는 ORDER BY절에서만 컬럼 별칭 사용 가능(그 외 절에서 사용시 에러 발생)

- 이미 존재하는 예약어는 별칭으로 사용 불가

- 다음의 경우 별칭에 반드시 쌍따옴표 전달 필요

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

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

3) 별칭 그대로 전달할 경우(입력한 대소를 그대로 출력)

 

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

 

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

 

  

 FROM 절

- 테이블 별칭 선언 가능(ORACLE은 AS 사용 불가, SQL Server는 사용 / 생략가능)

- ORACLE에서는 FROM절 생략 불가(의미상 필요 없는 경우 DUAL테이블 선언)

  ※ ORACLE 23c 버전부터는 생략 가능

- SQL Server에서는 FROM절 필요 없을 경우 생략 가능(오늘 날짜 조회 시)

 

예제) ORACLE에서의 FROM절 생략 시 에러 발생 케이스(DUAL 테이블 사용)

 

예제) 테이블 별칭 사용 예제

 

 

3. 함수

 함수 정의

- input value와 output value의 관계를 정의한 객체

 

 함수 기능

- 데이터의 계산을 수행

- 개별 데이터의 항목을 수정

- 열 이터의 유형(data type)을 변환

 

함수의 종류(입력값의 수에 따라)

- 단일행 함수 : input과 ouput의 관계가 1:1

- 복수행 함수 : 여러 건의 데이터를 동시에 입력 받아서 하나의 요약값을 리턴 (그룹함수 또는 집계함수라고도 함)

 입/출력값의 타입에 따른 함수 분류

1) 문자형 함수

※ 문자함수 종류

 

2) 숫자형 함수

숫자함수 종류

 

3) 날짜형 함수

 날짜함수 종류

 

4) 변환함수

- 값의 데이터 타입을 변환

 

 변환함수 종류

 

5) 그룹함수

- 여러 값이 input값으로 들어가서 하나의 요약된 값으로 리턴

 

 그룹함수 종류

 

6) 일반함수

 일반(기타)함수 종류

 

예) DECODE 사용 예제1

 

예) DECODE 사용 예제2

 

예) NVL, NVL2 사용 예제

 

예) COALESCE 사용 예제

 

예) CASE문 사용 예제1

 

예) CASE문 사용 예제2

 

4. WHERE 절

- 테이블의 데이터 중 원하는 조건에 맞는 데이터만 조회하고 싶을 경우 사용(엑셀과 필터기능과 유사)

- 여러 조건 동시 전달 가능(AND와 OR로 조건 연결)

- NULL 조회 시 IS NULL / IS NOT NULL 연산자 사용(= 연산자로 조회 불가)

 

 

** 문법

 

** 주의사항

- ORACLE은 문자 상수의 경우 대소문자를 구분함

- MySQL은 기본적으로 문자 상수의 대소문자를 구분하지 않음

 

예제) 이름이 SMITH인 직원 조회(조건절에 문자 상수 사용)

 

예제) SAL이 1500이상인 사원 정보 조회(숫자 상수 전달)

 

 

예제) COMM 값이 NULL인 직원 정보 출력

 

예제) 여러 조건 전달 - AND 연산자의 사용

DEPTNO가 10번이면서 SAL이 2000이상인 직원 출력

 

예제) 여러 조건 전달 - OR 연산자의 사용

DEPTNO가 10번이거나 SAL이 2000이상인 직원 정보 출력

 

  -> 위와 똑같은 조건이지만 두 조건을 연결하는 논리연산자를 AND(모두 만족)로 사용할 때와 결과가 다름. OR은 두 조건중 하나만 성립해도 되는 두 조건 결과의 합집합을 출력하는 논리연산자임

 

 IN 연산자

- 포함연산자로 여러 상수와 일치하는 조건 전달 시 사용

 

예제) SMITH와 SCOTT의 직원 정보 출력

 

  -> 이름이 SMITH이면서 SCOTT일 수는 없으므로 두 조건을 각각 만족하는 합집합을 구하라는 의미임.

하지만 동일한 조건대상(ENAME)이 계속 반복돼야 하는 불편함이 있음 -> IN 연산자 사용

 

 

  -> IN 연산자를 사용하면 조건대상(ENAME)과 연산자(=)의 반복을 줄일 수 있음. 이 때, ()안의 상수도 문자상수와 날짜상수는 홀따옴표 필수 

 

 BETWEEN A AND B 연산자

- A보다 크거나 같고 B보다 작거나 같은 조건을 만족

 

예제) SAL이 2000 이상 3000 이하인 직원 정보 출력

 

  -> 역시 SAL이 반복되는 특징을 보임 => BETWEEN A AND B 연산자 사용

 

 

  -> BETWEEN 연산자를 사용하면 SAL에 대한 반복을 할 필요 없음

 

예제) BETWEEN 연산자 주의사항

 

  -> BETWEEN A AND B에서 A가 B보다 더 큰 값일 경우 아무것도 조회되지 않음

 

LIKE 연산자

- 정확하게 일치하지 않아도 되는 패턴 조건 전달 시 사용

- %와 _를 함께 사용됨

1) %: 자릿수 제한 없는 모든이라는 의미

2) _: _하나당 한 자릿수를 의미하며 모든 값을 표현함

 

예제) LIKE 연산자

 

 NOT 연산자

- 조건 결과의 반대집합. 즉, 여집합을 출력하는 연산자

- NOT 뒤에 오는 연산 결과의 반대 집합 출력

- 주로 NOT IN, NOT BETWEEN A AND B, NOT LIKE, NOT NULL로 사용

 

예제) NOT 연산자의 사용

 

    -> 이 경우 "3000보다 작거나 같은" 조건으로 변경 가능하므로 위처럼 NOT을 사용하지 않는다.

 

  -> 1000이상 3000이하의 반대 집합 -> 1000미만 또는 3000초과

 

※ 출처 : 홍쌤의 데이터랩 - SQLD