DISTINCT 키워드
질의 결과에 중복된 튜플들이 나타날 수 있는데, 중복된 튜플을 제거하려면 키워드 DISTINCT를 사용합니다.
[중복된 튜플이 나타날 수 있는 질의문]
SELECT SALARY
FROM EMPLOYEE;
[DISTINCT를 사용해서 중복 튜플을 제거하는 질의문]
SELECT DISTINCT SALARY
FROM EMPLOYEE;
집합연산 - 합집합, 차집합, 교집합
SQL의 결과에 대하여 합집합(UNION)연산, 차집합(EXCEPT)연산, 교집합(INTERSECT)연산을 제공합니다.
연산의 결과에서 중복은 제거됩니다.
[Q. 1]
'Smith가 일반직원 혹은 부서의 관리자로 참여하는 프로젝트는?
(SELECT PNUMBER
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM = DNUMBER AND MGRSSN = SSN AND LNAME = "Smith")
UNION
(SELECT PNUMBER
FROM PROJECT, WORKS_ON, EMPLOYEE
WHERE PNUMBER = PNO AND ESSN = SSN AND LNAME = 'Smith');
*처음 괄호() : Smith가 관리자인 PROJECT
두 번째 괄호(): Smith가 일반직원으로 참여하는 PROJECT
부분 문자열 비교
SQL은 LIKE 비교 연산자를 사용해서 문자열에 대해 비교 조건을 적용할 수 있습니다.
부분 문자열을 표현할 때 '*'는 임의 개수의 문자를 의미하고, '_'는 임의의 한 문자를 의미합니다.
[Q. 2] 주소가 Houston인 모든 종업원을 검색하라
SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE ADDRESS LIKE "Houston*';
[Q. 3] 1950년대 태어난 모든 사원을 검색하라
SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE BDATE LIKE '_ _ 5 _ _ _ _ _ _ _ ';
*BDATA값은 문자열로 'YYYY-MM-DD' 형태로 저장되었다고 가정함
Date 함수를 이용한 질의
필드의 타입을 Date 타입으로 지정한 경우 날짜시간 타입의 속성 값으로부터 년, 월, 일 값을 추출하고 시작시간과 종료시간의 차이를 계산할 수 있습니다.
1) DatePart 함수
- 날짜시간 타입의 속성값으로부터 년, 월, 일 값을 추출
- DatePart("yyyy", "2012-10-01") → 2012
DatePart("m", "2012-10-01") → 10
DatePart("d", "2012-10-01") → 01
[Q. 4] 사원들의 태어난 해를 구하기
SELECT LNAME, DATEPART("yyyy", BDATE) AS '태어난 해'
FROM EMPLOYEE
2) DateDiff 함수
- 시작시간과 종료시간의 차이를 계산하는 함수
- DateDiff("d", 시작시간, 종료시간) → 시간차이를 "DAY"단위로 계산
DateDiff("n", 시작시간, 종료시간) → 시간차이를 "minute"단위로 계산
DateDiff("h", 시작시간, 종료시간) → 시간차이를 "hour"단위로 계산
Order By - 질의 결과의 정렬
Order By절을 사용해서 질의 결과를 정렬할 수 있습니다.
디폴트 정렬은 오름차순이에요!
내림차순은 DESC, 오름차순은 ASC로 나타냅니다.
[Q. 5] 프로젝트에 참여하는 종업원을 부서의 알파벳 순서대로, 각 부서 내에서는 성과의 이름 알파벳 순서대로 출력
SELECT DNAME, LNAME, FNAME, PNAME
FROM DEPARTMENT, EMPLOYEE, WORKS_ON, PROJECT
WHERE DNUMBER = DNO AND SSN = ESSN AND PNO = PNUMBER
ORDER BY DNAME ASC, LNAME, FNAME DESC;
*DNAME은 오름차순으로, LNAME도 디폴트값인 오름차순으로, FNAME은 내림차순으로 정렬됨