데이터 베이스 Database(DB) #7

이온·2023년 6월 24일
0

데이터베이스

목록 보기
7/7
post-thumbnail

1. 그룹화: GROUP By

GROUP BY를 더 잘 활용하려면 SUM, AVG, COUNT, MAX, MIN를 활용하기

SUM 함수 & Group By


결과

AVG 함수 & Group By

결과

AVG 함수 & Group by & Order by, Case else, Round 함수

MAX 함수 & Group By

결과

예시

SELECT user_id, SUM(컬럼명) FROM rental GROUP BY user_id; 
-- user_id가 같은 열에서 컬럼의 내용을 다 더한 값을 출력

SELECT user_id, AVG(컬럼명) FROM rental GROUP BY user_id; 
-- user_id가 같은 열의 컬럼의 평균을 출력

SELECT user_id, MAX(컬럼명) FROM rental GROUP BY user_id; 
-- user_id가 같은 열중에서 해당 컬럼명이 가장 큰 값을 출력

SELECT user_id, MIN(컬럼명) FROM rental GROUP BY user_id;
-- user_id가 같은 열중에서 해당 컬럼명이 가장 작은 값을 출력

HAVING with GROUP BY

집계 결과 값에 조건식 더하기

SELECT 변수 1, 변수 2, 변수 3, ... 
FROM 테이블 이름
WHERE 조건1
And 조건2
GROUP BY 변수 1, 변수 2 (그룹의 기준 컬럼)
HAVING 조건
Order By 변수 1, ...;

결과

2. JOIN: LeftJoin, InnerJoin, OuterJoin

SQL JOIN : 테이블 결합, 두개의 테이블에서 조회하기

LEFT JOIN

: 왼쪽 테이블에 추가 정보 붙이기
왼쪽 테이블의 모든 값을 포함하여 연결하기

SELECT a.변수 1, a.변수 2, b.변수 3 등 검색할 컬럼
FROM 테이블1 a
LEFT JOIN (연결할)테이블2 b
ON a.공통속성변수= b.공통속성변수; (조건)

LEFT JOIN vs RIGHT JOIN

INNER JOIN

: 조인 컬럼이 같은 건 만 붙여서 조회 (교집합)

SELECT a.변수 1, a.변수 2, b.변수 3, ... 
FROM 테이블1 a
INNER JOIN 테이블2 b
ON a.공통속성변수= b.공통속성변수; (연결한 조건 컬럼)
--테이블이름.컬럼명 으로 구분

OUTER JOIN

SELECT a.변수 1, a.변수 2, b.변수 3, ... 
FROM 테이블1 a
FULL OUTER JOIN 테이블2 b
ON a.공통속성변수= b.공통속성변수;

3. Subquery

서브쿼리(Subquery)

• 메인쿼리 안에 있는 또 다른 SELECT 문장, 종속적인 관계
• 소괄호로 둘러싼 형태로 작성: (SELECT * FROM table....)
• 알려지지 않은 기준을 이용한 검색에 유용
• 메인 쿼리가 실행되기 이전에 한번만 실행됨
• 한 문장에서 여러번 사용 가능
• where절에 사용되는 서브쿼리가 가장 일반적인 형태이다
• 서브쿼리 안에는 order by절은 사용 불가
• 연산자의 오른쪽에 사용되어야함

스칼라 서브쿼리(Scalar Subquery)

• SELECT절에서 사용하는 서브쿼리 (위치에 따른 작명)
• 서브쿼리에서 반환되는 값은 오로지 하나의 컬럼이나 표현식
• 마치 JOIN을 사용하는 것과 같은 결과를 낸다

SELECT a.변수1,a.변수2, 
		(SELECT b.변수3
		From 테이블 b
		WHERE a.공통칼럼=b.공통칼럼) , a.변수 4
FROM 테이블 이름 a 

WHERE 조건
Order By a.변수 2, ...;

인라인 뷰(Inline View)

• 메인쿼리의 FROM절에서 사용하는 서브쿼리
• 테이블처럼 사용되므로,여러개의 컬럼이나 표현식이 포함될 수 있음

SELECT 변수 1, 변수 2, 변수 3,...
FROM 테이블 이름 a
LEFT JOIN (SELECT 변수1, 변수2, 변수3, 변수4, 변수5
		  From 테이블) b 
ON a.공통컬럼=b.공통컬럼

WHERE 조건
Order By 변수 1, ...;

중첩 서브쿼리(Nested Subquery)

• 메인쿼리의 WHERE절에서 사용하는 서브쿼리
• 조건절의 일부이므로, 특정 컬럼 값과 비교하기위해 여러개의 열과 행을 포함 가능

SELECT 변수 1, 변수 2, 변수 3,... 
FROM 테이블 이름 a

WHERE a.공통변수 = (SELECT b.공통변수 From 테이블 b
				 WHERE 조건)
Order By 변수 1, ...;

안티 조인

• 메인쿼리의 WHERE절에서 사용하는 서브쿼리
• 포함되지 않는 경우를 서브쿼리로 반환

SELECT 변수 1, 변수 2, 변수 3,... 
FROM 테이블 이름 a
WHERE a.공통변수 NOT IN (SELECT b.공통변수 From 테이블 b
					  WHERE 조건)
Order By 변수 1, ...;

Distinct

• 키워드 중복 제거
• SELECT 바로 뒤에 위치

SELECT DISTINCT 변수 1, 변수 2, 변수 3,... 
FROM 테이블 이름
WHERE 조건
Order By 변수 1, ...;

• 지시변수(Dummyvariable)확인하기

참고도서 및 링크

• 홍형경–누구나쉽게SQL
https://commons.wikimedia.org/wiki/File:SQL_Joins.svg
https://www.sqlservertutorial.net/sql-server-basics/sql-server-subquery/

profile
👩🏻‍💻

0개의 댓글