오늘의 노래 추천 🍂
- 아티스트
- Jeremy Zucker, Chelsea Cutler
- 앨범
- brent ii
- 발매일
- 1970.01.01
DAY 6
** 집계 함수 **
집계 함수란 ?
여러 행을 입력받아 하나의 결과 값으로 출력하는 함수 ( 다중행 함수 )
* NULL 값을 제외하는 특성 보유
그룹화(GROUP BY)가 되어있는 상태에서만 사용이 가능
데이터 그룹화는 집계 함수와 함께 사용하는 것 권장

집계 함수의 종류

ㅡ COUNT 함수 ㅡ


* COUNT 함수는 * (아스타리스크)를 사용할 수 있음 (다른 집계함수는 에러)
ㅡ SUM 함수 ㅡ

ㅡ MAX, MIN 함수 ㅡ

ㅡ AVG 함수 ㅡ

** GROUP BY **
GROUP BY 란 ?
특정 컬럼을 기준으로 행을 그룹화 후 각각 단일행으로 출력
* 그룹화란 : 중복 데이터들을 묶어서 하나의 결과로 출력
SELECT 컬럼 명 1, 컬럼 명 2, 컬럼 명 N
FROM 테이블 명
WHERE 조건
GROUP BY 기준
* 실행 순서 : FROM - WHERE - GROUP BY - SELECT
* 출력되는 행의 개수가 감소하기 때문에 GROUP BY보다 실행 순서가 느린
(HAVING, ORDER BY, SELECT절) 에는 출력할 수 있는 행이 제한됨
** 집계함수로 처리하는 컬럼은 HAVING, ORDER BY, SELECT절에서도 사용이 가능
ㅡ GROUP BY 절 ㅡ


** GROUP BY 유의점 **

* SELECT 와 GROUP BY 의 컬럼을 일치시켜줘야 함
단, 집계함수는 가능

부록 : SQL 실행 순서
SELECT > FROM > WHERE > GROUP BY > HAVING > ORDER BY
SQL의 작성 순서
FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY
SQL의 실행 순서
** HAVING **
HAVING 이란 ?
GROUP BY로 그룹화 후 집계 완료된 대상을 조건을 통해 참인 결과 출력
* GROUP BY 절이 존재할 때만 사용 가능
** 참인 결과만 출력된다는 점에서 WHERE 절과 비슷하지만
HAVING 절은 그룹화된 대상에서 출력이 된다는 점에서 다르다
SELECT 컬럼 명 1, 컬럼 명 2, 컬럼 명 N
FROM 테이블 명
WHERE 조건
GROUP BY 기준
HAVING 그룹 조건
* 실행 순서 : FROM - WHERE - GROUP BY - HAVING - SELECT
** WHERE이 GROUP BY 이전에 실행되기 때문에 GROUP BY의 결과에 조건을 부여하기 위해 HAVING 필요
ㅡ HAVING 절 ㅡ



[ WHERE 절과 HAVING 절의 차이 ]
중요해서 한번 더 강조
* 참인 결과만 출력된다는 점에서 WHERE 절과 비슷하지만
HAVING 절은 그룹화된 대상에서 출력이 된다는 점에서 다르다
WHERE 절 집계함수 사용 X
HAVING 절 집계함수 사용 O
* 실행 순서 : FROM - WHERE - GROUP BY - HAVING - SELECT
** WHERE이 GROUP BY 이전에 실행되기 때문에 GROUP BY의 결과에 조건을 부여하기 위해 HAVING 필요
** JOIN ( 조인 ) **
필요한 데이터를 하나의 테이블에 몰아넣으면 '중복데이터'라는 문제가 생김
중복데이터 방지를 위해 "정규화(테이블 분리)" 진행
.
.
.
정규화 이후 여러 테이블에서 데이터를 가져오려면?
JOIN 이란 ?
두 개 이상의 테이블에서 필요한 데이터를 합산해 불러오는
ㅡ JOIN 의 방식 ㅡ
Non EQUI JOIN ( 비등가 조인 )
두 개의 테이블이 서로 정확하게 일치하지 않는 경우
등가 연산자 ( = ) 가 아닌 연산자를 사용
잘안씀
EQUI JOIN ( 등가 조인 )
두 개의 테이블이 정확하게 일치하는 경우
등가 연산자 ( = ) 를 사용
SELECT 테이블1. 컬럼 명, 테이블2. 컬럼 명...
FROM 테이블1, 테이블2
WHERE 테이블1. 컬럼명 = 테이블2. 컬럼명 ;
* WHERE 절에 JOIN(조인)의 조건을 기술
[ JOIN ( 조인 ) 실습 ]



* WHERE 절에 JOIN 조건 이외에도 AND 연산자를 통해 추가 조건 설정 가능
부록 : 테이블 별칭 설정
* FROM 절에서 테이블 별칭 설정 가능
별칭 설정 시 FROM 절 이후 실행 문장에서는 무조건 별칭 사용
** 별칭은 출력결과에 영향을 주지 않음


** ANSI 조인 문법 **
모든 DBMS 에서 사용가능한 조인 문법 ( 미국 표준협회 제작 )
SELECT 테이블1. 컬럼 명, 테이블2. 컬럼 명...
FROM 테이블1 JOIN 테이블2
ON 테이블1. 컬럼명 = 테이블2. 컬럼명
( WHERE 일반 조건식 ; )
* WHERE 절에 일반 조건식을 따로 작성
조인 조건은 PK 와 FK 관계
단, 모두 그런 것은 아님
ANSI 조인의 종류
[ INNER JOIN, CROSS JOIN, OUTER JOIN ]
INNER JOIN ( 내부조인 )
JOIN 조건에서 동일한 값이 있는 행만 반환
* JOIN 의 기본값으로 'INNER'는 생략 가능
** INNER JOIN 과 EQUI (등가조인)은 같은 개념 !!
SELECT 테이블1. 컬럼 명, 테이블2. 컬럼 명...
FROM 테이블1 INNER JOIN 테이블2
ON ( 테이블1. 컬럼명 = 테이블2. 컬럼명 )
* SELECT 절에서 테이블 1군데에만 존재하는 단독 컬럼일 경우 . (경로) 를 생략하고 컬럼 명만 입력할 수 있음 (권장X)
[ INNER JOIN ( 조인 ) 실습 ]


* 조인 조건 응용 *

CROSS JOIN ( Cartesian Product : 카티션 곱 )
JOIN 조건절을 적지 않고
조인 조건이 없는 경우 생길 수 있는 모든 데이터 조합을 조회
SELECT 테이블1. 컬럼 명, 테이블2. 컬럼 명...
FROM 테이블1 (CROSS) JOIN 테이블2
* ON 절이 없으며 'CROSS' 는 생략 가능
카티션 곱 발생

* 이러한 이유로 잘 사용하지 않음
OUTER JOIN ( 외부조인 )
두 개 테이블 간 교집합 + 한쪽 테이블에만 있는 데이터 조회
한쪽 데이터의 NULL 값도 출력하고자 할 때 사용
* 두 테이블 간 합집합
SELECT 테이블1. 컬럼 명, 테이블2. 컬럼 명...
FROM 테이블1 방향 (OUTER) JOIN 테이블2
ON ( 테이블1. 컬럼명 = 테이블2. 컬럼명 )
* ON 절이 없으며 'CROSS' 는 생략 가능
* OUTER JOIN 종류 *
LEFT (OUTER) JOIN
왼쪽 테이블을 기준으로 NULL 값 포함하여 출력
왼쪽 테이블 행 개수를 기준으로 오른쪽 데이터 값에 NULL 이 있더라도 생략 없이 그대로 출력한다는 뜻
* (오라클문법) 조인 조건절에서 오른쪽 컬럼에 (+) 기호 작성
RIGHT (OUTER) JOIN
오른쪽 테이블을 기준으로 NULL 값 포함하여 출력
오른쪽 테이블 행 개수를 기준으로 왼쪽 데이터 값에 NULL 이 있더라도 생략 없이 그대로 출력한다는 뜻
* (오라클문법) 조인 조건절에서 왼쪽 컬럼에 (+) 기호 작성
FULL (OUTER) JOIN
전체 NULL 값 포함하여 출력
오라클에서 지원 X
[ OUTER JOIN ( 조인 ) 실습 ]



.
.
.
3개 이상 테이블을 조인하려면?
SELECT 테이블1. 컬럼 명, 테이블2. 컬럼 명...
FROM 테이블1 JOIN 테이블2
ON ( 조인 조건식 ) JOIN 테이블3
ON ( 조인 조건식 )
* 조인 조건식 2개
** N개 테이블을 조인할 시, 조인 조건식은 N-1 개
SELECT 테이블1. 컬럼 명, 테이블2. 컬럼 명...
FROM 테이블1, 테이블2, 테이블3
WHERE 테이블1. 컬럼명 = 테이블2. 컬럼명 ;
AND 테이블2. 컬럼명 = 테이블3. 컬럼명 ;
* 오라클 문

.
.
.
다음시간에 계속...
부록 : 팩토리 설정으로 창 재설정

** DDL **
DDL 이란 ?
" 데이터 정의어 "
테이블같은 저장소 객체를 만들거나 수정하는 언어
* DDL 명령어 종류 *
CREATE
테이블 등의 객체를 '생성'하는 명령어
ALTER
테이블 등의 객체를 '변경'하는 명령어
RENAME
테이블의 '이름을 변경'하는 명령어
TRUNCATE
테이블 안의 '데이터를 삭제'하는 명령어
DROP
테이블 등의 객체를 '삭제'하는 명령어
* 자주 사용하는 자료형 *
VARCHAR2 ( N )
가변형 문자형
N 크기만큼 입력 받음
NUMBER ( P, s )
숫자형 값을 P 자리 만큼 입력받고 s 자리 만큼 소수를 입력받음
* 오라클 데이터베이스에서는 실수와 정수 모두 표현 가능
** 소괄호를 생략하게 되면 최대값인 38 크기가 들어감
DATE
현재 날짜 값을 입력받는 날짜형 자료형

* 테이블 생성 규칙 *
1. 대소문자 구분 X
* 자동 대문자 변경
2. 중복되는 테이블명 X (에러)
3. 하나의 테이블 내에서 컬럼명 중복 X (에러)
4. 테이블명은 문자로 시작, 예약어는 사용이 불가능
* a-z, A-Z, 0-9, ㄱ-ㅎ, _, $, # 특수문자만 가능
[ DDL 테이블 생성 실습 ]




뿅