LIVE SQL : https://livesql.oracle.com/
SCRIPT : HR Objects and Data For Live SQL
테이블 스키마 확인
DESC [TABLE_NAME] 으로 확인할 수 있다.
TABLE EMPLOYEES
Column | Null? | Type |
---|---|---|
EMPLOYEE_ID | NOT NULL | NUMBER(6,0) |
FIRST_NAME | - | VARCHAR2(20) |
LAST_NAME | NOT NULL | VARCHAR2(25) |
NOT NULL | VARCHAR2(25) | |
PHONE_NUMBER | - | VARCHAR2(20) |
HIRE_DATE | NOT NULL | DATE |
JOB_ID | NOT NULL | VARCHAR2(10) |
SALARY | - | NUMBER(8,2) |
COMMISSION_PCT | - | NUMBER(2,2) |
MANAGER_ID | - | NUMBER(6,0) |
DEPARTMENT_ID | - | NUMBER(4,0) |
TABLE DEPARTMENTS
Column | Null? | Type |
---|---|---|
DEPARTMENT_ID | NOT NULL | NUMBER(4,0) |
DEPARTMENT_NAME | NOT NULL | VARCHAR2(30) |
MANAGER_ID | - | NUMBER(6,0) |
LOCATION_ID | - | NUMBER(4,0) |
TABLE LOCATIONS
Column | Null? | Type |
---|---|---|
LOCATION_ID | NOT NULL | NUMBER(4,0) |
STREET_ADDRESS | - | VARCHAR2(40) |
POSTAL_CODE | - | VARCHAR2(12) |
CITY | NOT NULL | VARCHAR2(30) |
STATE_PROVINCE | - | VARCHAR2(25) |
COUNTRY_ID | - | CHAR(2) |
Q1. 현재 날짜를 표시하는 질의를 작성하고 열 레이블을 Data로 지정하십시오.
A1.
SELECT sysdate Data FROM DUAL;
Q2.각 사원에 대해 사원 번호, 이름 , 급여 및 15% 인상된 급여를 정수로 표시하십시오.
인상된 급여 열의 레이블을 New Salary 로 지정하십시오.
A2.
SELECT EMPLOYEE_ID, LAST_NAME, SALARY, SALARY * 1.15 "New Salary"
FROM EMPLOYEES
Q3.이름이 J, A또는 M으로 시작하는 모든 사원의 이름(첫 글자는 대문자로, 나머지 글자는 소문자로 표시) 및 이름 길이를 표시하는 질의를 작성하고 각 열에 적합한 레이블을 지정하십시오. 결과를 사원의 이름에 따라 정렬하십시오.
A3.
SELECT INITCAP(LAST_NAME) "LAST NAME", LENGTH(LAST_NAME) LENGTH
FROM EMPLOYEES
WHERE LAST_NAME LIKE 'J%' OR LAST_NAME LIKE 'A%' OR LAST_NAME LIKE 'M%'
ORDER BY LAST_NAME
Q4. 각 사원의 이름을 표시하고 근무 달 수(입사일로부터 현재까지의 달수)를 계산하여 열 레이블을 MONTHS_WORKED로 지정하십시오. 결과는 정수로 반올림하여 표시하고 근무 달 수를 기준으로 정렬하십시오.
A4.
SELECT LAST_NAME, ROUND(MONTHS_BETWEEN(sysdate, hire_date)) "MONTHS_WORKED"
FROM EMPLOYEES
ORDER BY MONTHS_WORKED
Q5. 각 사원에 대하여 다음 항목을 생성하는 질의를 작성하십시오
"employee last name earn salary monthly but wants 3times salary 열레이블을 Dream salaries로 지정하십시오
A5.
SELECT LAST_NAME || ' earn ' || salary || ' monthly but wants ' || 3*salary "Dream Salaries"
FROM EMPLOYEES
Q6. 모든 사원의 이름과 급여를 표시하는 질의를 작성하십시오. 급여는 15자 길이로 왼쪽에 $기호가 채워진 형식으로 표기하고 열 레이블을 SALARY로 지정하십시오.
A6.
SELECT LAST_NAME, LPAD(SALARY,15,'$') SALARY
FROM EMPLOYEES
Q7. 사원의 이름, 입사일 및 급여 검토일을 표시하십시오. 급여 검토일은 여섯 달이 경과한 후 첫 번째 월요일입니다. 열 레이블을 REVIEW로 지정하고 날짜는 “Monday, the Thirty-First of July, 2000”과 같은 형식으로 표시되도록 지정하십시오.
A7.
SELECT LAST_NAME, HIRE_DATE, TO_CHAR(NEXT_DAY(ADD_MONTHS(HIRE_DATE,6),
'Monday'), 'DAY, DD " OF THE " MONTH, YYYY') REVIEW
FROM EMPLOYEES
Q8.이름, 입사일 및 업무 시작 요일을 표시하고 열 레이블을 DAY로 지정하십시오. Monday를 시작으로 해서 요일을 기준으로 결과를 정렬하십시오.
A8.
SELECT LAST_NAME, HIRE_DATE, TO_CHAR(HIRE_DATE, 'DY') DAY
FROM EMPLOYEES
ORDER BY TO_CHAR(HIRE_DATE - 1, 'D')
Q9.사원의 이름과 커미션을 표시하는 질의를 작성하십시오. 커미션을 받지 않는 사원일 경우 “No Commission”을 표시하십시오. 열 레이블은 COMM으로 지정하십시오.
A9.
SELECT LAST_NAME, NVL(TO_CHAR(COMMISSION_PCT, '0.99'), 'No Commission') COMM
FROM EMPLOYEES
Q10.사원의 이름을 표시하고 급여 총액을 별표(*)로 나타내는 질의를 작성하십시오. 각 별표는 1,000달러를 나타냅니다. 급여를 기준으로 데이터를 내림차순으로 정렬하고 열 레이블을EMPLOYEES_AND_THEIR_SALARIES로 지정하십시오.
A10.
SELECT LAST_NAME, RPAD(SALARY/1000,LENGTH(SALARY/1000) + 1,'*') EMPLOYEES_AND_THEIR_SALARIES
FROM EMPLOYEES
ORDER BY SALARY DESC
Q11. DECODE 함수를 사용하여 다음 데이터에 따라 JOB_ID 열의 값을
기준으로 모든 사원의 등급을 표시하는 질의를 작성하십시오.
업무 | 등급 |
---|---|
AD_PRES | A |
ST_MAN | B |
IT_PROG | C |
SA_REP | D |
ST_CLERK | E |
기타 | 0 |
A11.
SELECT LAST_NAME, DECODE(JOB_ID, 'AD_RPES','A','ST_MAN','B','IT_PROG','C',
'SA_REP','D','ST_CLERK','E','0') GRADE
FROM EMPLOYEES
Q12. 11번 문제의 명령문을 CASE 구문을 사용하여 재작성하십시오.
A12.
SELECT LAST_NAME,
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 AS GRADE
FROM EMPLOYEES