▶ 한줄평 : 함수는 외운다기 보다는 시간 날때마다 봐서 익숙해지게 외우는 것이 좋을 것 같다. 민경태 강사님이 실무에서 쓰일만한 것들만 뽑아서 잘 알려주셔서 감사하다.
-예제문제-
-- DUAL 아무 의미없는 테이블, 문법의 필요성에 의해서 추가함 (실제 어떤 데이터를 가져오지는 않음)
절대값을 4로 바꿈(최종)
어떤 서비스에 좋을까? 좋아요 -> 1값 저장, 싫어요 -> -1값 저장(절대값으로)
ABS(Absolute Number)
3. 부호 - 싸인
(EX) 초창기 핸드폰 - 6만 5천 COLOR지원
화면을 구성하는 것 - 네모난 점(픽셀, Pixel)
-> 픽셀 하나가 나타낼 수 있는 색깔 : 6만 5천개 중 하나를 고를 수 있었음
-> 픽셀 하나의 크기 : 16bit(2BYTE) = 2의 16제곱의 역할 수행가능 = 약 6만 5천
-> 6만 5천 COLOR
TRUE COLOR (최소 24bit 이상 - 2의 24제곱) : 편안하다고 느끼는 color
-> 시계, 날짜, 시간
7. 정수로 내림(FLOOR)
- EMPLOYEES 테이블에서 SALARY 평균이 10000 이상인 부서의 DEPARTMENT_ID와 SALARY 평균을 조회하시오. 평균은 정수로 내림처리하시오.
SELECT DEPARTMENT_ID
, FLOOR(AVG(SALARY)) AS 부서평균연봉
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING AVG(SALARY) > = 1000;
-정수로 절사 : 수도요금
-일의 자리에서 절사 : 핸드폰 요금(원단위절사)
오라클이 설치된 서버 기준
세션타임존(대,소문자 구분해서 알아두기)
-> 오라클 설치를 해외 서버에 두면 - SYSDATE가 다른나라 시간이 나올 수 있음
TO_CHAR
- EMPLOYEES 테이블에서 DEPARTMENT_ID가 80인 사원들을 높은 SALARY순으로 조회하시오. SALARY는 9,000처럼 천 단위 구분기호를 표기해서 조회하시오.
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, TO_CHAR(SALARY, '99.999') AS SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 80
ORDER BY SALARY DESC;
(X) TO_DATE(이형식으로 해석하는 방식이지 원하는 형식으로 조회하는 것이 아님)
일반적으로 '3자리' 보여줌
경과한 기간이 TIMESTAMP 형식으로 반환(답이 날짜였다)
-> 함수는 외우는 것 아니라 오류없이 돌아가는지 정리만 하기!
-> 회사갔을때) 1. DATE 2. TIMESTAMP 3. (제일많음) VARCHAR(문자로 되어있는 경우) 많음
-> 함수랑 친해져야 함
-소수점 버리고 싶을때 -> FLOOR 나 TRUNC 씀
-TRUNC 안에 있는 것 먼저 사용 - ((EXTRACT(SECOND FROM SYSTIMESTAMP))
-, TO_CHAR(SYSDATE, 'YYYY') - 기존에 알고 있는 함수 활용(추출)
EXTRACT : 필요한 단위 추출하기
6. EMPLOYEES 테이블에서 HIRE_DATE가 2005년도인 사원을 조회하시오.
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID
FROM EMPLOYEES
WHERE EXTRACT(YEAR FROM HIRE_DATE) = 2005;
다음 일요일 : 7월 9일
-지난 일요일 : 일주일 전으로 빼놓고 날짜 구하기
(당일 처리 원리 : -8 해야함)
SYSDATE +_ 가능하고, 1일 = 하루전
-> 1월 1일 부터 : 6개월 몇일 지남
1.INIT 첫번째, 초기화
글자수
바이트 수 (1BYTE - 영어한글자, 글잣수 같음)
(한글 한글자 : 최소 2BYTE ~ 많으면 3BYTE)
가능하면 표준 문법이랑 맞게 ~
1) || 함수
2) CONCAT (CONCATNATE: 연결하다) - 나중에 쿼리를 바꾸지 않을 수 있음
CONCAT(A,B) : 인수를 2개만 전달할 수 있다.
연결하고 싶은것이 3개여도 안됨!
CONCAT(CONCAT(A,B),C) : 인수를 3개 이상은 CONCAT 함수 여러 개로 해결한다.
-> 일반적인 호환성이 높은 쿼리문 작성가능 LIKE CONCAT('515','%');
SUBSTRING 일부만 반환하기
(첫 3글자)
INSTR(STRING 안에서)
2개이상있을때 :첫번째로 발견된 A의 위치
안들어가있을때 : O
모든 부서번호를 3자리로 만들고 싶다
LPAD(왼쪽에 전체 3글자로 0채우기!)
RPAD (개인정보 마스킹해서 추출 -> PAD쓰면 편함)
이메일의 첫2글자만 추출 -> 전체 5자리 추출 -> 모자르면 **로
-> 간단히 TRIM으로 해결하기
데이터가 넘어왔을때 데이터가 앞,뒤로 붙어서 넘어올때
HELLO(5자리)WORLD
JOBID, '' -> 밑줄의 위치
(JOBID, '') + 1 -> 밑줄 다음 번호부터
공백1개
-> 글자수의 지장이 없으면 끝까지 반환
-> 밑줄 다음 글자부터 끝까지 가져오시오
밑줄 뒤 글자수 : 4(글자수 - 밑줄위치)(사실은 계산이 필요하지 않다.)
//(1)
연봉 내림차순 정렬문법이 ORDER안에 들어가있음 -> ORDER BY SALARY DESC
고용일 오름차순 정렬 후 순위 매기기 -> 옛날에 입사한 사람이 맨위로
RANK() OVER(ORDER BY 칼럼 ASC) : 낮은 값이 1등 -> 자주 쓰지는 않음
-> ★기능 구현 시 ROW_NUMBER가 훨씬 많이 필요함 (DB에서 가지고 오는걸 못함)
★ ROW_NUMBER 중요!
'SHA1'(secure hash 1)
2의 8제곱 = 256
-> 회원가입 구현할때) DB 관리자 암호화 과정을 거쳐서 바꿔서 넣어줘야 함
(이전단계에서는 비번이 노출되어 있음
-log 로그 기록을 찍어놓음)
-특정 파일에 비번 써있음)
-> 바로 바꾸고 이렇게 바꾸지는 않을것
연습문제 ) 11번 ) PK 아니더라도 UNIQUE COLUMN 은 1:다 관계 맺을 수 있음
디코드(DECODE) : 조인의 과정없이 조인을 대체할 수 있는 함수
//(1) 분기처리
- EMPLOYEES 테이블에서 PHONE_NUMBER에 따른 지역(REGION)을 조회하시오.
-- PHONE_NUMBER가 011로 시작하면 'MOBILE', 515로 시작하면 'EAST', 590으로 시작하면 'WEST', 603으로 시작하면 'SOUTH', 650으로 시작하면 'NORTH'로 조회하시오.
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID
, DECODE(SUBSTR(PHONE_NUMBER, 1, 3)
, '011', 'MOBILE'
, '515', 'EAST'
, '590', 'WEST'
, '603' , 'SOUTH'
, '650', 'NORTH') AS REGION
FROM EMPLOYEES;
EMPLOYEE_ID DEPARTMENT_ID 사원 TABLE
DEPARTMENT_NAME 부서 TABLE
조회 할 수 없음 -> '조인'으로 써야함
ELSE 'Unknown' : 나머지 모든 경우
> 6. 분기 처리 표현식(CASE) = 오라클의 IF문 수행하는 것
EMPLOYEES 테이블에서 근무 개월 수가 240개월 이상이면 '퇴직금정산대상', 아니면 빈 문자열('')을 조회하시오.
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID
, FLOOR(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)) AS 근무개월 수
, CASE
WHEN MONTHS_BETWEEN(SYSDATE, HIRE_DATE) > = 240 THEN '정산대상'
ELS ..
END AS 퇴직금정산대상유무
FROM EMPLOYEES;
IF문) ORACLE IF의 역할을 수행하는 것
캡쳐 : 로고 + SHIFT + S
평가시작
서명 - 문제열기 - 다운로드 압축 풀어서 사용
답안작성란은 비운다.
파일첨부 : 답안 파일 첨부(파일명 자유롭게)
시험 종료하면 "저장하기"버튼 - "시험종료" 버튼 -> 저장은 한번이상하기
시험 종료하면 "시험종료" 버튼
10문제(2시간) , 30점 -> 부분점수 있음
모르는 문제 2문제(5점)(인터넷 조회하기)
일부 문제는 풀려있음(~DDL까지) - CREATE TABLE