센로그

lab 3 본문

CS/데이터베이스

lab 3

seeyoun 2023. 10. 17. 01:09

문자 함수

예시)

 

 

숫자 함수

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;

 

'CS > 데이터베이스' 카테고리의 다른 글

lab 6  (0) 2023.10.18
lab 2  (0) 2023.10.17
lab 1  (0) 2023.10.16
Comments