Database - SELECT문 Part 4

Bomin Seo·2022년 7월 22일
0

ORDER BY 절

  • 사용자가 SELECT문에서 질의 결과의 순서를 명시하지 않으면 사용자에게 제시되는 순서가 정해져 있지 않다.
  • ORDER BY절에서 하나 이상의 애트리뷰트 또는 표현식을 사용하여 검색 결과를 정렬할 수 있다.
  • 기본 정렬 순서는 ASC(오름차순)이며 DESC를 사용하여 내림차순으로 지정할 수 있다.
  • 널값은 오름차순에서 가장 마지막에 나타나고 내림차순에서는 가장 앞에 나타난다.

집단함수

  • 검색된 여러 투플들의 집단에 적용되는 함수
  • 1개의 애트리뷰트에 적용되어 단일 값을 반환한다.
  • SELECT절 또는 HAVING절에만 사용할 수 있다.
  • COUNT(*)를 제외하고는 널값을 제거한 후 남아 있는 값들에 대해서 집단 함수의 값을 구한다.
  • COUNT(*)는 릴레이션의 모든 행들의 총 개수를 구하며 COUNT(att)는 해당 애트리뷰트의 널값이 아닌 값들의 개수를 구한다.
  • DISTINCT가 집단 함수 앞에 사용되면 집단 함수가 적용되기 전에 먼저 중복을 제거한다.
  • 집단 함수를 적용하지 않은 애트리뷰트는 SELECT절에서 기준 애트리뷰트로 사용하여야 질의문을 작성할 수 있다.

그룹화

  • GROUP BY절에 사용된 애트리뷰트에 동일한 값을 갖는 투플들이 하나의 그룹으로 묶인다.
  • 그룹화에 사용된 애트리뷰트르르 Grouping attribute라고 한다.
  • SELECT절에는 집단 함수, 그룹화 애트리뷰트만 나타날 수 있다.

HAVING절

  • 어떤 조건을 만족하는 그룹들에 대해서만 집단함수를 적용할 수 있다.
  • 각 그룹마다 하나의 값을 갖는 애트리뷰트를 사용하여 각 그룹이 만족해야하는 조건을 명시한다.
  • 그룹화 애트리뷰트에 같은 값을 갖는 투플들의 그룹에 대한 조건을 나타내고, 조건을 만족하는 그룹들만 질의 결과에 나타난다.
  • HAVING절에 나타나는 애트리뷰트는 반드시 GROUP BY절에 나타나거나 집단함수에 포함되어야 한다.
SELECT DNO, AVG(SALARY) AS AVGSAL, MAX(SALARY) AS MAXSAL
FROM EMPLOYEE
GROUP BY DNO
HAVING AVG(SALARY) >= 250000;

집합 연산

  • 합집합 호환성을 가지는 릴레이션에 한해서 적용할 수 있다.
  • UNION / EXCEPT / INTERSECT / UNION ALL / EXCEPT ALL / INTERSECT ALL
    • ALL이 있는 연산자는 중복을 제거하지 않기 때문에 중복을 제거하는 연산보다 연산 속도가 빠르다.

### 조인 - 2개 이상의 릴레이션으로부터 연관된 투플들을 결합한다. - 일반적인 형식은 아래의 SELECT문과 같이 FROM절에 두 개 이상의 릴레이션들이 열거되고, 두 릴레이션에 속하는 애트리뷰트들을 비교하는 조인 조건이 WHERE절에 포함된다. - 조인 조건은 두 릴레이션 사이에 속하는 애트리뷰트 값들을 비교 연산자로 연결한 것이다. - 동등 조인이 가장 많이 사용된다.

SELF JOIN

  • 한 릴레이션에 속하는 투플을 동일한 릴레이션에 속하는 투플들과 조인하는 것
  • FROM 절에서 별칭을 통하여 서로 다른 2개의 릴레이션으로 표현한다.

중첩 질의 (Nested query)

  • 질의의 WHERE 또는 FROM절에 다시 ‘(SELECT … FROM … WHERE …)’ 형태로 포함된 SELECT문 (괄호로 묶어서 표시함)
  • 부질의(subquery)라고 한다
  • 중첩 질의를 포함하는 질의를 외부 질의라고 부른다.
  • INSERT, DELETE, UPDATE문에도 사용될 수 있다.
  • 중첩 질의의 결과는 세 가지 경우가 있음
    • 한 개의 스칼라값(단일 값)
    • 한 개의 애트리뷰트로 이루어진 릴레이션
    • 여러 애트리뷰트로 이루어진 릴레이션

1개의 스칼라값이 반환되는 경우

scala

  • 컬럼 값으로 사용될 수 있는 원자값
  • WHERE절에서 상수 또는 애트리뷰트가 사용될 위치에 나타난다.

한 개의 애트리뷰트로 이루어진 릴레이션이 반환되는 경우

  • 중첩 질의의 결과로 한 개의 애트리뷰트로 이루어진 다수의 투플들이 반환될 수 있다.
  • 외부 질의의 WHERE절에서 IN, ANY(SOME), ALL, EXISTS와 같은 연산자를 사용해야 한다.
    • IN: 한 애트리뷰트가 값들의 집합에 속하는가를 테스트
    • ANY: 한 애트리뷰트가 값들의 집합에 속하는 하나 이상의 값들과 어떤 관계를 갖는가를 테스트
    • ALL: 한 애트리뷰트가 값들의 집합에 속하는 모든 값들과 어떤 관계를 갖는가를 테스트
    • EXISTS: 중첩 질의의 결과가 빈 릴레이션인지 여부를 검사함
    • 중첩 질의의 결과가 빈 릴레이션이 아니면 참이 되고, 그렇지 않으면 거짓


여러 애트리뷰트들로 이루어진 릴레이션이 반환되는 경우

  • 단일 애트리뷰트들로 이루어진 릴레이션이 반환되는 경우와 마찬가지로 IN, ANY, ALL, EXISTS 중에 하나를 사용하여 프레디킷을 만들어 사용할 수 있다.
  • IN, ANY, ALL을 사용하는 경우에는 결과 릴레이션과 호환되는 투플 구조를 갖는 투플을 사용해서 비교해야 한다.

상관 중첩 질의 (correlated nested query)

  • 중첩 질의의 WHERE절에 있는 프레디키트에서 외부 질의에 선언된 릴레이션의 일부 애트리뷰트를 참조하는 질의
  • 중첩 질의의 수행 결과가 단일 값이든, 하나 이상의 애트리뷰트로 이루어진 릴레이션이든 외부 질의로 한 번만 결과를 반환하면 상관 중첩 질의가 아니다.
  • 상관 중첩 질의에서는 외부 질의를 만족하는 각 투플이 구해진 후에 중첩 질의가 수행된다.
  • 상관 중첩 질의는 외부 질의를 만족하는 투플 수만큼 여러 번 수행될 수 있다.

FROM절에 사용된 중첩 질의

  • FROM절에 저장된 일반 테이블과 함께 중첩 질의를 사용할 수 있다.
  • 중첩 질의는 테이블 이름이 없으므로 별칭을 사용하여 이름을 부여한다.
profile
KHU, SWCON

0개의 댓글