T'SPACE

다채로운 에디터들의 이야기

컴퓨터공학/데이터베이스 DB

기초 SQL문 정리 SFW, HAVING, GROUP BY ...

Tonny Kang 2024. 10. 19. 10:08
반응형

SFW 쿼리


SELECT <열>
FROM <테이블 이름>
WHERE <조건>

 

이를 관계 대수로 표현하면 다음과 같습니다:

  1. FROM - 어떤 테이블인가?
  2. WHERE - 어떤 행에 관심이 있는가?
  3. SELECT - 어떤 속성을 찾고 있는가?

예) CS 학과의 모든 강사 중 급여가 70,000달러보다 많은 사람들의 이름을 찾으시오.

SELECT i.name
FROM Instructor i
WHERE i.deptName='CS' and i.salary>70000
반응형

유용한 연산자들


DISTINCT
쿼리 결과에서 중복을 제거합니다.

 

ORDER BY
쿼리 결과를 일부 속성에 따라 정렬합니다.

SELECT 
FROM
WHERE
ORDER BY {속성} DESC, {속성} ASC

 

ASC - 오름차순 정렬 (기본값)
DESC - 내림차순 정렬

 

LIKE
간단한 문자열 패턴 매칭을 위해 사용합니다.

SELECT
FROM
WHERE {속성} LIKE {패턴_매칭}

패턴 매칭을 위한 두 가지 기호:

  • % : 0개 이상의 임의의 문자
  • _ : 1개의 임의의 문자
    대소문자를 구분합니다.
728x90

Q. '%' 또는 '_'를 포함한 문자열을 어떻게 찾을 수 있나요?


  • 이스케이프 문자를 사용합니다.
  • 예) name LIKE 'Michael_JORDAN'

예시:
'a__c': 'a'로 시작하고 'c'로 끝나는 4글자 문자열
'%%%': '%'를 포함하는 문자열
'a%_b': 'a'로 시작하고 'b'로 끝나며 최소 3글자인 문자열

 

누락된 값 처리, 결측값



NULL
값이 없을 때 NULL을 사용할 수 있습니다.

  • 값이 존재하지 않음
  • 값이 존재하지만 알 수 없음
  • ...

NOT NULL 제약 조건

CREATE TABLE Customer(
    ssn CHAR(11) NOT NULL,
    ..,
    ..
);

 

ssn 속성에 NULL 값을 가질 수 없습니다.

NULL과의 비교

  • NULL +/%- 는 NULL입니다.
  • NULL >≤≥< 는 UNKNOWN이 됩니다.
  • NULL = NULL → UNKNOWN

Q. NULL이 있는 행을 어떻게 선택할 수 있나요?
→ "IS NULL"을 사용합니다.

SELECT name FROM students WHERE gpa IS NULL

 

3가지 값 논리 UNKNOWN 포함


UNKNOWN을 포함한 논리를 이해하는 방법은 TRUE=1, FALSE=0, UNKNOWN=0.5로 생각하는 것입니다.
AND=min
OR=MAX
NOT(X)=1-X

 

집계 함수


간단한 집계

SELECT agg(열)
FROM <테이블 이름>
WHERE <조건>

agg는 다음과 같을 수 있습니다:
COUNT, SUM, AVG, MAX, MIN, ...
COUNT를 제외한 모든 집계는 단일 속성에 적용됩니다.

  • COUNT는 왜 그렇지 않나요?
    • COUNT(Ai): 속성 Ai에서 NULL이 아닌 튜플의 수
    • COUNT(*): 모든 튜플의 수

집계 함수에서 DISTINCT를 사용할 수 있습니다.

SELECT agg(DISTINCT 열)
FROM <테이블 이름>
WHERE <조건>

 

GROUP BY

SELECT agg(열)
FROM <테이블 이름>
WHERE <조건>
GROUP BY <열>

해당 열의 값으로 그룹화합니다.

 

GROUP BY + WHERE

SELECT agg(열)
FROM <테이블 이름>
WHERE gpa>2.5
GROUP BY gender

만약 한 성별이 gpa가 2.5 이상인 사람이 없다면 NULL이 결과로 나올 수 있습니다.

 

HAVING


관심 있는 그룹을 지정합니다.
그룹에 대한 조건입니다.

SELECT agg(열)
FROM <테이블 이름>
WHERE <조건>
GROUP BY <열>
HAVING <조건>

예) HAVING COUNT(*)>10
그룹에 10개 미만의 속성이 있으면 해당 그룹은 표시되지 않습니다.

 

평가 순서 (HAVING)


  1. FROM - 테이블의 교차곱을 생성합니다.
  2. WHERE - 행을 제거합니다.
  3. GROUP BY - 레코드를 그룹으로 나눕니다.
  4. HAVING - 그룹을 제거합니다.
  5. SELECT - 각 그룹에 대해 하나의 행을 생성합니다.
반응형