n번째 자리의 왼쪽에다 선을 긋고, 그 선을 기준으로 오른쪽 애들을 버리든지 반올림하든지 하는 것.
DUAL 더미테이블.
날짜 사용
기본 형식은 YY/MM/DD
YY에 연도 마지막 두자리 적는 경우에, 2023 현재 기준, 00~23은 21세기, 24~99는 20세기로 나옴.
SYSDATE 함수 : 현재 데이터베이스 서버의 Date 및 Time을 반환하는 함수(뭔솔).
날짜에다가 시간연산 하고 싶으면, 시간/24를 해서 날짜 단위로 넣는다는 뜻~
그러면 소수점에 시간이 나옴.
고용된지 얼마나 지났는지 주 단위로 계산한 거 내놔~ 라는 뜻
날짜 함수
TO_CHAR 함수
숫자값을 문자로 표시한다.
TO_NUMBER 함수
문자열을 숫자 형식으로 변경한다
TO_DATE 함수
문자열을 날짜 형식으로 변경한다.
hire_date와 문자열 '01-01-90'을 날짜 포멧 DD-MM-RR에 맞춰 비교한 후, DD-MON-YYYY형태로 나타내도록 함.
중첩 함수
함수를 중첩할 수 있다. 안쪽에서부터 계산됨.
널 관련 함수
널 값을 반환하거나 다른걸 반환하거나.
NVL2의 expr1 제외, 나머지는 인자끼리 데이터 형식이 일치해야 함.
IF-THEN-ELSE
두 가지 방법으로 표현할 수 있다.
CASE 표현
job_id가 IT_PROG이면 salary*1.10 해라. ... 나머지는 salary로 냅도라. 그리고 이 열을 "REVISED_SALARY" 로 지정해라
DECODE 함수
CASE 표현해서 CASE, WHEN, THEN, ELSE 표현 없이 쭉 파라미터로 연결한 것
1. 현재 날짜를 표시하는 질의를 작성하고 열 레이블을 Data로 지정하십시오.
SELECT SYSDATE "Date" FROM DUAL;
2. 각 사원에 대해 사원 번호, 이름 , 급여 및 15% 인상된 급여를 정수로 표시하십시오. 인상된 급여 열의 레이블을 New Salary 로 지정하십시오.
SELECT employee_id, last_name, salary, TRUNC(salary*1.15) AS "New Salary" FROM employees;
3. 이름이 J, A또는 M으로 시작하는 모든 사원의 이름(첫 글자는 대문자로, 나머지 글자는 소문자로 표시) 및 이름 길이를 표시하는 질의를 작성하고 각 열에 적합한 레이블을 지정하십시오. 결과를 사원의 이름에 따라 정렬하십시오.
SELECT INITCAP(last_name) "Name", LENGTH(last_name) "Name Length" FROM employees WHERE last_name LIKE 'J%' OR last_name LIKE 'A%' OR last_name LIKE 'M%' ORDER BY last_name ASC;
주의)) INITCAP, LENGTH 함수 기억~. 조건은 WHERE에쓰는거임 갑자기 SELECT에 넣지마삼
주의))) 이거 IN 안됨. 시험칠땐 안전빵으로 OR 쓰는게 나을듯?
4. 각 사원의 이름을 표시하고 근무 달 수(입사일로부터 현재까지의 달 수)를 계산하여 열 레이블을 MONTHS_WORKED로 지정하십시오. 결과는 정수로 반올림하여 표시하고 근무 달 수를 기준으로 정렬하십시오.
SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) "MONTH_WORKED" FROM employees ORDER BY MONTH_WORKED ASC;
주의)) MONTHS_BETWEEN 함수 기억~
5. 각 사원에 대해 다음 항목을 생성하는 질의를 작성하십시오. <employee last name> earn <salary> monthly but wants <3 times salary> 열 레이블을 Dream Salaries로 지정하십시오.
SELECT last_name ||' earn '|| salary ||' monthly but wants '|| 3*salary AS "Dream Salaries" FROM employees;
주의) || || 이거 쓰는 법 기억하기~
6.모든 사원의 이름과 급여를 표시하는 질의를 작성하십시오. 급여는 15 자 길이로 왼쪽에 $기호가 채워진 형식으로 표기하고 열 레이블을 SALARY로 지정하십시오.
SELECT last_name, TO_CHAR(salary, '$999,999,999,999,999') "SALARY" FROM employees;
주의) TO_CHAR 쓰는 법 기억~
7.사원의 이름, 입사일 및 급여 검토일을 표시하십시오. 급여 검토일은 여섯 달이 경과한 후 첫 번째 월요일입니다. 열 레이블을 REVIEW로 지정하고 날짜는 “Monday, the Thirty-First of July, 2000”과 같은 형식으로 표시되도록 지정하십시오.
SELECT last_name, hire_date, TO_CHAR(NEXT_DAY(ADD_MONTHS(hire_date,6),'MON'), 'DAY ", the " DDSPTH " of" MONTH ", " YEAR') "REVIEW" FROM employees;
주의)) TO_CHAR 할 때, ' 형식1 "추가string" 형식2 ' 이런식으로 작따 안에 큰따로 추가string 넣어야 함. 반대로하면 안됨
8. 이름, 입사일 및 업무 시작 요일을 표시하고 열 레이블을 DAY로 지정 하십시오. Monday를 시작으로 해서 요일을 기준으로 결과를 정렬하십시오.
SELECT last_name, hire_date, TO_CHAR(hire_date, 'DAY') "DAY" FROM employees ORDER BY TO_CHAR(hire_Date-1, 'D') ASC;
주의)) 요일 기준 정렬하는 부분이 이상하네.. 걍외우자
9.사원의 이름과 커미션을 표시하는 질의를 작성하십시오. 커미션을 받지 않는 사원일 경우 “No Commission”을 표시하십시오. 열 레이블은 COMM으로 지정하십시오.
SELECT last_name, NVL(TO_CHAR(commission_pct), 'No Commission') "COMM" FROM employees
주의) NVL 두번째 파라미터에 들어갈 때도 작따 써야함. NVL들어갈 때 두 파라미터 데이터 타입 같아야 함.
10.사원의 이름을 표시하고 급여 총액을 별표(*)로 나타내는 질의를 작성하십시오. 각 별표는 1,000달러를 나타냅니다. 급여를 기준으로 데이터를 내림차순으로 정렬하고 열 레이블을 EMPLOYEES_AND_THEIR_SALARIES로 지정하십시오.
SELECT last_name, LPAD(' ',TRUNC(salary/1000 +1),'*') "EMPLOYEES_AND_THEIR_SALARIES" FROM employees ORDER BY salary DESC;
주의) 여기서도 함수 안에 작따 대신 큰따 쓰면 안돌아감
11. DECODE 함수를 사용하여 다음 데이터에 따라 JOB_ID 열의 값을 기준으로 모든 사원의 등급을 표시하는 질의를 작성하십시오.
SELECT first_name||' '||last_name "Name", job_id "JOB", DECODE(job_id,'AD_PRES','A','ST_MAN','B','IT_PROG','C','SA_REP','D','ST_CLERK','E','0') "GRADE" FROM employees;
12. 11번 문제의 명령문을 CASE 구문을 사용하여 재작성하십시오.
SELECT first_name||' '||last_name "Name", job_id "JOB", CASE job_id WHEN 'AD_PRES' THEN'A' WHEN 'ST_MAN' THEN 'B' WHEN 'IT_PROG' THEN 'C' WHEN 'SA_REP' THEN 'D' WHEN 'ST_CLERK'THEN 'E' ELSE '0' END "GRADE" FROM employees;