Database

DAY 6 ( 집계 함수, GROUP BY 절, HAVING 절, JOIN(조인)[ 등가조인, INNER, OUTER, CROSS ], DDL )

도키마 2024. 5. 23. 12:41

 

 

 

 

 

 

오늘의 노래 추천 🍂

 

 
emily
아티스트
Jeremy Zucker, Chelsea Cutler
앨범
brent ii
발매일
1970.01.01

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DAY 6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

** 집계 함수 **

 

 

 

 

 

 

 

 

 

 

 

집계 함수란 ?

 

여러 행을 입력받아 하나의 결과 값으로 출력하는 함수 ( 다중행 함수 )

 

 

* NULL 값을 제외하는 특성 보유

그룹화(GROUP BY)가 되어있는 상태에서만 사용이 가능

데이터 그룹화는 집계 함수와 함께 사용하는 것 권장

 

 

 

 

내장 함수의 분류

 



 

 



집계 함수의 종류

 

집계 함수의 종류

 

 

 

 

 

 

 

 ㅡ COUNT 함수 ㅡ

COUNT 실습

 

COUNT 실습

 

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

 

 

 

 ㅡ SUM 함수 ㅡ

SUM 실습

 

 

 

 ㅡ MAX, MIN 함수 ㅡ

MAX, MIN 실습

 

 

 

 ㅡ AVG 함수 ㅡ

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 실습
GROUP BY 실습

 

 

 

** GROUP BY 유의점 **

 

GROUP BY 유의점

 

* SELECT 와 GROUP BY 의 컬럼을 일치시켜줘야 함

단, 집계함수는 가능

 

 

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 절 ㅡ

 

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 ( 조인 ) 실습 ]

 

 

JOIN 실습

 

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 ( 조인 ) 실습 ]

 

INNER JOIN 실습
SELECT 절 테이블명 생략

 

* 조인 조건 응용 *

INNER JOIN 실습

 

 

 

 

 

CROSS JOIN ( Cartesian Product : 카티션 곱 )

 

JOIN 조건절을 적지 않고

조인 조건이 없는 경우 생길 수 있는 모든 데이터 조합을 조회

 

 

SELECT 테이블1컬럼 , 테이블2. 컬럼 명...

 

FROM 테이블1 (CROSS) JOIN 테이블2


* ON 절이 없으며 'CROSS' 는 생략 가능

 

 

카티션 곱 발생

107 X 27 = 2889

 

* 이러한 이유로 잘 사용하지 않음

 

 

 

 

 

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 ( 조인 ) 실습 ]

 

LEFT OUTER JOIN 실습

 

RIGHT OUTER JOIN 실습

 

FULL 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. 컬럼명 ;

 

* 오라클 문

 

 

 

3개 테이블 JOIN

 

 

 

 

 

 

 

 

 


.

.

.

다음시간에 계속...

 

 

 

 

 

 

 

 

 

 

 

 

 

부록 : 팩토리 설정으로 창 재설정

접속이 닫혔을 때

 

 



 

 

 

 

 

 

 

 

 

 

 

 

** 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 테이블 생성 실습 ]

 

 

테이블 컬럼 생성

 

테이블 컬럼 생성

 

실습