Database - SQL 실습 1

Bomin Seo·2022년 7월 23일
0

LIVE SQL : https://livesql.oracle.com/
SCRIPT : HR Objects and Data For Live SQL

테이블 스키마 확인

DESC [TABLE_NAME] 으로 확인할 수 있다.

릴레이션 스키마

TABLE EMPLOYEES

ColumnNull?Type
EMPLOYEE_IDNOT NULLNUMBER(6,0)
FIRST_NAME-VARCHAR2(20)
LAST_NAMENOT NULLVARCHAR2(25)
EMAILNOT NULLVARCHAR2(25)
PHONE_NUMBER-VARCHAR2(20)
HIRE_DATENOT NULLDATE
JOB_IDNOT NULLVARCHAR2(10)
SALARY-NUMBER(8,2)
COMMISSION_PCT-NUMBER(2,2)
MANAGER_ID-NUMBER(6,0)
DEPARTMENT_ID-NUMBER(4,0)

TABLE DEPARTMENTS

ColumnNull?Type
DEPARTMENT_IDNOT NULLNUMBER(4,0)
DEPARTMENT_NAMENOT NULLVARCHAR2(30)
MANAGER_ID-NUMBER(6,0)
LOCATION_ID-NUMBER(4,0)

TABLE LOCATIONS

ColumnNull?Type
LOCATION_IDNOT NULLNUMBER(4,0)
STREET_ADDRESS-VARCHAR2(40)
POSTAL_CODE-VARCHAR2(12)
CITYNOT NULLVARCHAR2(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_PRESA
ST_MANB
IT_PROGC
SA_REPD
ST_CLERKE
기타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
profile
KHU, SWCON

0개의 댓글