🐶 집합연산자
테이블을 연결짓고, 원하는 정보를 찾을 수 있다.
집합연산자란 개별적인 SQL결과집합에 대해서 집합 간 연산을 수행할 때 사용하는 연산자.
사용 규칙
1. 첫번쨰 SELECT문과 두번째 SELECT문의 컬럼들이 서로 1:1대응을 해야한다.
2. 데이터 타입이 일치를 해야한다.
3. 컬럼, 데이터타입 둘 중 하나라도 다르다면 에러가 발생한다.
4. SELECT 문은 위에서 아래 방향으로 연산을 수행한다.
5. UNION뿐만 아니라 올 수 있는 연산자로는 UNION, UNION ALL(합집합), INTERSECT(교집합), MINUS(차집합)
UNION을 사용하면 서로 다른 테이블에 존재하는 컬럼들을 같은 컬럼에 정보로 넣어서 보여준다.
문제1. 학생명, 학과담당자명 한꺼번에 조회하고 싶다면????
학생명 -> student테이블
학과담당자명 -> major테이블
각각 다른 테이블에 존재하기 때문에 서로 다른 테이블에서 정보를 가지고 오려면은 union을 사용하면 좋을 것
이처럼 union을 사용하면 두 개의 테이블을 하나의 컬럼으로 세로병합이 가능하다.
JOIN과 UNION의 차이점
JOIN은 행을 기준으로 가로병합이라서 행의 개수에는 변화가 없다.
UNION은 컬럼을 기준으로 세로병합이라서 행의 개수에 변화가 있다.
※ UNION은 중복을 허용하지 않는다. UNION ALL은 이와 달리 중복을 허용한다. ▼
이 처럼 중복이 허용된 결과를 확인할 수 있다.
중복된 데이터가 없는 모습을 확인할 수 있다.
🐶 GROUP BY
지정한 컬럼 내 존재하는 데이터들 중에서 같은 데이터들을 묶는 역할
데이터에 대한 계산을 수행해서 단일 값을 받아내는 집계함수(평균, 총합, 개수, 최대, 최소) 와 함께 사용된다.
문제1. 학생 정보에서 각 학년별로 학생 수를 알고 싶다.
만약 GROUP BY를 삭제한다면???
GROUP BY가 없어서 학년이라는 기준을 만들어주지 않았다. 그래서 COUNT(학년) 그대로 해서 100모든 학년의 수를 구한 것이다.
문제2. 학년별로 마일리지 평균을 알고싶다.
문제3. ORDER BY, WHERE 을 사용하여 3학년 이상의 학생 수 를 내림차순으로 정렬하라.
🐶 HAVING
HAVING은 그룹 내 조건을 걸어서 원하는 데이터만 추출하고 싶을 때 사용하낟.
GROUP BY를 해서 그룹화를 하고 해당 그룹에서 조건을 걸고 싶다면 HAVING을 사용한다.
GROUP BY → HAVING(그룹 내 조건)
문제1. 학년별 학생 수 중에서 25명 미만인 학년은 몇 학년일까???
HAVING '학년별 학생수' < 25 하니 결과가 나오지 않는다...ㅜㅜ
원래는 나와야하는데;;
문제2. 학과를 GROUP 해서 학과별 마일리지가 50초과인 학과 정보를 알아보아라.
이제 혼자서도 가능하다 ㅎㅎ
완강~
정리: UNION -> 합집합, GROUPBY, ORDER BY, WHERE, HAVING
GROUP BY없이 집계함수 사용하면 기준없이 모든 컬럼들을 계산함.
ORDER BY는 내림차순/ 오름차순 사용시 필수적으로 이용됨.
HAVING는 GROUP BY 로 그룹별로 나눈 데이터를 조건에 부합하도록 또 데이터를 추출한다.
GROUP BY -> HAVING & 집계함수
'SQL' 카테고리의 다른 글
Anaconda와 Jupyter Notebook 소개 및 설치 (0) | 2023.08.23 |
---|---|
MySQL 환경만들기 (0) | 2023.08.22 |
INNER/ OUTER JOIN (0) | 2023.08.17 |
조건문 (0) | 2023.08.16 |
WebSQL 내장함수(문자열/ 숫자 함수) (0) | 2023.08.16 |