============================
스풀하기
============================
모든 실습내용은 캡쳐하여 제출하여야 합니다.
캡쳐(스풀) 방법은 다음과 같습니다.
SQL>spool d:\1주차실습.txt
이후의 모든 내용은 위 화일명으로 캡쳐됩니다.
실습 종료 후 다음과 같이 스풀을 종료합니다.
SQL>spool off
저장된 화일을 메모장으로 열어 과제부분을 맨 앞으로 편집한 후
이클래스에 제출합니다
*** 실습문제를 잘라내기해서 앞에 붙여넣기 해야함.
---------------------------------------------------------------------
SELECT문의 기본 (교재 39쪽 참조)
SQL에서 모든 검색질의는 SELECT문으로 처리한다
===========
테이블 전체 보기
===========
select * from emp;
select * from dept;
select * from bonus;
=============
특정 컬럼 전체 보기
=============
select ename from emp;
select ename, job from emp;
select dname from dept;
비교해 보기
--------------
select job from emp;
select distinct job from emp;
--->무엇이 달라졌나?
다음을 수행하면?
select unique job from emp;
distinct -> 중복 제거
ㄴ
==> unique는 ORACLE에서만 작동함.잊어버려라.
==========
연산자의 사용
==========
select ename, sal, sal+300 from emp;
select ename, sal, 12*sal+100 from emp;
select ename, sal, 12*(sal+100) from emp;
=======
Alias의 사용
========
select ename NAME, sal Salary
from emp;
=========
조건식의 사용
=========
select ename, job, deptno
from emp
where job = 'CLERK';
비교----
select ename, job, deptno
from emp
where job = 'clerk';
----> 결과는?
-----> 결과없음.
대소문자 구분함.
select ename, sal
from emp
where sal BETWEEN 1000 AND 1500;
select ename, sal, mgr
from emp
where mgr in (7902, 7566);
where mgr in ( 7902, **** , **** ~~~)
이 값에 해당하는거 출력.
ENAME SAL MGR
---------- ---------- ----------
SMITH 800 7902
SCOTT 3000 7566
FORD 3000 7566
===========
Wild Card의 사용
===========
select ename
from emp
where ename like 'S%';
--> 처음에 S, 그 뒤는 아무거나
select ename
from emp
where ename like '_A%';
---> _ 만큼 글자수를 세면서 그 뒤는 상관없음. 두번째만 a면 충-분.
%와 _의 차이점을 이해했는가???
======================================
만약 "_" 를 포함하는 이름을 찾는다면????
_은 wild card의 특수 문자이므로 잠시 기능을 멈추어야 한다
즉, wild card 기능으로부터 잠시 탈출해야함!!!
--> ' \ ' 이거 우겨넣기
======================================
select ename
from emp
where ename like '%\_%' escape '\';
결과는?
이제 다음과 같이 레코드를 하나 삽입 후에 실행해보자
INSERT INTO EMP VALUES (7950, 'LEE_HK', 'MANAGER', 7839, '85-10-09', 2450, 2000, 10);
commit;
select ename
from emp
where ename like '%\_%' escape '\';
=========
널값 처리하기
=========
select ename, mgr
from emp
where mgr is null;
=========
정렬 출력하기
=========
select ename
from emp
order by ename; <-- order by 하고 항목 나열 가능. 저거 기준으로 정렬함.
select ename
from emp
order by deptno;
내림차 순으로 출력하려면?
select ename
from emp
order by deptno desc;
==========
숫자함수(48쪽)
==========
select round(45.926,2), trunc(45.926,2)
from dual;
select abs(-2), ceil(3.9)
from dual;
ROUND - > 반올림
TRUNC -> 소숫점 n자리에서 자르기
ABS -> 절댓값
CEIL -> 가우스 상수 ( 어떤 값보다 큰 최대정수.)
=============
문자함수 예제(49쪽)
=============
select ename, sal, mgr
from emp
where ename = 'blake';
select ename, sal, mgr
from emp
where lower(ename) = 'blake';
lower --> 소문자화
select ename, sal, mgr
from emp
where upper(ename) = 'BLAKE';
select ename, sal, mgr
from emp
where initcap(ename) = 'Blake';
INITCAP -> 첫글자만 대문자화
select ename, sal, mgr
from emp
where lower(ename) = 'blake';
select ename, sal, mgr
from emp
where upper(ename) = 'BLAKE';
UPPER --> 대문자화
select initcap(ename)
from emp;
select lpad(ename, 10, '*')
from emp;
PAD >> LPAD / RPAD
왼쪽에 글자수만큼 지정해주고 없는자리에 문자 채우기.
왼쪽에서부터 / 오른쪽에서부터.
select rpad(ename, 10, '*')
from emp;
***문자열 연결하기***
select initcap(ename)||'의 잭책은 '||lower(job)||'입니다.'
from emp;
|| ==> 파이프문자. 두개를 연달아 써줌.
SMITH 의 직책은 JOB 입니다.
***문자열 골라내기***
다음을 실행하고 결과를 알아보자
select ename, substr(ename,-3,3) from emp;
이름이 TH로 끝나는 직원을 찾아보자
글자 세서 빼서 가져가기.
끝에서부터 세번째. 그 자리부터 셈.
공백도 셉니다.
select ename
from emp
where substr(ename,-2,2) = 'TH';
문자열의 길이와 특정문자열의 위치 칮기
select ename, length(ename), instr(ename, 'A')
from emp;
=========
날짜처리(52쪽)
=========
//다음 질의를 실행해보고 비교하시오
select empno, ename, to_char(hiredate, 'fmYY/MM/DD')
from emp;
select empno, ename, to_char(hiredate, 'fmYYYY-MM-DD DAY')
from emp;
select empno, ename, to_char(hiredate, 'YY/MM/DD')
from emp;
select empno, ename, to_char(hiredate, 'YYYY-MM-DD DAY')
from emp;
****조건식에서의 날짜처리****
select ename
from emp
where hiredate = 80/12/17;
---->날짜는 숫자가 아님! 다음과 같이
select ename
from emp
where hiredate = '80/12/17';
=======================
시스템으로부터 날짜, 시각 구해오기
=======================
select sysdate
from dual;
select to_char(sysdate, 'YYYY-MM-DD DAY')
from dual;
select to_char(sysdate, 'fmDD Month YYYY') from dual;
select to_char(sysdate, 'fmHH : MI : SS') from dual;
select to_char(sysdate, 'fmHH : MI : SS AM') from dual;
============
Null값의 처리(54쪽)
=============
모든 직원의 이름과 업무추진비를 구해보자
select ename||'의 업무추진비는 '||comm||'원 입니다'
from emp;
원하는 결과가 아니다
-----> 어찌해야할까?
select ename||'의 업무추진비는 '||NVL(comm,0)||'원 입니다'
from emp;
이번에는 연봉을 구해보자
연봉 = salary * 12 + 업무추진비(commission)
select ename NAME, 12*sal+comm
from emp;
---->정확한 결과인가?
다음을 수행해보자
select ename, sal, comm, (sal*12)+NVL(comm,0)
from emp;
실습 과제
*************************************************************************************
1. 1982년에 입사한 직원의 이름과 입사일을 출력하라
select ename, hiredate from emp where substr(hiredate , 1, 2) = 82;
2. 상사직원을 가지지 않는 직원(BOSS)를 찾아라
select ename , job, deptno from emp where job = 'PRESIDENT';
3. 1982년 이후로 입사한 직원의 이름과 입사일을 구하라.
select ename, hiredate from emp where substr(hiredate , 1, 2) > 82;
4. 업무추진비를 1,000 이하로 받는 직원의 이름과 업무추진비를 구하시오.
주의!! (다음 질의는 잘못되었다. 이를 바로 잡고 정확한 질의식을 작성할 것!!)
select ename, comm
from emp
where comm<=1000 OR comm is NULL;
*************************************************************************************
'_스타디' 카테고리의 다른 글
3주차-그룹함수와 서브쿼리 (1) | 2022.09.13 |
---|---|
정처기실기_2회차 (0) | 2022.09.12 |
실무DB_테이블초기화 (0) | 2022.09.06 |
정보처리기사 이번엔 붙자. -1 (0) | 2022.08.26 |
[conda] Solving environment : failed with initial frozen solve. Retrying with flexible solve : \ 하고 멈춰버릴때! (0) | 2022.06.06 |