Study/database

DATABASE 2일차 (연산자 / 함수 / 문제)

됵이 2022. 8. 9. 17:11

연산자

비교연산자

 

between 연산자는 하한과 상한 사이의 값을 반환하게 된다. 

LIKE 함수는 특정 문자가 포함 되는지 확인 하여 포함 되면 그 값을 반환한다. 

% => 0개 이상의 문자

_  => 한 문자

ex) '_ _ a%' ==> 3번째 글자가 a가 오고 a 뒤에는 문자가 있든 없든

IS NULL 함수는 NULL값인 것을 찾아서 반환한다. 

IS NOT NULL 함수는 위의 함수의 반대 개념 즉 NULL이 아닌것을 반환

 

논리연산자

아래 QURY 문을 보게 되면 where  에서 salary가 10000보다 같거나 크고(and) job_id 안에 man이라는 단어를 포함 하고 있는 것을 반환 하라는 뜻이 된다.

아래 QURY 문은 where 에서 salary 가 10000보다 같거나 크거나 또는 job_id 에 man이라는 단어를 포함 하고 있는 것을 반환 하라는 뜻이다.

위의 and 하고 or하고 다른점은 and는 두개의 조건 모두 만족하는 것을 반환 하지만

or는 둘중 하나만 만족을 해도 반환을 하게 된다. 

NOT IN 같은 경우는 아래 QURY 문을 보게 되면 JOB_ID 에서 () 안에 있는 것을 제외하고 반환 한다는 것

 

연산자의 우선 순위

 

ORDER BY 연산자

  • ASC : 오름차순(기본값으로 적지 않아도 된다)
  • DESC  : 내림차순

사용법 

SELECT

FROM 

WHERE

ORDER BY

==> 열의 위치를 가지고 정렬 

==> 여러 열을 기준으로 정렬

 

함수

함수란

함수 안에는 코드가 들어가 있고 어떠한 인자값(인수) 를 넣었을때 그 값을 코드에 맞게 계산하여 반환 해주는 것

 

 

문자 관련 함수

문자를 다루는 함수

대소문자 변환 함수 LOWER 소문자로 표시
UPPER 대문자로 표시
INITCAP 문자의 첫 글자만 대문자로 표시




문자 조작 함수 





CONCAT () 안의 두 문자를 결합 해준다. ('HELLO','WORLD') => HELLOWORLD
SUBSTR START값 END 값 으로 해당 값의 결과를 반환
('HELLOWORLD' , 1,5) => HELLO
LENGTH () 안의 문자의 길이를 반환
('HELLOWORLD') ==> 10
INSTR 해당 문자가 몇번째에 있는지 반환
('HELLOWORLD','W')  => 6
LPAD 해당 문자를 좌측에 배치해라
(last_name,12,'-') => -----12125
RPAD LPAD의 반대 개념

 

중첩 함수

여러 함수를 사용할때 사용하며 안쪽 괄호 부터 풀면서 나온다

예제

 

ROUND 지정된 소수점 자릿수로 반올림
ROUND(45.926, 2) => 45.93
TRUNC 지정된 소수점 자릿수값을 자른다. 
TRUNC(45.926, 2) => 45.92
CEIL 지정된 수 이상인 가장 작은 정수를 반환
CEIL (2.83) => 3
FLOOR 지정된 수 이하인 가장 큰 정수반환
FLOOR(2.83) => 2
MOD 나눈 나머지 반환
MOD(1600, 300) => 100

 

날짜 형식(RR / YY)

YY형식은 무조건 '20'이 앞에 붙고

RR형식은 50년을 기준으로 작으면 '20'이 앞에 붙고

50보다 크거나 같으면 '19'가 앞에 붙는다. 

 

문제

1. HR 부서에서 예산 문제로 인해 급여가 $12,000가 넘는 사원의 성과 급여를 표시하는 보고서가 필요합니다.

select last_name, salary

from employees

where salary >= 12000

 

강사님

select last_name,salary

from employees

where salary > 12000;

 

 

2.사원 번호 176의 성과 부서 ID를 표시하는 보고서를 작성합니다.

select first_name,department_id,employee_id

from employees

where employee_id in (176)

 

강사님

select last_name,department_id

from employees

where employee_id = 176;

 

3. HR 부서에서 급여가 높은 사원과 급여가 낮은 사원을 찾아야 합니다. 급여가 $5,000 ~ $12,000의 범위에 속하지 않는 모든 사원의 성 및 급여를 표시하도록 하세요.

select first_name,salary

from employees

where salary not in(5000,12000)

 

강사님

select last_name,salary

from employees

where salary not between 5000 and 12000;

 

 

4.Matos 및 Taylor라는 성을 가진 사원의 성, 직무 ID, 채용 날짜를 표시하는 보고서를 작성합니다. 채용 날짜를 기준으로 오름차순으로 query를 정렬합니다.

elect last_name,employee_id,hire_date

from employees

where last_name like 'Matos'

or last_name like 'Taylor'

order by 'Matos', 'Taylor'

 

강사님

select last_name,job_id,hire_date

from employees

where last_name in('Matos','Taylor')

order by 3;

 

 

5. 부서 20 또는 50에 속하는 모든 사원의 성과 부서 ID를 last_name별로 오름차순으로 정렬하여 표시합니다.

select last_name,department_id

from employees

where department_id = 20

or department_id = 50

order by last_name

 

강사님

select last_name,department_id

from employees

wheredepartment_id in (20,50)

order by 1;

 

6. $5,000 ~ $12,000의 급여를 받고 부서 20 또는 50에 속하는 사원의 성과 급여를 표시하도록 열 레이블을 각각 Employee 및 Monthly Salary로 지정합니다.

select employee_id as Employee,salary as "Monthly Salary"

from employees

where salary between 5000 and 12000

and department_id = 20

or department_id = 50

 

강사님

select last_name "Employee",salary "Monthly Salary"

from employees

where salary between 5000 and 12000

and department_id in (20,50);

 

7. HR 부서에서 2006년에 채용된 모든 사원의 성과 채용 날짜를 표시하는 보고서를 요구합니다

강사님

select last_name,hire_date

from employees

where hire_date between '06/01/01' and '06/12/31'

order by 2;

 

8. 담당 관리자가 없는 모든 사원의 성과 직책을 표시하는 보고서를 작성합니다.

select manager_id,last_name,job_id

from employees

where manager_id is null

/

강사님

select last_name, job_id

from employees

where manager_id is null;

 

 

 

9. 커미션을 받는 모든 사원의 성, 급여 및 커미션을 표시하는 보고서를 작성합니다. 급여 및 커미션을 내림차순으로 데이터를 정렬합니다. ORDER BY 절에서 열의 숫자 위치를 사용합니다.

select last_name,salary,commission_pct

from employees

order by commission_pct,salary DESC

/

강사님

select last_name,salary,commission_pct

from employees

where commission_pct is not null

order by 2,3 desc;

 

10. 이름의 세 번째 문자가 "a"인 모든 사원의 성을 표시합니다.

강사님

select last_name,first_name

from employees

where first_name like '__a%';

 

 

11. 성에 "a"와 "e"가 모두 포함된 모든 사원의 성을 표시합니다.

select last_name

from employees

where last_name like '%a%'

and last_name like '%e%'

/

강사님

select last_name

from employees

where last_name like '%a%'

and last_name like '%e%';

 

12. 직무가 판매 사원이나 자재 담당자이고 급여가 $2,500, $3,500 또는 $7,000가 아닌 모든 사원의 성, 직무 및 급여를 표시합니다.

강사님

select last_name,job_id,salary

from employees

where job_id in('SA_MAN','PU_CLERK')

amd salary not in (2500,3500,7000);

 

13. 커미션 금액이 20%인 모든 사원의 성, 급여 및 커미션을 표시하도록 실행합니다.

강사님

select last_name,salary,commission_pct

from employees

where commission_pct = .20;

 

문제 숙제


1. 시스템 날짜를 표시하기 위한 query를 작성합니다. 열 레이블을 Date로 지정합니다.

select sysdate "Date"

from dual;

2. HR 부서에서 각 사원에 대해 사원 번호, 성, 급여 및 15.5% 인상된 급여(정수로 표현)를 표시하는 보고서가 필요합니다. 열 레이블을 New Salary로 지정합니다.

select employee_id,last_name,salary,round(salary * 15.5,0)"New Salary"

from employees;

3. 새 급여에서 이전 급여를 뺀 열을 추가하도록 2번의 query를 수정합니다. 열 레이블을 Increase로 지정합니다. 

select employee_id,last_name,salary,round(salary * 15.5,0)"New Salary",trunc((salary*15.5),0)"Increase"
from employees


4. "J", "A" 또는 "M"으로 시작하는 이름을 가진 모든 사원의 성(첫번째 문자는 대문자,나머지는 모두 소문자)과 성의 길이를 표시하는 query를 작성합니다. 각 열에 적절한 레이블을 지정합니다. 사원의 성을 기준으로 결과를 정렬합니다.
select initcap(last_name)"NAME",length(initcap(last_name))"length"
from employees
where last_name like 'J%'
or last_name like 'A%'
or last_name like 'M%'
order by last_name

5. HR 부서에서 각 사원의 근속 기간을 파악하려고 합니다. 각 사원에 대해 성을 표시하고 채용일부터 오늘까지 경과한 개월 수를 계산합니다. 열 레이블을 ONTHS_WORKED로지정합니다. 재직 개월 수에 따라 결과를 정렬합니다. 개월 수는 가장 가까운 정수로 반올림해야 합니다

select last_name,round(months_between(sysdate,hire_date))"onths_worked"
from employees
order by months_between(sysdate,hire_date)


6. 모든 사원의 성과 급여를 표시하기 위한 query를 작성합니다. 급여가 15자 길이로 표시되고 왼쪽에 $ 기호가 채워지도록 형식을 지정합니다. 열 레이블을 SALARY로지정합니다.

select last_name,lpad(commission_pct,15,'$')"salary"
from employees


8. 사원의 성을 표시하고 급여 액수를 별표로 나타내는 query를 작성합니다. 각 별표는 $1,000을 나타냅니다. 급여의 내림차순으로 데이터를 정렬합니다. 열 레이블을EMPLOYEES_AND_THEIR_SALARIES로 지정합니다.

9. 부서 90의 모든 사원에 대해 성 및 재직 기간(주 단위)을 표시하도록 query를 작성합니다. 주를 나타내는 숫자 열의 레이블을 TENURE로 지정합니다. 주를 나타내는 숫자 값을 소수점 왼쪽에서 truncate합니다. 직원 재직 기간의 내림차순으로 레코드를 표시합니다.

2일차 문제2번 답.txt
0.00MB