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

데이터 모델링과 SQL ⑤ 관계형 데이터 베이스, SELECT문, 함수, WHERE절, GROUP BY/HAVING절, ORDER BY절

by hey-min-eee 2024. 10. 13.

1. 관계형 데이터 베이스

- 데이터 베이스(DB, DataBase) : 데이터를 저장하는 공간

- 관계형 데이터 베이스(RDB, Relational DataBase) : 2차원 테이블 형태로 데이터를 표현하여 각 테이블의 관계를 정의함

- RDBMS(Relational DataBase Management System) : RDB를 관리, 감독하기 위한 시스템으로 Orcale, MySQL, Maria DB, Postgre SQL 등

- 테이블(Table) : 관계형 데이터 베이스의 기본 단위, 가로(=행=ROW)와 세로(=열=COLUMN)으로 구성

2. SELECT문

(1) SELECT문

- SQL의 구조 : *** SELECT > From *** > Where > join > Group By > havivng > order by

- SELECT문 : 테이블에 저장되어 있는 데이터를 조회할 때 사용되는 명령어

- SELECT 컬럼명 : 지정한 컬럼명의 데이터만 조회됨

- SELECT * : 전체 컬럼 조회, 컬럼 순서는 테이블에 저장된 순서

- SELECT DISTINCT 컬럼명 : 지정된 컬럼명의 중복을 제외한 데이터가 조회

- WHERE 절이 있으면 해당 조건에 맞는 ROW가 조회됨

- Alias 사용 가능 : 테이블 명이나 컬럼명에 별도의 별칭을 붙일 수 있음, 테이블 명을 짧게 줄일 수 있고, 변수명을 새롭게 지정할 수 있음, 새로운 이름앞에 as을 붙이거나 빈칸으로 두면 됨, select 이름 as 성명/select 이름 성명으로 사용  

(2) 연산자

- 합성 연산자(||) : 문자와 문자를 연결할 때 사용

3. 함수

(1) 함수의 종류

함수 내장 함수 단일 행 함수
다중 행 함수 집계 함수
그룹 함수
윈도우 함수
사용자 정의 함수

- 다중행 함수는 이후 수업에서 다룰 예정이며, 단일행 함수(select, where, order by절에서 사용 가능)에 대해서 알아봄

(2) 문자/숫자/날짜형 함수

- 문자형 함수

LOWER 문자열을 소문자로
UPPER 문자열을 대문자로
ASCII 문자의 ASCII를 반환
CHR/CHAR ASCII 값에 해당하는 문자 반환 (CHR(10) : 줄바꿈)
CONCAT 문자열 1, 2를 연결
SUBSTR/SUBSTRING 문자열 중 m 위치에서 n개의 문자 반환
SUBSTR('SQLC', 2, 2 ) = QL
LENGTH/LEN 문자열 길이를 숫자로 반환
LTRIM/RTRIM('문자열','x') 왼쪽 혹은 오른쪽 문자열부터 시작하여 'x' 나오면 제거하고 다른 문자열 나오면 STOP
TRIM ('x' from '문자열') 양쪽 문자열에서 'x' 나오면 제거하고 다른 문자열 나오면 STOP
LPAD(대상 문자, 지정 길이, 채울 문자) 왼쪽에 문자를 채워 길이를 맞출 때 사용

 

- 숫자형 함수

SIGN(n) 숫자가 양수면 1, 음수면 -1, 0이면 0 반환
MOD(숫자1, 숫자2) 숫자 1을 숫자 2로 나누어 나머지 변환
CEIL/CEILING(n) 크거나 같은 최소 정수 반환
FLOOR(n) 작거나 같은 최대 정수 리턴
ROUND 반올림 (ROUND(실수, 자릿수))
TRUNC 버림

 

- 날짜형 함수

※ ORACLE : 공유 가능, SQL Server : 사용자간 공유 불가, Windows/Linux에서만 사용 가능

SYSDATE()/GETDATE() 현재 날짜, 시각
EXTRACT/DATEPART 날짜에서 데이터 출력
EXTRACT('YEAR'|'MONTH'|'DAY' from DATE)
TO_NUMBER(TO_CHAR(dat,'YYYY'))  
ADD_MONTH(date, n) n개월을 더한 날짜 변환
ADD_MONTH(SYSDATE, 6), '월요일' 6개월 후 첫번째 월요일

(3) NULL 관련 함수, 조건 함수

- NULL 함수

NVL(식1, 식2) 식 1의 값이 NULL이면 식 2 출력
NVL(컬럼명, 값1)과 같은 의미의 함수들
= DECODE(컬럼명, NULL, 값1, 컬럼명)
= CASE WHEN 컬럼명 IS NULL THEN 값1 ELSE 컬럼명 END
= [SQL Server] IS NULL(컬럼명, 값)
NVL2(컬럼명, 값1, 값2) DECODE(컬럼명, NULL, 값1, 값2)와 같은 의미
ISNULL(식1, 식2) 식 1의 값이 NULL이면 식 2 출력
NULLIF(식1, 식2) 식1이 식2와 같으면 NULL을 아니면 식 1을 출력
COALESCE(식1, 식2) NULL이 아닌 첫번째 값을 리턴, 모두 NULL이면 NULL 반환

 

- 조건 함수

CASE WHEN 함수 CASE WHEN 조건1 WHEN 조건2 ELSE 조건3 END AS 컬럼명
변경된 값은 컬럼명에 새로 저장
ELSE는 생략 가능, 생략 시 조건들에 해당되지 않는 값들은 NULL로 처리

 

4. WHERE절

- WHERE : 조건식을 작성하는 절

- 비교 연산자, SQL 연산자, 논리 연산자와 사용 가능

- 비교 연산자 : =, >, <, !=, <>, ^=

- SQL 연산자 : between A and B, IN listA, like '비교 문자열', IS NULL ...

- 연산 우선순위 : 괄호 > NOT 연산자 > 비교연산자, SQL 연산자 > AND > OR

5. GROUP BY/HAVING절

-  GROUP BY : 데이터를 그룹별로 묶어서 집계 데이터를 도출할 수 있도록 해 줌

- 작성법 : GROUP BY 뒤에 기준이 되는 컬럼을 작성, 그 컬럼은 SELECT절에도 있어야 함. ALIAS(별칭) 사용 불가

- 사용 가능 집계 함수

COUNT(*) NULL 포함 행의 수
COUNT(표현식) NULL 제외 행의 수
SUM, AVR, MA, MIN 합계, 평균, 최소, 최대값
STDDEV 표준 편차
VARIAN 분산

- MAX, MIN, COUNT는 숫자, 문자, 날짜 유형에도 사용 가능

- HAVING : GROUP BY절에서 WHERE처럼 사용하는 조건절, 데이터를 그룹핑한 후 특정 그룹만 조회하고 싶을 때 사용

- 특징 

논리적으로 SELECT 절이 수행되기 전에 수행되므로 SELECT 절에 명시되지 않은 집계함수도 조건을 부여할 수 있음
단, WHERE절에 사용해도 되는 조건을 HAVING절에 쓰면 성능이 저하됨
SROUP BY 없이도 HAVIVNG절 사용 가능
(SELECT * FROM TABLE명 HAVING 집계함수)

6. ORDER BY절

- ORDER BY의 기능과 특징 : SELECT한 데이터를 정렬할 수 있음, SQL문 제일 마지막에 위치, SELECT절에서 정의하지 않은 컬럼도 사용 가능, 단, Table내에는 존재해야 함, 컬럼명 대신 ALIAS명이나 SELECT절의 칼럼 순서를 나타내는 정수도 사용 가능, ORDER BY절을 사용하지 않으면 임의 순서대로 출력됨

- ORDER BY 옵션 : ASC(오름차순), DESC(내림차순), DEFALUT값은 오름차순

- Oracle에서는 NULL이 가장 큰 값, SQL Server는 NULL이 가장 작은 값