목록프로그래밍/SQL (67)
쌓고 쌓다

HAVING 절 GROUP BY절에 의해 생성된 그룹을 대상으로 조건을 적용한다. ( WHERE절은 FROM에 명시된 테이블을 대상으로 조건을 적용한다. ) SELECT column, group function(column) FROM table [WHERE condition] [GROUP BY grou_by_expression] [HAVING group_condition] [ORDER BY column] 순서 1. 테이블에 WHERE 절의 조건을 만족하는 행 집합 생성 2. 위의 행 집합을 GROUP BY 절에 의해 그룹화 3. HAVING 절에 의해 조건을 만족하는 그룹을 선택 EX) 학생 수가 4명 이상인 학년에 대해 학년, 학생 수 출력 SELECT grade, COUNT(*) FROM studen..

GROUPING SETS? GROUP BY절에서 그룹 조건을 여러 개 지정할 수 있다. 각 그룹 조건에 대해 GROUP BY한 결과를 UNION ALL한 결과와 일치 GROUPING SETS절 GROUP BY절 GROUP BY GROUPING SETS(a, b, c) GROUP BY a UNION ALL GROUP BY b UNION ALL GROUP BY c GROUP BY GROUPING SETS(a, b, (b,c)) GROUP BY a UNION ALL GROUP BY b UNION ALL GROUP BY b, c GROUP BY GROUPING SETS(a, ROLLUP(b,c)) GROUP BY a UNION ALL GROUP BY ROLLUP(b, c) GROUP BY GROUPING SET..

ROLLUP 예제 1) 소속 학과별로 교수 급여 합계와 모든 학과 교수들의 합계를 출력 SELECT deptno, SUM(sal) FROM professor GROUP BY ROLLUP(deptno) ORDER BY deptno; ROLLUP(deptno)의 결과 1. (deptno) 2. 전체 합계 2) 학과 및 직급별 교수 수, 학과별 교수 수, 전체 교수 수를 출력하라 SELECT deptno, position, COUNT(*) FROM professor GROUP BY ROLLUP(deptno, position) ORDER BY deptno; ROLLUP(deptno, position)의 결과 1. (deptno, position) 2. (deptno) 3. 전체 합계 ROLLUP(A, B, C)..

그룹 함수 테이블의 전체 행을 하나 이상의 칼럼으로 그룹화하여 각 그룹의 결과를 출력 SELECT column, group function(column) FROM table [WHERE condition] [GROUP BY group_by_column] [HAVING group_condition] GROUP BY : group_by_column(칼럼)을 기준으로 그룹화함 HAVING : 그룹화하여 생성된 그룹에 조건 추가. 그룹 함수의 종류 종류 의미 COUNT 행의 개수 출력 MAX NULL을 제외한 최대 값 MIN NULL을 제외한 최소값 SUM NULL을 제외한 합계 AVG NULL을 제외한 평균 값 STDDEV NULL을 제외한 표준편차 VARIANCE NULL을 제외한 분산 값 GROUPING ..
DECODE 함수 IF문, CASE문을 하나의 SQL 명령문으로 표현할 수 있는 함수 비교 연산자는 '='만 가능 DECODE(expression|column, SEARCH1, RESULT1 [, SEARCH2, RESULT2, ...,] [, DEFAULT] ) 표현식 또는 칼럼의 값이 SEARCH1과 일치하면 RESULT1을 반환, SEARCH2와 일치하면 RESULT2를 반환 일치하는 값이 하나도 없거나 NULL인 경우에 DEFAULT 값을 반환 DEFAULT 값이 없다면 NULL을 반환 - 교수 테이블에서 교수의 소속 학과 번호를 학과 이름으로 변환 출력하라. ( 101이면 '컴퓨터공학과', 102이면 '멀티미디어학과', 201이면 '전자공학과', 나머지는 '기계공학과' ) SELECT deptn..
중첩 함수 함수를 여러 개 겹쳐서 사용하는 방법이다. 단일행 함수는 중첩하여 실행이 가능함. 안쪽 함수부터 실행하여 결과를 가장 가까운 바깥쪽 함수의 인수로 넘김. F3( F2 ( F1(column, arg1) , arg2), arg3) F1의 결괏값이 F2의 첫 인수로, F2의 결과는 F3의 첫 번째 인수로 사용된다. - 주민등록번호에서 생년월일을 추출하여 'YY/MM/DD' 형태로 출력 SELECT TO_CHAR( TO_DATE( SUBSTR(idnum,1,6), 'YYMMDD' ), 'YY/MM/DD' ) FROM student; NVL : NVL 변환 함수 NULL을 0 또는 다른 값으로 변환하기 위한 함수 NULL은 미확인 값으로 어떠한 연산을 해도 NULL이 나온다. NVL 함수를 이용하여 N..

묵시적인 데이터 타입 변환 오라클에서 데이터 타입을 내부적으로 변환하기도 함. WHERE A=B 에서 데이터 타입이 다른 경우 동일한 데이터 타입으로 내부적 변환이 이루어짐. 내부적 변환으로 인해 검색 속도가 저하될 수 있음. A의 데이터 타입 B의 데이터 타입 변환 결과 NUMBER VARCHAR2 또는 CHAR B를 NUMBER 타입으로 변환 VARCHAR2 또는 CHAR NUMBER A를 NUMBER 타입으로 변환 -> NUMBER 타입으로 맞춰진다고 보면 된다. 아래의 쿼리문을 보자. SELECT studno, name FROM student WHERE studno = '10102'; studno의 칼럼은 NUMBER 타입인데 문자 타입 '10102'와 비교를 한다. 이때 오라클 내부에서는 아래의..
숫자 함수 종류 의미 예 ROUND 지정한 자리까지 표현하여 반올림 ROUND(123.17, 1) -> 123.2 TRUNC 지정한 자리까지 표현하여 절삭 TRUNC(123.17, 1) -> 123.1 MOD m을 n으로 나눈 나머지 MOD(12, 10) -> 2 CEIL 입력값보다 큰 수중에서 가장 작은 정수 CEIL(123.17) -> 124 FLOOR 입력값보다 작은 수중에서 가장 큰 정수 FLOOR(123.17) -> 123 ROUND 함수 ROUND( expr | column, n ) expr 또는 column 값을 n+1자리에서 반올림하여 n자리까지 표현 n 값이 없으면 소수 자리에서 반올림하여 정수로 나타냄 n값이 음수이면 소수점 왼쪽 n+1자리에서 반올림하여 n자리까지 표현 - 101번 학..