정보처리기사 필기발행일 2024. 2. 26.원본 https://blog.naver.com/jword_/223362894542 ↗

SQL WHERE, HAVING 총정리 (연산자와 그룹함수)

SQL WHERE, HAVING 총정리 (연산자와 그룹함수) — #정보처리기사 #SQL #SQLHAVING #SQLWHERE #SQL연산자 #SQL그룹함수 24년도 1회...

#정보처리기사 필기#Naver Blog

#정보처리기사 #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;

풀이:

  1. 구하려고 하는 것이 뭔지 확인한다: 학과의 튜플 수 = 학생수

-> SELECT 학과, COUNT(\*) FROM 동아리원;

​

  1. 조건을 확인한다: 3학년 이상인 학생

-> SELECT 학과, COUNT(\*) FROM 동아리원 WHERE 학년 >= 3;

-> COUNT(\*)전체 집계시, 조건(학년 >=3)에 해당하는 부분만 집계

​

  1. 나머지 조건을 확인한다: 학과의 학생수가 2명이상이다.

-> SELECT 학과, COUNT(\) FROM 동아리원 WHERE 학년 >=3 GROUP BY 학과 HAVING COUNT(\) >= 2

​

-> 학과별로 그룹을 만들어 학생수가 2명이상인 것만 집계하도록 할 수 있다.

-> AND절러도 표현이 가능하다


WHERE vs HAVING

  1. where은 단독 사용가능, HAVING은 GROUP BY와 사용 가능

​

  1. where은 집계함수 사용 불가

​

  1. 속성을 집계할때는 GROUP BY(속성별 그룹화) + HAVING 사용