270 likes | 564 Views
제 6 장 함수. 그룹 함수 수학 함수 변환 함수 문자 함수 날짜 함수. 1. 그룹 함수. 그룹 함수의 종류 : SUM, AVG, COUNT( ), COUNT(*), MIN, MAX 등 그룹 함수의 결과는 하나의 ROW 이다 . 일반 열의 조회와 그룹함수는 동일한 SELECT 문에서 같이 수행 되지 못한다 . SQL> SELECT SNAME, MIN(SNO) FROM STUDENT *
E N D
제 6장 함수 • 그룹 함수 • 수학 함수 • 변환 함수 • 문자 함수 • 날짜 함수
1. 그룹 함수 • 그룹 함수의 종류 : SUM, AVG, COUNT( ), COUNT(*), MIN, MAX 등 • 그룹 함수의 결과는 하나의 ROW이다. • 일반 열의 조회와 그룹함수는 동일한 SELECT 문에서 같이 수행 되지 못한다. SQL> SELECT SNAME, MIN(SNO) FROM STUDENT * 1행에 오류: ORA-00937: 단일 그룹의 그룹 함수가 아닙니다. 제6장 함수
SUM • 열 값의 합계를 계산 한다. • 수치형 데이터를 대상으로 한다. • 교수들의 총 급여를 출력하라. SQL> SELECT SUM (SAL) FROM PROFESSOR; • 전산과 교수의 총 급여를 구하여라. SQL> SELECT SUM(SAL) FROM PROFESSOR WHERE SOSOK = ‘전산’ ; 제6장 함수
AVG • 열 값의 평균을 구한다. • 수치형 데이터를 대상으로 한다. • 교수들의 평균 급여를 출력하라. SQL> SELECT AVG(SAL) FROM PROFESSOR ; • 전산과 교수의 평균 급여를 구하여라. SQL> SELECT AVG(SAL) FROM PROFESSOR WHERE SOSOK = ‘전산’ ; 제6장 함수
COUNT( ) / COUNT (*) • COUNT( )는 열에 저장된 데이터 값들의 개수를 계산한다. • COUNT(*)는 모든 행의 개수를 계산한다. (NULL포함) • 수치형, 문자형, 날짜형 등의 열이 사용 가능하다. • 수강신청에 있는 행의 수를 출력하라. SQL> SELECT COUNT(*) FROM ENROLLMENT; • 수강 신청에 있는 성적이 입력 된 개수를 출력하라. SQL> SELECT COUNT (RANK) FROM ENROLLMENT; 제6장 함수
MAX / MIN • 열에 저장된 데이터 값들 중에서 가장 높은(낮은) 값을 출력한다. • 수치형, 문자열, 날짜형 등이 사용된다. • 교수들의 급여 중에서 가장 높은 값과 가장 낮은 값을 구하여라 . SQL > SELECT MAX(SAL), MIN(SAL) FROM PROFESSOR; • 가장 학번이 작은 학생의 학번을 조회 하여라. SQL> SELECT MIN(S_SN) FROM STUDENT; 제6장 함수
2. 수학함수 제6장 함수
DUAL • DUAL 테이블은 SYS USER가 소유하고 있는 단일 행에 단일 컬럼만을 갖는 테이블이다. • 일시적 산술 연산이나, 날짜 연산을 위해 사용한다. SQL> SELECT SYSDATE FROM STUDENT; SQL> SELECT SYSDATE FROM DUAL ; SQL> SELECT MOD (10,5) FROM DUAL; 제6장 함수
3. 변환 함수 • 문자와 숫자, 문자와 날짜간의 형 변환을 위한 함수 • TO_CHAR : 날짜나 숫자를 문자로 • TO_NUMBER : 문자를 숫자로 • TO_DATE : 문자가 일자로 변환 • 숫자 65를 문자로 출력하라 SQL> SELECT TO_CHAR(65) FROM DUAL; • 문자 65를 숫자로 출력하라 SQL> SELECT TO_NUMBER(65) FROM DUAL ; 제6장 함수
TO_CHAR (날짜를 문자로) • TO_CHAR(date , format) 제6장 함수
TO_CHAR (계속) SQL> SELECT TO_CHAR (SYSDATE, ‘YY/MM/DD’) DATE1, TO_CHAR (SYSDATE, ‘YYYY.MM.DD’) DATE2, TO_CHAR (SYSDATE, ‘MONTH DD. YYYY‘) DATE3, TO_CHAR (SYSDATE, ‘DY DD MON YY’ ) DATE4, TO_CHAR (SYSDATE, ‘DAY MON DD’) DATE5 FROM DUAL; SQL>SELECT P_NAME, TO_CHAR (IMYONG, ‘ YYYY “년”MM “월”DD “일”DAY ‘ ) FROM PROFESSOR; 제6장 함수
TO_CHAR (숫자를 문자로) SQL> SELECT TO_CHAR (1234,’09,999’) NUMBER1, TO_CHAR (1234.56,’99,999.99’) NUMBER2, TO_CHAR (1234,’$99,999’) NUMBER3, TO_CHAR (1234,’L99,999’) NUMBER4 FROM DUAL; 제6장 함수
TO_DATE (문자열을 날짜로) • TO_DATE(문자열 , format) SQL> SELECT TO_DATE (‘2001-04-15 13:32:34’, ‘YYYY-MM-DD HH24:MI:SS’) FROM DUAL; • 자기가 태어난 날부터 현재까지 며칠이 되는지 계산하자. SQL> SELECT SYSDATE – TO_DATE(‘20000630’,’YYYYMMDD’) FROM DUAL; 제6장 함수
4. 문자 함수 • CONCAT : 두개의 문자열을 결합하여 출력한다. SQL> SELECT CONCAT(S_NAME , SOSOK) FROM STUDENT; SQL> SELECT S_NAME || SOSOK FROM STUDENT; 제6장 함수
INITCAP, LOWER, UPPER • INITCAP : 단어의 첫 글자를 대문자로 하고 나머지는 소문자로 출력한다 • LOWER : 모든 문자를 소문자로 출력한다. • UPPER : 모든 문자를 대문자로 출력한다. SQL> INSERT INTO PROFESSOR VALUES ( 111, 'KimHS','COMPUTER','2000-03-01','조교수',1000000); SQL> Select INITCAP(p_name), UPPER(p_name), LOWER(sosok) 2 from professor 3 where p_sn = 111; INITCAP( UPPER(P_ LOWER(SOSOK) -------- -------- -------------- Kimhs KIMHS computer 제6장 함수
LPAD / RPAD • 문자열이 지정된 숫자만큼의 크기가 되도록 문자열의 왼쪽(오른쪽)에 지정한 문자를 채워준다. • LPAD(컬럼 OR 문자열, 숫자1, 문자) SQL> select c_name, LPAD(c_name, 15, '#') from course; SQL > select c_name, RPAD(c_name, 15, ‘@') from course; 제6장 함수
LTRIM / RTRIM • 문자열의 왼쪽(오른쪽)에 지정한 문자를 잘라준다. • LTRIM(컬럼 OR 문자열, 문자 OR 문자열) SQL> Select sosok, LTRIM(sosok, '전'), RTRIM(sosok, '호') 2 from student; SQL> Select s_name, LTRIM(s_name, '김미') 2 from student; 제6장 함수
SUBSTR • 첫번째 문자열에서 두번째 지정된 숫자에 해당하는 자리부터 시작하여 세번째 지정된 숫자에 해당하는 만큼의 크기의 문자열을 돌려준다. • SUBSTR(컬럼 OR 문자열, 숫자1, 숫자2) SQL> SELECT C_NAME , SUBSTR(C_NAME, 3, 2) 2 FROM COURSE ; C_NAME SUBS ---------------------- ---- 델파이 이 자료처리 처리 MIS S 시스템분석 템분 로봇공학 공학 건강과 사회 과 제6장 함수
LENGTH • 문자열의 길이를 출력한다. SQL> SELECT C_NAME, LENGTH(C_NAME) 2 FROM COURSE; C_NAME LENGTH(C_NAME) ---------------------- -------------- 델파이 3 자료처리 4 MIS 3 시스템분석 5 로봇공학 4 건강과 사회 6 제6장 함수
CHAR / VARCHAR2 비교 SQL> CREATE TABLE AAA 2 ( A1 CHAR(10) , 3 A2 VARCHAR2 (10) ) ; SQL> INSERT INTO AAA 2 VALUES ('1234','1234'); SQL> SELECT A1, A2, LENGTH(A1), LENGTH(A2) 2 FROM AAA; A1 A2 LENGTH(A1) LENGTH(A2) ---------- ---------- ---------- ---------- 1234 1234 10 4 제6장 함수
5. 날짜 함수 • 오라클이 표현하는 날짜 범위는 B.C 4712년 1월 1일 부터 A.D 9999년 12월 31일까지 이다. • 날짜와 숫자의 계산 • 날짜와 날짜를 더하면 오류발생 • 날짜에 날짜를 빼면 그 사이의 일수가 나온다. • 날짜에 숫자를 더하거나 빼면 날짜가 나온다. SQL> SELECT SYSDATE + BIRTH FROM STUDENT ; SQL> SELECT SYSDATE - BIRTH FROM STUDENT ; SQL> SELECT BIRTH , BIRTH +1, BIRTH -1 FROM STUDENT ; 제6장 함수
ADD_MONTHS • 날짜에 일정 수만큼의 달을 추가하여 준다. • 학생테이블에서 학생 이름과 원래 생일, 생일에서 2달 이후 일자를 출력하라. SQL> SELECT S_NAME, BIRTH , ADD_MONTHS(BIRTH, 2) FROM STUDENT; • 현재로 부터 3달 전의 일자를 출력하라. SQL> SELECT ADD_MONTHS(SYSDATE, -3) FROM DUAL; 제6장 함수
LAST_DAY • 달의 마지막 날을 출력해준다. • 학생 테이블에서 학생 이름과, 생일, 생일인 달의 마지막 일자를 출력하라. SQL> SELECT S_NAME, BIRTH, LAST_DAY(BIRTH) FROM STUDENT; • 이번 달의 마지막 일자를 출력하라. SQL> SELECT LAST_DAY(SYSDATE) FROM DUAL; 제6장 함수
MONTHS_BETWEEN • 달과 달 사이의 월 수를 출력해준다. • 학생 테이블에서 2000년 1월 1일을 기준으로 생일과 몇 달 차이인지를 출력하라. SQL> SELECT MONTHS_BETWEEN (‘2000/01/01’, BIRTH) FROM STUDENT; • 자신의 생일과, 현재까지 살아온 달의 수를 출력하라. SQL> SELECT '2000/06/30‘ , MONTHS_BETWEEN (SYSDATE , '2000/06/30') FROM DUAL; 제6장 함수
실습문제 1. 모든 교수의 수와 봉급의 합을 구하여라. 2. 수강 테이블에서 'B107'을 수강한 학생의 점수의 최대값과 최소값을 구하여라. 3. 다음을 실행하고 그 의미를 설명하여라. SELECT ABS(-32), CEIL(-4.2), FLOOR (-4.2) , MOD(8,3) , POWER(2,10), SQRT(9) FROM DUAL ; 4. 학생 테이블에서 이름과 생일을 " 김진우 1979 년 09 월 19 일 수요일 " 형태로 조회 하여라. 5. 교수 테이블에서 교수명과 봉급을 조회하되, "김현석 ₩02,800,000" 형태로 조회 하여라. 제6장 함수
실습문제(계속) 6. 다음 sql 문의 결과를 조회하고 각 함수의 의미를 설명하여라. SELECT 'abc123ABC' , INITCAP ('abc123ABC') , UPPER ('abc123ABC'), LOWER ('abc123ABC') from dual; 7. 학생 테이블에서 학생의 생일과 생일이 속한 월을 조회하여라. (substr 함수 이용) 8. 다음 sql 문을 실행하여 결과를 조회하고, 그 의미를 설명하여라. SELECT SUBSTR(‘ABC좋은나라DEF웃긴나라’,2,10) FROM DUAL; 9. "ABC좋은나라DEF웃긴나라"의 글자 수를 조회하라. 10. select count(*) , count(rank) from enrollment ; 를 수행하고 그 결과 값이 틀린 이유를 설명하여라. 11. 자신의 생일과 자신의 생일이 속한 달의 마지막 날짜를 조회하여라. 제6장 함수