학교수업/데이터베이스

데이터베이스 11주차 요약

메카인 2023. 1. 31. 18:47

그룹화

GROUP BY절에 사용된 애트리뷰트에 동일한 값을 갖는 투플들이 각각 하나의 그룹으로 묶인다.

따라서 SELECT절에서는 각 그룹마다 하나의 값을 갖는 애트리뷰트, 집단 함수, 그룹화에 사용된 애트리뷰트들만 나타날 수 있다.

SELECT DNO, AVG(SALARY) AS AVGSAL, MAX(SALARY) AS MAXSAL

FROM EMPLOYEE

GROUP BY DNO;

 

HAVING

이 조건을 만족하는 그룹들만 질의 결과에 나타난다.

GROUP BY절 이후에 적용한다.

HAVING AVG(SALARY) >= 2500000;

 

집합 연산 <그림1>

UNION ALL(합집합)을 제외하고 결과가 오름차순으로 정렬된다.

UNION ALL을 제외하고 모든 집합 연산의 결과 릴레이션에서 중복된 투플들이 자동적으로 삭제된다.

합집합 호환성을 가져야 한다.

 

조인 <그림2>

두 개 이상의 릴레이션으로부터 연관된 투플들을 결합한다.

주로 WHERE절에서 비교연산자를 사용하여 사용된다.

조인 조건이 명확해지도록 애트리뷰트 이름 앞에 릴레이션 이름이나 투플 변수를 사용하는 것이 좋다.

EMPLOYEE.DNO

OR

FROM EMPLOYEE AS E, DEPARTMENT AS D \N E.DNO

 

자체 조인(self join)

한 릴레이션에 속하는 투플을 동일한 릴레이션에 속하는 투플들과 조인하는 것을 자체 조인이라고 부른다.

SELECT E.EMPNAME, M.EMPNAME

FROM EMPLOYEE E, EMPLOYEE M

WHERE E.MANAGER = M.EMPNO ;

 

조인과 ORDER BY의 결합 <그림3>

중첩 질의(nested query) / 부질의(subquery)

중첩 질의로 결과로 반환 될 수 있는 값

1. 한 개의 스칼라 값 <그림>

비교연산자를 사용하여 중첩 질의의 결과와 비교하는데

중첩 질의의 SELECT절에 사용된 애트리뷰트의 데이터 타입은 외부 질의의 WHERE절에 사용된 애트리뷰트의 데이터 타입과 같아야 한다.

 

2. 한 개의 애트리뷰트로 이루어진 릴레이션 <그림>

WHERE절에서 IN, ANY(SOME). ALL, EXISTS와 같은 연산자를 사용해야 한다.

ANY ALL과 결합하여 사용할 수 있는 비교연산자들이 있다.

=ANYIN과 의미가 같고, <>ALLNOT IN과 의미가 같다.

 

3. 여러 애트리뷰트로 이루어진 릴레이션 <그림>

EXISTS 연산자를 사용하여 중첩 질의의 결과가 빈 릴레이션인지 여부를 검사한다.

*EXISTS subquery의 결과는 중첩 질의의 결과에 적어도 하나의 투플이 들어있으면 참이 되고, 그렇지 않으면 거짓이 된다.

*EXISTS 연산자는 단항연산자이다.

 

상관 중첩 질의(correlated nested query)

중첩 질의의 WHERE절에 있는 프레디키트에서 외부 질의에 선언된 릴레이션의 일부 애트리뷰트를 참조하는 질의를 상관 중첩 질의라고 부른다.

상관 중첩 질의에서는 외부 질의를 만족하는 각 투플이 구해진 후에 중첩 질의가 수행된다.

따라서 상관 중첩 질의는 외부 질의를 만족하는 투플 수만큼 여러 번 수행될 수 있다.

 

 

그룹화

GROUP BY절에 사용된 애트리뷰트에 동일한 값을 갖는 투플들이 각각 하나의 그룹으로 묶인다.

따라서 SELECT절에서는 각 그룹마다 하나의 값을 갖는 애트리뷰트, 집단 함수, 그룹화에 사용된 애트리뷰트들만 나타날 수 있다.

SELECT DNO, AVG(SALARY) AS AVGSAL, MAX(SALARY) AS MAXSAL

FROM EMPLOYEE

GROUP BY DNO;

 

HAVING

이 조건을 만족하는 그룹들만 질의 결과에 나타난다.

GROUP BY절 이후에 적용한다.

HAVING AVG(SALARY) >= 2500000;

 

집합 연산 <그림1>

UNION ALL(합집합)을 제외하고 결과가 오름차순으로 정렬된다.

UNION ALL을 제외하고 모든 집합 연산의 결과 릴레이션에서 중복된 투플들이 자동적으로 삭제된다.

합집합 호환성을 가져야 한다.

 

조인 <그림2>

두 개 이상의 릴레이션으로부터 연관된 투플들을 결합한다.

주로 WHERE절에서 비교연산자를 사용하여 사용된다.

조인 조건이 명확해지도록 애트리뷰트 이름 앞에 릴레이션 이름이나 투플 변수를 사용하는 것이 좋다.

EMPLOYEE.DNO

OR

FROM EMPLOYEE AS E, DEPARTMENT AS D \N E.DNO

 

자체 조인(self join)

한 릴레이션에 속하는 투플을 동일한 릴레이션에 속하는 투플들과 조인하는 것을 자체 조인이라고 부른다.

SELECT E.EMPNAME, M.EMPNAME

FROM EMPLOYEE E, EMPLOYEE M

WHERE E.MANAGER = M.EMPNO ;

 

조인과 ORDER BY의 결합 <그림3>

중첩 질의(nested query) / 부질의(subquery)

중첩 질의로 결과로 반환 될 수 있는 값

1. 한 개의 스칼라 값 <그림>

비교연산자를 사용하여 중첩 질의의 결과와 비교하는데

중첩 질의의 SELECT절에 사용된 애트리뷰트의 데이터 타입은 외부 질의의 WHERE절에 사용된 애트리뷰트의 데이터 타입과 같아야 한다.

 

2. 한 개의 애트리뷰트로 이루어진 릴레이션 <그림>

WHERE절에서 IN, ANY(SOME). ALL, EXISTS와 같은 연산자를 사용해야 한다.

ANY ALL과 결합하여 사용할 수 있는 비교연산자들이 있다.

=ANYIN과 의미가 같고, <>ALLNOT IN과 의미가 같다.

 

3. 여러 애트리뷰트로 이루어진 릴레이션 <그림>

EXISTS 연산자를 사용하여 중첩 질의의 결과가 빈 릴레이션인지 여부를 검사한다.

*EXISTS subquery의 결과는 중첩 질의의 결과에 적어도 하나의 투플이 들어있으면 참이 되고, 그렇지 않으면 거짓이 된다.

*EXISTS 연산자는 단항연산자이다.

 

상관 중첩 질의(correlated nested query)

중첩 질의의 WHERE절에 있는 프레디키트에서 외부 질의에 선언된 릴레이션의 일부 애트리뷰트를 참조하는 질의를 상관 중첩 질의라고 부른다.

상관 중첩 질의에서는 외부 질의를 만족하는 각 투플이 구해진 후에 중첩 질의가 수행된다.

따라서 상관 중첩 질의는 외부 질의를 만족하는 투플 수만큼 여러 번 수행될 수 있다.