SQL WHERE, HAVING 총정리 (연산자와 그룹함수)
SQL WHERE, HAVING 총정리 (연산자와 그룹함수) — #정보처리기사 #SQL #SQLHAVING #SQLWHERE #SQL연산자 #SQL그룹함수 24년도 1회...
#정보처리기사 #SQL #SQLHAVING #SQLWHERE #SQL연산자 #SQL그룹함수
24년도 1회차 정보처리기사 필기 시험대비 공부를 진행하였습니다.
\* 본글은 PC버전에 최적화 되어있습니다.
**\\ **공부방법론은 가장 첫글에 있습니다. 참고하실 분들은 참고하세요! \\
3과목,데이터베이스 구축
view
WHERE
SQL문 SELECT, DELETE, UPDATE 등 자주 붙는 WHERE문에 대해 정리해보겠습니다.
WHERE 문은 코딩의 if문으로 보시면 되는데, 이때 조건 표기방법도 if와 유사한 점이 많습니다.
연산자
산술 연산자:
+, - , x, /
비교 연산자:
=, <>, >, <, >=, <=
\*<>는 "같지않다"의 뜻
논리 연산자:
NOT, AND, OR
NULL을 찾을때
속성값이 NULL인지 확인하는 코드는 IS NULL, 아닌지는 IS NOT NULL
=> NOT이 안들어가니 보기에 나오면 pass
문자열(LIKE)
% : 모든 문자를 대표함
\_ : 문자 하나를 대표함
: 숫자 하나를 대표함#
연산자 우선순위
산술 연산자: 좌 -> 우
\*우측으로 갈수록 낮아짐
관계 연산자: 모두 같음
논리 연산자: 좌 -> 우
\*우측으로 갈수록 낮아짐
종류별 비교: 산술 > 관계 > 논리
추가 연산자
between A and B: A~B까지 (A와 B를 포함함)
WHERE - INvs EXIST + 서브쿼리
서브쿼리: 서브쿼리는 쿼리문에서 먼저 수행되어 결과를 본 쿼리의 피연산자로 사용함.
IN과 ()사이에는 특정값, 서브쿼리 가능
EXIST와 ()사이에는 서브쿼리만 가능
-> 차후 추가설명
GROUP BY - HAVING
GRUOP BY: 특정 속성을 기준으로 그룹화하여 검색할 때 사용한다. 그룹함수와 함께 사용한다.
그룹함수 : GROUP BY정레 지정된 그룹별로 속성의 값을 집계할 함수를 기술하는 것 (아래 참고)
HAVING = GROUP BY와 함께 사용되며, 그룹에 대한 조건을 지정한다.
그룹함수 - HAVING
그룹으로 지정된 자료들의 속성의 값을 집계 - WHERE절에는 사용이 불가하다!
COUNT(속성명) : 그룹별 튜플 수
SUM9속성명): 그룹별 합계
AVG(속성명):그룹별 평균
MAX(속성명): 그룹별 최대값
MIN(속성명): 그룹별 최소값
STDDEV(속성명): 그룹별 표준편차
VARIANCE(속성명): 그룹별 분산
ex)
<<동아리원>>
| 이름 | 학과 | 학년 |
|---|---|---|
| 김민희 | 컴퓨터공학과 | 3 |
| 이만두 | 전산학과 | 2 |
| 신마나 | 화학공학과 | 2 |
| 김지현 | 컴퓨터공학과 | 4 |
| 박준호 | 전산학과 | 3 |
| 박지은 | 화학공학과 | 3 |
| 김민지 | 컴퓨터공학과 | 4 |
| 박종우 | 정보통신공학과 | 2 |
| 이성훈 | 전기전자 | 4 |
| 조현우 | 기계공학과 | 2 |
동아리원테이블에서 3학년 이상인 학생이 2명이상이있는 학과의 튜플 수(= 학생 수)는?.
| SELECT 학과, COUNT(\) AS 학과수 WHERE 학년 >= 3 GROP BY 학과 HAVING COUNT(\) >= 2; |
|---|
풀이:
- 구하려고 하는 것이 뭔지 확인한다: 학과의 튜플 수 = 학생수
-> SELECT 학과, COUNT(\*) FROM 동아리원;
- 조건을 확인한다: 3학년 이상인 학생
-> SELECT 학과, COUNT(\*) FROM 동아리원 WHERE 학년 >= 3;
-> COUNT(\*)전체 집계시, 조건(학년 >=3)에 해당하는 부분만 집계
- 나머지 조건을 확인한다: 학과의 학생수가 2명이상이다.
-> SELECT 학과, COUNT(\) FROM 동아리원 WHERE 학년 >=3 GROUP BY 학과 HAVING COUNT(\) >= 2
-> 학과별로 그룹을 만들어 학생수가 2명이상인 것만 집계하도록 할 수 있다.
-> AND절러도 표현이 가능하다
WHERE vs HAVING
- where은 단독 사용가능, HAVING은 GROUP BY와 사용 가능
- where은 집계함수 사용 불가
- 속성을 집계할때는 GROUP BY(속성별 그룹화) + HAVING 사용
