• WHERE 절에는 명시적인 값들의 집합을 사용할 수 있음
예) 프로젝트 번호 1, 2, 3에서 일하는 모든 종업원들의 등록번호를 검색하 시오.
SELECT DISTINCT ESSN FROM WORKS_ON
WHERE PNO IN(1,2,3) ;
• SQL은 애트리뷰트의 값이 NULL(없음)인지 검사하는 기능도 있음
SQL 에서 명시적 집합과 널
• SQL은 애트리뷰트의 값이 NULL(없음)인지 검사하는 기능도 있음
– 애트리뷰트를 NULL과 비교하기 위해서 IS나 IS NOT을 사용함
– SQL에서는 각각의 널 값이 다른 널 값들과 다르다고 간주하므로 = 형태의 비교 는 적당하지 않음
예) 감독관이 없는 모든 종업원들의 이름을 검색하시오.
SELECT FNAME, LNAME FROM EMPLOYEE
WHERE SUPERSSN IS NULL ;
• Self-Join & 질의 결과 애트리뷰트의 재 명명 (AS 사용)
재명명 애트리뷰트와 조인된 테이블
Q15: 직원과 그의 상사이름은 ?
SELECT E.LNAME AS EMPLOYEE_NAME, S.LNAME AS SUPERVISOR_NAME FROM EMPLOYEE AS E, EMPLOYEE AS S WHERE E.SUPERSSN=S.SSN ;
Ch4 2 Database Systems
E S
• SQL2에서는 FROM 절에 조인 연산의 결과를 지정할 수도 있음
–
Q16-1: Research 부서에 근부하는 직원과 그의 주소는 ?DBMS 종류에 따라서 지원하지 않을 수 있음
SELECT FNAME, LNAME, ADDRESSFROM (EMPLOYEE JOIN DEPARTMENT ON DNO=DNUMBER) WHERE DNAME='Researsh’ ;
Q16:
재명명 애트리뷰트와 조인된 테이블
Q16:
SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER
AND DNAME=“Research” ;
• 외부 조인 (outer join)
– SQL2에서는 INNER JOIN(JOIN과 같음), LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN 등을 사용할 수 있음
– 후자의 세 경우에는 키워드 OUTER를 생략해도 됨
재명명 애트리뷰트와 조인된 테이블(cont.)
Q17: Research 부서에 근부하는 직원과 그의 주소는 ?
SELECT E.LNAME AS EMPLOYEE NAME, S.LNAME AS SUPERVISOR NAME FROM (EMPLOYEE E LEFT OUTER JOIN EMPLOYEE S
Ch4 4 Database Systems
FROM (EMPLOYEE E LEFT OUTER JOIN EMPLOYEE S
ON E.SUPERSSN = S.SSN ) ;
Left Outer Join :
Left Table (Employee E)은 조인에 참여하지 않아도 모두 결과에 나타난다.
유사하게 Right Outer Join, Full Outer Join도 지원
• Left Outer Join
E S
재명명 애트리뷰트와 조인된 테이블(cont.)
•
다양한 집계함수를 지원함집단함수(aggregate funcion)와 그룹화(grouping)(cont.)
Q18: Research 부서에 근무하는 직원들의 급여 통계 ? SELECT SUM(SALARY) as Sum, MAX(SALARY) as Max,
MIN(SALARY) as Min, AVG(SALARY) as Avg FROM EMPLOYEE, DEPARTMENT
WHERE DNO=DNUMBER AND DNAME="Research";
Ch4 6 Database Systems
Q18_1: Research 부서에 근무하는 직원수 ? SELECT COUNT(*)
FROM EMPLOYEE, DEPARTMENT
WHERE DNO=DNUMBER AND DNAME=“Research” ;
• 그룹화 (grouping)
– 특정 속성(들)의 값이 동일한 튜플들을 모아서 그룹을 생성 – 각 그룹에 대하여 집계함수를 적용함
– 이 때, 그루핑의 기준이 되는 속성들을 그룹화 속성이라고 하며, SQL의 GROUP BY절에 지정함
– 대부분의 경우, SELECT절에 그룹화 애트리뷰트(들)를 지정하여 그 값과 그 값에 해당하는 투플 그룹에 집단함수를 적용한 결과를 동시에 반환함
– SELECT 절에는 그룹화 애트리뷰트(DNO)와 각 튜플들의 그룹에 적용할 집단 함수
집단함수(aggregate funcion)와 그룹화(grouping)(cont.)
– SELECT 절에는 그룹화 애트리뷰트(DNO)와 각 튜플들의 그룹에 적용할 집단 함수 들만 포함함
(a)
Q19: 부서별로 부서번호, 부서소속 종업원수, 부서의 평균봉급은 ? SELECT DNO, COUNT(*), AVG(SALARY)
FROM EMPLOYEE GROUP BY DNO ;
집단함수(aggregate funcion)와 그룹화(grouping)(cont.)
Ch4 8 Database Systems
(a)
Q20: 부서별로 성별로 부서번호, 성별, 부서소속 종업원수, 부서의 평균봉급은 ? SELECT DNO, SEX, COUNT(*), AVG(SALARY)
FROM EMPLOYEE GROUP BY DNO, SEX ;
집단함수(aggregate funcion)와 그룹화(grouping)(cont.)
• SQL 질의는 6개의 절로 구성되지만, 필수사항은 처음의 두 개 뿐임
SELECT <애트리뷰트 목록>
FROM <테이블 목록>
[WHERE <조건>]
[GROUP BY <집단화 애트리뷰트>]
[HAVING <집단 조건>]
[ORDER BY <애트리뷰트 목록>]
–
SELECT 절은 질의 결과에 포함될 애트리뷰트들이나 함수를 나열함SQL 질의에 대한 논의와 요약
–
SELECT 절은 질의 결과에 포함될 애트리뷰트들이나 함수를 나열함–
FROM 절은 질의의 대상을 명시하는 곳으로 조인된 릴레이션이나 릴레이션(들) 을 지정함–
WHERE 절은 튜플들에 대한 조건을 명시함–
GROUP BY절은 그룹화 애트리뷰트들을 지정함–
HAVING 절은 그룹들에 대한 조건을 지정함–
ORDER BY 절은 정렬 기준이 되는 애트리뷰트(들)을 지정함–
질의의 평가 순서는 먼저 FROM, WHERE절, GROUP BY절, HAVING절, SELECT절, ORDER BY 절 순서임Ch4 10 Database Systems