2024. 4. 2. 14:42ใComputerScience/Database
1. ํ์ฌ ๋ ์ง๋ฅผ ํ์ํ๋ ์ง์๋ฅผ ์์ฑํ๊ณ ์ด ๋ ์ด๋ธ์ Data๋ก ์ง์ ํ์ญ์์ค.
SELECT sysdate as "Date"
FROM DUAL
-- from ์ ์ ๊ผญ ์จ์ผ ํ๋๊น, dummy table๋ก DUAL ์ ๊ณต
2. ๊ฐ ์ฌ์์ ๋ํด ์ฌ์ ๋ฒํธ, ์ด๋ฆ , ๊ธ์ฌ ๋ฐ 15% ์ธ์๋ ๊ธ์ฌ๋ฅผ ์ ์๋ก ํ์ํ์ญ์์ค. ์ธ์๋ ๊ธ์ฌ ์ด์ ๋ ์ด๋ธ์ New Salary ๋ก ์ง์ ํ์ญ์์ค.
SELECT employee_id, last_name, salary, (salary * 1.15) AS "New Salary"
FROM employees
3. ์ด๋ฆ์ด J, A๋๋ M์ผ๋ก ์์ํ๋ ๋ชจ๋ ์ฌ์์ ์ด๋ฆ(์ฒซ ๊ธ์๋ ๋๋ฌธ์๋ก, ๋๋จธ์ง ๊ธ์๋ ์๋ฌธ์๋ก ํ์) ๋ฐ ์ด๋ฆ ๊ธธ์ด๋ฅผ ํ์ํ๋ ์ง์๋ฅผ ์์ฑํ๊ณ ๊ฐ ์ด์ ์ ํฉํ ๋ ์ด๋ธ์ ์ง์ ํ์ญ์์ค. ๊ฒฐ๊ณผ๋ฅผ ์ฌ์์ ์ด๋ฆ์ ๋ฐ๋ผ ์ ๋ ฌํ์ญ์์ค.
SELECT INITCAP(last_name), LENGTH(last_name) AS "name length"
FROM employees
WHERE last_name LIKE 'J%' OR last_name LIKE 'A%' OR last_name LIKE 'M%'
ORDER BY last_name;
// SUBSTR ํ์ฉํ ๋ฐฉ๋ฒ
SELECT INITCAP(last_name), LENGTH(last_name) AS "name length"
FROM employees
WHERE SUBSTR(last_name,1,1) IN ('J', 'A', 'M')
ORDER BY last_name
4. ๊ฐ ์ฌ์์ ์ด๋ฆ์ ํ์ํ๊ณ ๊ทผ๋ฌด ๋ฌ ์(์
์ฌ์ผ๋ก๋ถํฐ ํ์ฌ๊น์ง์ ๋ฌ ์)๋ฅผ ๊ณ์ฐํ์ฌ ์ด ๋ ์ด๋ธ์ MONTHS_WORKED๋ก ์ง์ ํ์ญ์์ค. ๊ฒฐ๊ณผ๋ ์ ์๋ก ๋ฐ์ฌ๋ฆผํ์ฌ ํ์ํ๊ณ ๊ทผ๋ฌด ๋ฌ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ์ญ์์ค.SELECT last_name, ROUND(MONTHS_BETWEEN(sysdate, hire_date)) AS "MONTHS_WORKED"
FROM employees
ORDER BY ROUND(MONTHS_BETWEEN(sysdate, hire_date))
-- ๋ค๋ฅธ DBMS ์ฌ์ฉ ์, ๋ณ์นญ ์ฃผ๋๊ฒ ์ ๋จน๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
-- ๊ทธ๋ฅ ROUND(MONTHS_BETWEEN(sysdate, hire_date))๋ก ์ ๋ ฌํด๋ okay
5. ๊ฐ ์ฌ์์ ๋ํด ๋ค์ ํญ๋ชฉ์ ์์ฑํ๋ ์ง์๋ฅผ ์์ฑํ์ญ์์ค. <employee last name> earn <salary> monthly but wants <3 times salary> ์ด ๋ ์ด๋ธ์ Dream Salaries๋ก ์ง์ ํ์ญ์์ค.
SELECT last_name, last_name || ' earn ' || salary || ' monthly but wants ' || salary*3 AS "Dream Salaries"
FROM employees
6.๋ชจ๋ ์ฌ์์ ์ด๋ฆ๊ณผ ๊ธ์ฌ๋ฅผ ํ์ํ๋ ์ง์๋ฅผ ์์ฑํ์ญ์์ค. ๊ธ์ฌ๋ 15์ ๊ธธ์ด๋ก ์ผ์ชฝ์ $๊ธฐํธ๊ฐ ์ฑ์์ง ํ์์ผ๋ก ํ๊ธฐํ๊ณ ์ด ๋ ์ด๋ธ์ SALARY๋ก ์ง์ ํ์ญ์์ค.
SELECT last_name, LPAD(salary, 15, '$') "SALARY"
FROM employees
7.์ฌ์์ ์ด๋ฆ, ์ ์ฌ์ผ ๋ฐ ๊ธ์ฌ ๊ฒํ ์ผ์ ํ์ํ์ญ์์ค. ๊ธ์ฌ ๊ฒํ ์ผ์ ์ฌ์ฏ ๋ฌ์ด ๊ฒฝ๊ณผํ ํ ์ฒซ ๋ฒ์งธ ์์์ผ์ ๋๋ค. ์ด ๋ ์ด๋ธ์ REVIEW๋ก ์ง์ ํ๊ณ ๋ ์ง๋“Monday, the Thirty-First of July, 2000”๊ณผ ๊ฐ์ ํ์์ผ๋ก ํ์๋๋๋ก ์ง์ ํ์ญ์์ค.
SELECT last_name, hire_date, NEXT_DAY(ADD_MONTHS(hire_date, 6), 'Monday') "REVIEW"
FROM employees
8. ์ด๋ฆ, ์ ์ฌ์ผ ๋ฐ ์ ๋ฌด ์์ ์์ผ์ ํ์ํ๊ณ ์ด ๋ ์ด๋ธ์ DAY๋ก ์ง์ ํ์ญ์์ค. Monday๋ฅผ ์์์ผ๋ก ํด์ ์์ผ์ ๊ธฐ์ค์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ์ญ์์ค.
SELECT last_name, hire_date, TO_CHAR(hire_date, 'DAY') "DAY"
FROM employees
ORDER BY TO_CHAR(hire_date - 1, 'D')
-- 'd'='D'๋ ์์ผ์ ์ซ์๋ก ๋ณํ
-- hire_date = ์์์ผ -> ์์์ผ์ ํด๋นํ๋ 4
-- sunday๊ฐ 1, ์์์ผ์ด 2, ๋ฐ๋ผ์ ์ ๋ ์ ๊ธฐ์ค์ผ๋ก (-1) ์ ๋ ฌ
-- ์์์ผ์ด ์ผ์์ผ์ด ๋๊ณ , ์ผ์์ผ์ ํ ์์ผ ์ฆ ์ ์ผ ํฐ ๊ฐ์ด ๋จ
9.์ฌ์์ ์ด๋ฆ๊ณผ ์ปค๋ฏธ์ ์ ํ์ํ๋ ์ง์๋ฅผ ์์ฑํ์ญ์์ค. ์ปค๋ฏธ์ ์ ๋ฐ์ง ์๋ ์ฌ์์ผ ๊ฒฝ์ฐ“No Commission”์ ํ์ํ์ญ์์ค. ์ด ๋ ์ด๋ธ์ COMM์ผ๋ก ์ง์ ํ์ญ์์ค.
SELECT last_name, NVL(TO_CHAR(commission_pct), 'No Commission') "COMM"
FROM employees
-- NVL, Null-value - ์ฒซ๋ฒ์งธ params๊ฐ null์ด๋ฉด, ๋๋ฒ์งธ params ์ถ๋ ฅ (null์ด ์๋๋ฉด ์๋ ๊ฐ ์ถ๋ ฅ)
-- ์ TO_CHAR? - ํ๋์ attribute๋ ๋์ผํ type ๋ง ์ถ๋ ฅ์ด ๊ฐ๋ฅํ๋๊น, type์ ๋ง์ถฐ์ฃผ๊ธฐ ์ํด์
10.์ฌ์์ ์ด๋ฆ์ ํ์ํ๊ณ ๊ธ์ฌ ์ด์ก์ ๋ณํ(*)๋ก ๋ํ๋ด๋ ์ง์๋ฅผ ์์ฑํ์ญ์์ค. ๊ฐ ๋ณํ๋ 1,000๋ฌ๋ฌ๋ฅผ ๋ํ๋ ๋๋ค. ๊ธ์ฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ ์ด ๋ ์ด๋ธ์ EMPLOYEES_AND_THEIR_SALARIES๋ก ์ง์ ํ์ญ์์ค.
SELECT last_name, RPAD('*', TRUNC(salary/1000), '*') AS "EMPLOYEES_AND_THEIR_SALARIES"
FROM employees
ORDER BY salary DESC
-- RPAD - ์ถ๋ ฅํ ๊ณต๊ฐ์ ์ก์๋ ๋ค์, ์ถ๋ ฅ ๊ณต๊ฐ์ด ์กํ ๋๋จธ์ง ๊ณต๊ฐ์ ์ฑ์์ฃผ๊ธฐ ์ํ ํจ์ -> ์ค๋ฅธ์ชฝ์ ๋ณํ๋ก ์ฑ์ฐ์
-- ์ด ์นธ์ ๊ฐ์๊ฐ TRUNC(salary/1000) - ์์ด๋ ๋ค๋ ์น ๋ค '*' ๋ก ์ฑ์ฐ๋ ๊ฒ์ด ๋ชฉ์
-- ์ผ๋จ '*'๋ฅผ ์ฐ๊ณ , ๋๋จธ์ง ๋ท ์นธ๋ค๋ ๋ค TRUNC(salary/1000) size ๋งํผ '*' ์ ์ฑ์ฐ์.
11. DECODE ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ๋ฐ์ดํฐ์ ๋ฐ๋ผ JOB_ID ์ด์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ ์ฌ์์ ๋ฑ๊ธ์ ํ์ํ๋ ์ง์๋ฅผ ์์ฑํ์ญ์์ค.
์ ๋ฌด ๋ฑ๊ธ
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
๊ธฐํ 0
SELECT last_name, job_id,
DECODE(job_id, 'AD_PRES', 'A',
'ST_MAN', 'B',
'IT_PROG', 'C',
'SA_REP', 'D',
'ST_CLERK', 'E',
'0') AS "GRADE"
FROM employees
12. 11๋ฒ ๋ฌธ์ ์ ๋ช ๋ น๋ฌธ์ CASE ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ฌ์์ฑํ์ญ์์ค.
SELECT last_name, job_id,
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
* ์ถ๊ฐ ์์
SELECT last_name, salary,
DECODE(TRUNC(salary/5000) - 1,
-1, '์ดํด~~~',
0, '์ดํด~~~',
1, '์ค์ผ์ด',
'Good!') AS "MESSAGE"
FROM employees
SELECT last_name, salary,
CASE WHEN salary < 5000 THEN '์ดํด~~~'
WHEN salary < 10000 THEN '์ค์ผ์ด'
ELSE 'Good!'
END AS "MESSAGE"
FROM employees
-- DECODE๋ ๋๋ฑ ์กฐ๊ฑด๋ง ๊ฐ๋ฅํ๋ค (ํฌ๋ค, ์๋ค ํํ์ด X)
-- CASE๋ฌธ์ ๋์ ๋น๊ต ํํ ๊ฐ๋ฅ, ์ด๋ CASE WHEN salary ์ด๋ ๊ฒ ๋ณ๊ฒฝ
'ComputerScience > Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Database] SQL Assignment 6 (1) | 2024.04.19 |
---|---|
[Database] SQL Assignment 5 (2) | 2024.04.19 |
[Database] SQL Assignment 4 (0) | 2024.04.02 |
[Database] SQL Assignment 2 (0) | 2024.04.01 |