본문 바로가기

Oracle DataBase/SQL

(23)
문제3 조인 & 서브쿼리 --(1) EMP와 DEPT TABLE을 JOIN하여 부서번호, 부서명, 이름, 급여를 출력하라. select e.deptno 부서번호,d.dname 부서명,e.ename 이름,e.sal 급여 from dept d,emp e where d.deptno = e.deptno; --(2) 이름이 'ALLEN'인 사원의 부서명을 출력하라. select e.ename 사원이름,d.dname 부서명 from emp e join dept d on e.deptno = d.deptno where e.ename = 'ALLEN'; --(3) DEPT Table에 있는 모든 부서를 출력하고, EMP Table에 있는 DATA와 JOIN하여 -- 모든 사원의 이름, 부서번호, 부..
6day -- 6일차 -- JOIN & Sub-Query -- 관계형 DB? /* 회사사원 사원번호 사원명 직책 부서명 부서전화번호 고객이름 고객전화번호 1 완샘 강사 교육팀 011-111-1111 최정빈 1234-1234 1 완샘 강사 교육팀 011-111-1111 김도영 2234-2234 2 성일 인턴 교육팀 011-111-1111 이성치 3333-3333 2 성일 인턴 교육팀 011-111-1111 최정빈 1234-1234 회사사원 사원번호 사원명 직책 부서번호(FK : Foreign Key) 1 완샘 강사 10 2 성일 인턴 10 부서 부서번호(PK) 부서명 부서전화번호 10 (Primary Key)교육팀 011-111-1111 20 */ -- 오라클 사전(dictionary, dict) : 테이블명(ta..
5day -- 5일차 --(7) 입사일부터 지금까지의 날짜수를 출력하라. -- 부서 번호, 이름, 입사일, 현재일, 근무일수(소수점 이하 절삭), -- 근무년수(반올림),근무월수(30일 기준,반올림), 근무주수(반올림)를 출력하라. SELECT DEPTNO, ENAME, HIREDATE, SYSDATE, TRUNC(SYSDATE - HIREDATE) 근무일수, ROUND((SYSDATE-HIREDATE)/365) 근무년수, ROUND((SYSDATE-HIREDATE)/30) 근무월수, ROUND((SYSDATE-HIREDATE)/7) 근무주수 FROM EMP; --(5) 급여가 $1,500 부터 $3,000 사이의 사람은 급여의 15%를 회비로 지불하기로 하였다. -- 이를 이름, 급여, 회비(-2자리에서 반올림..
4day -- 4일차 /* select from where group by having order by */ -- 집합함수, 분석함수 SELECT AVG(SALARY)-- , first_name 일반 컬럼은 집합함수와 같이 쓰지 못함 FROM EMPLOYEES; -- group by : 특정한 컬럼으로 그룹을 지어주는 것 SELECT AVG(SALARY) 부서별평균월급, DEPARTMENT_ID, COUNT(*) 부서인원, max(salary) 부서최고월급, min(salary) 부서최저월급 FROM EMPLOYEES GROUP BY DEPARTMENT_ID; -- having : 그룹에 대한 조건절 SELECT AVG(SALARY) 부서별평균월급, DEPARTMENT_ID, COUNT(*) 부서인원, max(s..
문제2 (function) --(1) EMP Table에서 이름, 급여, 커미션 금액, 총액(sal+comm)을 구하여 총액이 -- 많은 순서로 출력하라. 단, 커미션이 NULL인 사람은 제외한다. select ename 이름,sal 급여,comm "커미션 금액",sal+nvl(comm,0) 총액 from emp where comm is not null order by 4 desc; --(2) 10번 부서의 모든 사람들에게 급여의 13%를 보너스로 지불하기로 하였다. -- 이름, 급여, 보너스 금액, 부서 번호를 출력하라. select ename 이름,sal 급여,(sal*0.13) "보너스 금액",deptno "부서 번호" from emp where deptno = 10; --(3) 30번 부서의..
3day -- 3일차 hr 계정 SELECT * FROM TAB; -- 해당 스키마에서 접근할 수 있는 테이블 리스트 DESC EMPLOYEES; SELECT * FROM EMPLOYEES WHERE LOWER(LAST_NAME) LIKE '%king%'; SELECT regexp_replace( REGEXP_REPLACE(PHONE_NUMBER, '(\d{3})\.(\d{2,3})\.([0-9]{4})', '(\1) \2-\3'), '\.', '-'), phone_number FROM EMPLOYEES; SELECT FIRST_NAME, JOB_ID, REGEXP_SUBSTR(JOB_ID,'(.+)(_)([A-Z]+)',1, 1,'i', 3) FROM EMPLOYEES; SELECT FIRST_NAME, JOB..
문제1 (select) -- select * from emp; --(1) 부서번호가 10번인 부서의 사람 중 사원번호, 이름, 월급을 출력하라 select empno 사원번호,ename 이름,sal 월급 from emp where deptno = 10; --(2) 사원번호가 7369인 사람 중 이름, 입사일, 부서번호를 출력하라 select ename 이름,hiredate 입사일,deptno 부서번호 from emp where empno = 7369; --(3) 이름이 ALLEN 인 사람의 모든 정보를 출력하라 select * from emp where ename = 'ALLEN'; --(4) 입사일이 81/05/01 인 사원의 이름, 부서번호, 월급을 출력하라 select ename 이름,deptn..
2day -- select SELECT * FROM EMP WHERE 1!=1; -- 1 = 1 -- 10번 부서 사람들만 조회 SELECT * FROM EMP WHERE DEPTNO = 10; -- 직업이 'CLERK' 인 사람들 조회 SELECT * FROM EMP WHERE JOB = 'CLERK'; -- like 검색 (%,_) -- 이름에 C자가 들어있는 사람을 조회 SELECT * FROM EMP WHERE ENAME LIKE '%C%'; -- 두번째 글자가 C로 시작하는 사람 조회 SELECT * FROM EMP WHERE ENAME LIKE '_C%'; -- order by절 컬럼으로 정렬을 함.(오름차순 : ascending, 내림차순 : descending) -- 월급 오름차순으로 정렬 SELE..