본문 바로가기
카테고리 없음

[집합개념]DISTINCT, 집합연산, 부분 문자열 비교, Date 함수, Oder By

by 빅데이터1020 2020. 7. 19.
SMALL

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은 내림차순으로 정렬됨

LIST